2013-08-28 5 views
6

이것은 잠시 동안 노력해 왔으며 공개 된 질문에 더 가깝습니다. 누군가가이 문제에 관해 어떤 비춰 줄 수있는 지식을 가지고 있다면, 대단히 감사하겠습니다.파이썬에서 Mp3 파싱

저는 오디오 스트림을 mp3로 디코딩하고이를 애니메이션을 구동하기 위해 파이썬을 사용합니다. 내가 이해할 수있는 것처럼 mp3의 오디오 데이터는 32 개의 주파수 서브 밴드 (또는 빈)의 프레임에 저장됩니다. 이는 mp3를 가져 와서 각 프레임의 각 서브 밴드에 대한 진폭을 추출 할 수 있다면 나에게 이상적입니다. 내가하고 싶은 일에 완벽 해.

여기서 해결책을 찾았습니다. https://bitbucket.org/portalfire/pymp3 모든 처리가 파이썬으로 수행되는 것 같습니다. 비록 내가 원하는 것을 추출하기 위해 그것을 사용할 수 있다고해도, 그것은 아주 느릴 수 있습니다. - 나는 그 코드에서 어떤 일이 벌어지고 있는지 이해하려고 고심하고 있습니다. 또한 wav로 변환 한 다음 fft를 사용하여 wav에서 주파수를 추출하는 솔루션을 사용했습니다. 이것은 매우 시끄 럽고 원하는 데이터가 mp3에 직접 저장되어 있기 때문에 어리석은 방법처럼 보입니다. 사운드 웨이브로 다시 변환하는 것은 불필요한 것처럼 보입니다. 첫 번째 것보다 실제로 빠릅니다. 여기에 내가 함께 결국 무엇 : 사람이 그들이 공유하고 싶은 조언이나 경험을 가지고, 또는 내가 봐야한다 도서관에 대한 아이디어, 내가 정말 듣고 싶습니다

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

잘합니다.

감사합니다.

http://lightshowpi.org/

소스 코드를 도청하고 그것을 어떻게 참조 : 헨리

+1

http://wiki.python.org/moin/PythonInMusic을 한 번 방문하면 거대한 라이브러리 세트를 확인할 수 있습니다. –

+0

많은 MP3 라이브러리가 있으며 권장 사항을 묻습니다. 사용하는 것은 정확히 SO와 같은 질의 응답 포럼이 처리에 나쁜 점입니다. – abarnert

+2

한가지 조언을 해 줄 수 있습니다 : cython, ctypes 또는 다른 메커니즘을 사용하는 방법을 알고 있다면 mpg123과 같은 C 라이브러리에서 Python 바인딩이없고 원하는 비트 만 래핑하는 것이 좋습니다. . 그렇게 많은 옵션이 있습니다. – abarnert

답변

1

는에서 살펴 보자.

그들은 또한 파도 출력에 있지만 실시간으로 FFT를 사용했으며 Raspberry Pi에서 잘 작동한다고 생각할 정도로 느리지는 않습니다.

더 빨라서 코사인 변환으로 전환 할 수 있습니다. MP3가 코사인 변환으로 인코딩되어 있으므로 MP3 프레임을 직접 확인하는 경우 수행 할 작업입니다.

그래서, 현실 세계에서 어떤 빈과 유사한 빈인지 먼저 알아야합니다.

pypi.python.org에는 이제 프레임 단위로 디코딩 할 수있는 AV 또는 ffmpeg 직접 바인딩이 있지만 프레임을 나타내는 객체에서 freq를 추출 할 수 있는지 또는 처음으로 변환해야하는지 여부는 알지 못합니다. 원시뿐만 아니라.

내가 너라면 필자가 찾은 순수한 Python MP3 코드를 사용하여 필요한 부분 만 추출하여 그 과정에서 최적화 할 것이다. 필요한 경우 cython 사용.

그러나 그 방법은 MP3로만 제한됩니다. Lightshow Pi는 거의 모든 압축 유형에서 작동합니다.

관련 문제