Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 25 kwi 2024, o 10:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 25 wrz 2014, o 16:44 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Witam.

Projekt odtwarzacza plików MIDI opiera się na kodzie ze strony: http://www.deep-shadows.com/hax/wordpress/?page_id=1111. Kod pierwotnie był przystosowany do kompilacji pod CodeVision AVR. Ja tylko przystosowałem kod biblioteki, aby kompilował się z AVR-GCC. Poniżej main.c dla Atmega2560, ale można łatwo przystosować do innej Atmegi z min. 4kB flash i jednym kanałem PWM pracującym w trybie Fast PWM. Na stronie autora znajdują się pliki projektu, oraz program do generowania melody.c i hxMidiPlayer_Config.h z wybranego pliku midi.

Jak konwertować swoje pliki midi do odtwarzania przez AVR? Uruchamiamy program MidiToC pobrany ze strony widocznej na górze postu. Ustawiamy "Sampling rate" na taką częstotliwość z jaką będzie pracował timer obsługujący odtwarzanie. Wybieramy ilość kanałów (proponuję zacząć od 4), wybieramy obwiednię, zaznaczamy lub nie syntetyzer perkusji (Drums syntezer) i wczytujemy plik midi za pomocą "Load midi". Program zacznie odtwarzać dźwięk mniej więcej jak nasz AVR. Po skorygowaniu ustawień tak by odpowiadały naszym upodobaniom możemy przejść do generowania plików. Klikamy "Create player config" i wklejamy ze schowka kod do pliku hxMidiPlayer_Config.h. Klikamy "Create melody code" i wklejamy do pliku melody.c.
Aby program działał pod AVR-GCC należy nanieść małe zmiany w plikach przed chwilą wygenerowanych:
- W pliku hxMidiPlayer_Config.h:
    należy usunąć wszystkie wystąpienia dyrektywy flash
    w tablicach s_noteFreqEx, s_sineTable, s_envelope i s_sample należy dodać atrybut PROGMEM
    ew. co by nam kompilator nie pluł warningami należy zakomentować na samym końcu HXMIDIPLAYER_CONFIG_INCLUDED
- W pliku melody.c:
    należy usunąć wszystkie wystąpienia dyrektywy flash
    w tablicach s_melody_stream1 i s_melody_stream2 oraz strukturze s_melody należy dodać atrybut PROGMEM

Po kompilacji możemy wrzucić program do AVR z podłączonym głośnikiem do wybranego pinu PWM. Na stronie autora jest kilka możliwych schematów łącznie ze schematem prostego wzmacniacza klasy D ;).

Tak to działa (film autora):


Poniżej kod:
main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

hxMidiPlayer.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

hxMidiPlayer.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wygenerowany hxMidiPlayer_Config.h po poprawkach
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wygenerowane melody.c po porawkach
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

melody.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Powyższy kod jest uruchomiony na 16 bitowym timerze. W przypadku uruchamiania na 8 bitowym timerze funkcja Player_Output powinna wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak ktoś jest oblatany w Deplhi mógłby pomóc zmienić kod MidiToC tak by generował gotowe pliki pod AVR-GCC. Źródełka programu znajdują się na stronie autora. Uwaga synteza dźwięku nie jest lekkim zadaniem dla małych AVR-ków, więc polecam zegar min. 16MHz (nie próbowałem na niższym). Zegar będzie głównym ogranicznikiem ilości kanałów i częstotliwości próbkowania z jaką będziemy mogli odtwarzać melodie. Więcej na ten temat na stronie autora.



Ostatnio edytowano 7 paź 2014, o 22:55 przez ryba84, łącznie edytowano 9 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2014, o 12:24 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Nie ma to jak sobie samemu odpowiedzieć. W pierwszym poście poprawione źródełka z samplami przetrzymywanymi w pamięci flash. Teraz ten kod pójdzie nawet na Atmega8 (po zmianach w main.c). Jedyne do czego jeszcze nie doszedłem to jak umieścić strukturę TMelody we flash (zawsze kilka bajtów mniej zużytego RAM-u).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2014, o 22:57 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Kolejna aktualizacja:
Struktura TMelody znajduje się również we flash (okazało się to łatwiejsze niż myślałem) ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2014, o 23:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

fajny projekt ;) ... tylko skąd ci ludzie biorą te muzyczki midi ? Tak z ciekawości pytam bo dla mnie tego typu audio projekty to nie jest chleb powszedni.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 00:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Ta muzyczka "River flows in You" mnie rozwala :) a sie miło słucha... (a na drugim kompie właśnie wesele próbuję montować :lol: )

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 00:39 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

mirekk36 napisał(a):
fajny projekt ;) ... tylko skąd ci ludzie biorą te muzyczki midi ? Tak z ciekawości pytam bo dla mnie tego typu audio projekty to nie jest chleb powszedni.

Midi można pełno znaleźć w necie. W archiwum projektu ze strony autora jest kilkadziesiąt melodii (z gier, muzyki poważnej, filmów itp..). Dodatkowo na chomiku pełno plików od karaoke a to też midi tylko z innym rozszerzeniem ;) No i dzwonki do telefonów. Kiedyś midi to był dość popularny format. A trafiłem na tą stronę szukając jakiegoś sposobu na puszczanie melodyjek z AVR bez dodatkowego osprzętu (karty SD, zewnętrznego RAM itd..). Wiem, że łatwiej odtwarzać WAV, ale ile to wymaga pamięci (jakiejkolwiek) stąd pomysł na midi. Jeszcze tylko poprawię komentarze w kodzie i może przerobię to na Atmegę8 co by więcej ludzi mogło wypróbować. Dźwięk jest przyzwoitej jakości (dużo zależy od wybranej opcji podłączenia ze strony autora, u mnie np. nie sprawdza się ostatni schemat, ale to może być wina tego, że za głośnik służy mi słuchawka, którą wyszabrowałem od zestawu z jakiegoś starego telefonu).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2015, o 19:21 
Offline
Nowy

Dołączył(a): 08 kwi 2015
Posty: 1
Pomógł: 0

Wiecie może w jakim programie są zrobione te projekty płytek ze strony autora?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2015, o 19:28 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

W Protelu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2017, o 06:11 
Offline
Nowy

Dołączył(a): 30 gru 2015
Posty: 1
Pomógł: 0

Chętnie skorzystał bym z przeróbki na Atmega8. Ale minęło już trochę czasu, to nie wiem czy się doczekam.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO