Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 9, 2012 20:04:10

Mitriy_Dimitriy
От:
Зарегистрирован: 2012-02-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись звука с микрофонного входа

Добрый день форуму.
Существует задача - записать звуковой сигнал с микрофонного входа. Сигнал туда идет двухканальный, но в процессе записи надо свести его в моно. Для этого использую функции библиотеки alsaaudio. Рабочая часть кода выглядит примерно так.

card = ‘default’
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, card)
inp.setchannels(1)
inp.setrate(44100)
inp.setformat(alsaaudio.PCM_FORMAT_S8)
inp.setperiodsize(4410)

while l!=4410:
l, data=inp.read()
time.sleep(0.02)
integer_data = struct.unpack(“%dB”%(sps),data)
a= numpy.array(integer_data)
b = a - 128

По идее на выходе должна быть последовательность чисел, соответствующая амплитудам участка сигнала длиной 0.1 секунды и отцентрированная на 128 из 256. Так как пока пишу 8 бит. Но результат от этого очень далек - такие сэмплы, будучи расположены один за другим ни капли не похожи на то, что подается на вход. Форумчане, если кто-то сталкивался с подобной задачей, помогите, пожалуйста разрешить такие вопросы:

1) В чем порок такого метода записи? Нет ли более элегантного решения для записи амплитуд сигнала с микрофонного входа?
2) Как по уму получать такую последовательность амплитуд и параллельно с этим записывать снятое в wav-файл?
3) Если в параметрах записи указать 1 channel - это сведет стерео в моно?
5) Каким образом лучше всего организовать on-line запись звука со входа на более-менее длительных временах?
4) Если хочется повысить битность до 16, формат PCM_FORMAT_S16_LE подойдет? Если да - то как его правильно воткнуть в код, а если нет - то какой подойдет?



С надеждой, новичок в питоне.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version