Как сделать диктофон на 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 pyaudioimport wave
form_1 = pyaudio.paInt16 # 16-bit resolutionchans = 1 # 1 channelsamp_rate = 44100 # 44.1kHz sampling ratechunk = 4096 # 2^12 samples for bufferrecord_secs = 3 # seconds to recorddev_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 streamstream = 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 arrayfor 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 instantiationstream.stop_stream()stream.close()audio.terminate()
# save the audio frames as .wav filewavefile = 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.
Оригинал статьи здесь.