Pyaudio: библиотека для работы с аудиоданными в Python

Pyaudio - это модуль для Python, который позволяет осуществлять взаимодействие с звуком - записывать звук с микрофона, проигрывать звук на динамиках, создавать звуковые эффекты и многое другое.

Для начала необходимо установить pyaudio. Для этого можно воспользоваться pip:


pip install pyaudio

Запись звука из микрофона осуществляется с помощью метода `open()` и `read()` объекта `PyAudio`. Например, чтобы записать 5-секундный фрагмент звука с частотой дискретизации 16 кГц и сохранить его в файл, можно использовать следующий код:

python
import wave
import pyaudio
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)
stream.stop_stream()
stream.close()
audio.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

Чтение звука из файла и его проигрывание можно осуществить с помощью метода `open()` и `write()` объекта `PyAudio`. Например, чтобы проиграть ранее записанный звук из файла `output.wav`, можно использовать следующий код:

python
import pyaudio
import wave
CHUNK = 1024
wf = wave.open("output.wav", 'rb')
audio = pyaudio.PyAudio()
stream = audio.open(format=audio.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)
data = wf.readframes(CHUNK)
while data:
    stream.write(data)
    data = wf.readframes(CHUNK)
stream.stop_stream()
stream.close()
audio.terminate()

Pyaudio также позволяет создавать звуковые эффекты. Например, создадим простой эффект - задержку на 500 мс. Для этого воспользуемся функцией `delay()` из модуля `sound`

python
import pyaudio
import numpy as np
import sound
def delay(data, delay_time, decay_rate):
    delay_samples = int(delay_time * RATE)
    decay = decay_rate ** np.arange(delay_samples, 0, -1, dtype=float)
    decay = np.expand_dims(decay, axis=1)
    z = np.zeros((delay_samples, CHANNELS), dtype=float)
    temp_data = np.concatenate((z, data))
    for n in range(delay_samples, temp_data.shape[0]):
        temp_data[n, :] += decay[n-delay_samples]*temp_data[n-delay_samples, :]
    return temp_data
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(np.frombuffer(data, dtype='int16'))
stream.stop_stream()
stream.close()
audio.terminate()
data = np.concatenate(frames)
data = delay(data, 0.5, 0.5)
data = np.asarray(data, dtype='int16')
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, output=True)
stream.write(data.tobytes())
stream.stop_stream()
stream.close()
audio.terminate()

В результате при проигрывании записанного звука мы услышим его с эффектом задержки на 500 мс, который мы добавили с помощью функции `delay()`.

Похожие вопросы на: "pyaudio "

Работа с массивами в языке Python
Руководство по работе с файлом настроек bashrc
Developer Error: Avoiding the Top Mistakes in Software Development
JSONB в PostgreSQL: гибкое хранение и обработка данных
Из бит в байт: перевод, значимость и практическое применение
Дерево Хаффмана онлайн: построение, кодирование и декодирование
PHP массив в JSON: преобразование данных для передачи на сайт
<h1>Изучаем jQuery ToggleClass: добавление и удаление классов с помощью jQuery
QT Designer - скачать бесплатно
LifeRay - универсальное решение для создания и управления веб-порталами