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 flashw tablicach s_noteFreqEx, s_sineTable, s_envelope i s_sample należy dodać atrybut PROGMEMew. 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 flashw 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 .
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
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).
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.
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).
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 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