LINUX.ORG.RU

Воспроизведение mp3 на Python есть вопрос


0

0

собственно воспроизвести я воспроизвел, стянул pymad поставил, написал, все ок, говорит.

Вопрос такой. У меня в mp3 записана речь ( человеческий голос всмысле )
Как я могу цивиллизованым способом определить говорят в данный момент чтонибудь или нет? Ну всмысле не на слух а в скрипте 8)
уровень шума между фразами там практически нулевой.

кстати есть вариант использовать alsa (aRts) а не oss как в примерах?

anonymous

очевидно тебе надо мерять средний уровень мощности сигнала (RMS) (не среднее значение !)

не знаю как там работают биндиги к mad, я когда играл в звуковые эффекты на питоне запускал mpg123 с ключом -s (вывод на stdout) в popen3(), читал с него данные (надо знать частоту разрядность и количество каналов), преобразовывал и писал в /dev/dsp.

как считать RMS см http://en.wikipedia.org/wiki/Root_mean_square

чтобы определять паузы в речи очевидно нужно достаточно большое окно (больше паузы между звуками) и чтобы уровень был ниже порога несколько окон подряд

anonymous
()
Ответ на: комментарий от anonymous

очевидно ( спасибо за ссылку )

я просто подумал вдруг mad уже встроенное чтонить в этом плане умеет. типа current_time() он же выдает, вдруг он и RMS умеет выдавать

anonymous
()
Ответ на: комментарий от anonymous

ну если такой вопрос то и топик надо называть "вопрос по libmad", а не про mp3 и питон. про libmad ничего не знаю. но неужели у него так плохо с документацией? можно наконец исходники почитать, какие функции из него импортируются.

anonymous
()
Ответ на: комментарий от anonymous

да нет, с докуметацией все ок, только там сходу не за что глазом зацепиться...

а нельзя ли какнить хитро вычислять RMS из буфера? ну тот, что

buf = madfile.read()

вообще это уже надо полагать набор отсчетов который в dsp суется?

anonymous
()
Ответ на: комментарий от anonymous

этот код прокатит только для 8-битного моно потока (для речи этого достаточно).

для N-битного M-канального потока надо резать buf на куски по N/8*M байт и воспользоваться стандартным модулем struct для преобразования в int.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.