欢迎访问宙启技术站
智能推送

了解Python中的PyAudio库及其功能

发布时间:2024-01-09 09:12:59

PyAudio是Python中一个方便的音频处理库,可以用于录制音频,播放音频以及处理音频流。它是对PortAudio库的封装,可以在不同的操作系统上进行音频的输入和输出。

PyAudio库提供了以下功能:

1. 录制音频:PyAudio可以用于从麦克风或其他音频设备录制音频。可以设置采样率、位数和声道数等参数。以下是一个简单的录制音频的例子:

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print("Recording...")

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("Finished recording.")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

2. 播放音频:PyAudio可以用于播放音频文件。可以设置播放的参数,如采样率、位数和声道数等。以下是一个简单的播放音频的例子:

import pyaudio
import wave

CHUNK = 1024

wf = wave.open('input.wav', 'rb')

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

print("Playing...")

data = wf.readframes(CHUNK)

while data != b'':
    stream.write(data)
    data = wf.readframes(CHUNK)

print("Finished playing.")

stream.stop_stream()
stream.close()
p.terminate()

3. 处理音频流:PyAudio可以用于实时处理音频流。可以将输入的音频流进行处理后,再输出。以下是一个简单的实时处理音频流的例子:

import pyaudio
import numpy as np

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                frames_per_buffer=CHUNK)

print("Processing audio...")

while True:
    data = stream.read(CHUNK)
    # 进行音频处理,这里将读取的音频数据转换为numpy数组,并将声音放大两倍
    processed_data = np.frombuffer(data, dtype=np.int16) * 2
    processed_data = processed_data.astype(np.int16)
    stream.write(processed_data.tobytes())

stream.stop_stream()
stream.close()
p.terminate()

总之,PyAudio是Python中一个非常实用的音频处理库,可以用于录制音频、播放音频以及实时处理音频流。通过它,我们可以方便地进行音频相关的开发和处理。以上是一些简单的使用例子,你可以根据自己的需求进行进一步的学习和应用。