2013-08-28 21 views
6

To jest coś, co próbowałem zrobić przez jakiś czas, i jest bardziej otwartym pytaniem. Jeśli ktoś ma jakąś wiedzę, która może mi pomóc rzucić trochę światła na to, byłby bardzo ceniony.Przetwarzanie Mp3 w Pythonie

Chcę dekodować strumień audio w formacie mp3 i używać go do animacji, wszystko za pomocą Pythona. Jak rozumiem, dane audio w formacie mp3 są przechowywane w ramkach 32 pasm częstotliwości (lub przedziałów częstotliwości), co jest idealne dla mnie - gdybym mógł wziąć mp3 i wyodrębnić amplitudę dla każdego podpasma w każdej ramce, to bądź doskonały dla tego, co chcę robić.

Znalazłem rozwiązanie tutaj https://bitbucket.org/portalfire/pymp3, gdzie wszystkie przetwarzanie wydaje się być wykonane w python. Jest dość powolny, ale nawet jeśli mógłbym użyć tego do wydobycia tego, co chcę, byłoby dobrze - staram się zrozumieć, co dzieje się w tym kodzie. Miałem również rozwiązanie, w którym przekonwertowałem na WAV, a następnie użyłem fft, aby wyodrębnić częstotliwości z WAV. To było bardzo głośne i wydaje się głupim sposobem, aby to zrobić, ponieważ dane, które chcę, są przechowywane bezpośrednio w mp3 - konwersja z powrotem na falę dźwiękową wydaje się niepotrzebna. To było jednak szybsze niż pierwsze. Oto, co skończyło się z:

http://www.youtube.com/watch?v=f_0FORxlK4A

Cóż, jeśli ktoś ma jakieś rady lub doświadczenia, które chcą udostępnić, lub pomysły na bibliotekach mam patrzeć, naprawdę chciałbym usłyszeć.

Dzięki!

Henry

+1

Możesz przejść przez http://wiki.python.org/moin/PythonInMusic raz, aby sprawdzić ogromny zestaw bibliotek dostępnych tam –

+0

Istnieje wiele bibliotek MP3 tam i prosząc o rekomendacje na którym można się posłużyć, to takie rzeczy, które na forum pytań i odpowiedzi, takie jak SO, są złe w obsłudze. – abarnert

+2

Jedna rada, jaką mogę dać: Jeśli wiesz, jak używać cytonów, ctypów lub jakiegokolwiek innego takiego mechanizmu, warto zajrzeć do bibliotek C takich jak mpg123, które nie mają żadnych powiązań w Pythonie, i zawijać tylko te bity, które potrzebujesz . W ten sposób masz o wiele więcej opcji. – abarnert

Odpowiedz

1

Spójrz na:

http://lightshowpi.org/

Sniff się kod źródłowy i zobaczyć, jak oni to zrobili.

Użyli również FFT na wyjściu fali, ale w czasie rzeczywistym, i nie jest tak powolny, jak uważasz, że działa dobrze na Raspberry Pi.

Zamiast tego mogą przełączyć się na przekształcenie kosinusowe, ponieważ jest ono szybsze, i to właśnie robilibyście, sprawdzając poprawnie ramki MP3, ponieważ MP3 jest kodowane w transformacji cosinus.

Najpierw będziesz musiał wiedzieć, który bin przypomina częstotliwości w rzeczywistym świecie.

Na pypi.python.org istnieją bezpośrednie połączenia AV lub ffmpeg, które pozwalają na dekodowanie klatka po klatce, ale nie wiem, czy można wyodrębnić freqs z obiektów reprezentujących klatki, czy musiałbyś najpierw przekonwertować surowe również.

Gdybym był tobą, użyłbym czystego kodu Pythona MP3, który znalazłeś, by wydobyć to, czego potrzebuję, optymalizując go w procesie. W razie potrzeby za pomocą cytonu.

Ale takie podejście ogranicza Cię tylko do MP3. Lightshow Pi działa na prawie wszystkich typach skompresowanych.