Как сделать диктофон на python
Инструкция по созданию приложения на python, с помощью которого можно записывать звук с микрофона, подключенного к компьютеру.
Создадим простой скрипт на python, с помощью которого можно записывать звук с микрофона, подключенного к компьютеру.
Я буду приводить пример для raspberry pi 3, но также это дело можно адаптировать для windows, проверял на ноутбуке с windows 7 с внутренним и usb микрофоном, записывает отлично.
Для начала нам нужно узнать, определился ли подключенный к системе микрофон.
Вlinux список подключенных устройств можно просмотреть командой:
lsusb -t
Установка необходимых аудио-инструментов для Raspberry Pi
Мы будем использовать библиотеку Python ‘pyaudio’ для записи и воспроизведения аудиоданных с USB-микрофона.
Прежде чем мы сможем начать использовать ‘pyaudio,’ нам нужно убедиться, что RPi имеет все для необходимое для этого, установив следующие пакеты:
sudo apt install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev
Если все вышеперечисленное выполнено успешно, мы можем загрузить библиотеку ‘pyaudio’ (Я устанавливаю на Python 3.x с помощью команды ‘pip3’):
sudo pip3 install pyaudio
Если все вышеуказанное было сделано успешно, мы готовы перейти к следующему разделу и убедиться, что USB-микрофон работает, а Pi выбрал правильное устройство.
Тестирование USB микрофона и Pyaudio
Откройте в терминале Python 3.x и введите следующее:
>>> import pyaudio
>>> p = pyaudio.PyAudio()
>>> for i in range(p.get_device_count()):
>>> print(p.get_device_info_by_index(i).get('name'))
Это должно вывести индекс каждого аудиоустройства подключенного к вашему RPi.
Обратите внимание на индекс (номер) устройства USB, потому что нам нужно будет настроить индекс устройства pyaudio в соответствии с приведенной выше последовательностью. Например, our USB device index is “2” (index 0 is ALSA blank, index 1 is IEC958/HDMI, etc…).
ПРИМЕЧАНИЕ: ОБРАТИТЕ ВНИМАНИЕ НА ИНДЕКС (номер) USB-УСТРОЙСТВА, ПОТОМУ ЧТО НАМ НУЖНО будет указать его в PYAUDIO DEVICE.
НАПРИМЕР, МОЕ USB-УСТРОЙСТВО НАХОДИТСЯ ПО ИНДЕКСУ 2 (ИНДЕКС 0 IS ALSA MAIN, INDEX 1 IS IEC958/HDMI, ETC…).
Теперь, когда мы узнали под каким номером определился наш USB-микрофон, мы можем записать тестовый образец с помощью pyaudio. Подробную информацию об использовании pyaudio можно найти здесь.
import pyaudio
import wave
form_1 = pyaudio.paInt16 # 16-bit resolution
chans = 1 # 1 channel
samp_rate = 44100 # 44.1kHz sampling rate
chunk = 4096 # 2^12 samples for buffer
record_secs = 3 # seconds to record
dev_index = 2 # device index found by p.get_device_info_by_index(ii)
wav_output_filename = 'test1.wav' # name of .wav file
audio = pyaudio.PyAudio() # create pyaudio instantiation
# create pyaudio stream
stream = audio.open(format = form_1,rate = samp_rate,channels = chans, \
input_device_index = dev_index,input = True, \
frames_per_buffer=chunk)
print("recording")
frames = []
# loop through stream and append audio chunks to frame array
for ii in range(0,int((samp_rate/chunk)*record_secs)):
data = stream.read(chunk)
frames.append(data)
print("finished recording")
# stop the stream, close it, and terminate the pyaudio instantiation
stream.stop_stream()
stream.close()
audio.terminate()
# save the audio frames as .wav file
wavefile = wave.open(wav_output_filename,'wb')
wavefile.setnchannels(chans)
wavefile.setsampwidth(audio.get_sample_size(form_1))
wavefile.setframerate(samp_rate)
wavefile.writeframes(b''.join(frames))
wavefile.close()
Выходной файл .wav должен иметь длину 3 секунды (при условии, что приведенный выше код не изменился) и дискретизируется с частотой 44,1 кГц с максимальным разрешением 16 бит. В зависимости от используемого микрофона частоту дискретизации можно увеличить до 48 кГц. Битовую глубину также можно изменить, хотя я не совсем уверен в ограничениях возможностей Pi.
Оригинал статьи здесь.