据我所知
pyalsaaudio documentation
你似乎是根据他们的
example for recording audio.
我能从你的程序中看到的唯一问题可能是安装过程?你是用PIP还是手动安装的?(我猜是pip;也许你缺少了正确的alsa依赖项?)。如果您想继续使用此库,可能需要尝试手动安装。
根据我的经验,大多数人倾向于使用
皮亚迪
用于实时音频IO。它建在
portaudio
它在Linux构建过程中使用ALSA。因为它被广泛使用,你会发现很多例子,比如:
为了让您开始,这里有一个从麦克风录制音频的示例(阻塞,即程序等待音频被录制后再发生其他事情),并用pyaudio将数据写入python中的.wav文件。
import pyaudio # Soundcard audio I/O access library
import wave # Python 3 module for reading / writing simple .wav files
# Setup channel info
FORMAT = pyaudio.paInt16 # data type formate
CHANNELS = 2 # Adjust to your number of channels
RATE = 44100 # Sample Rate
CHUNK = 1024 # Block Size
RECORD_SECONDS = 5 # Record time
WAVE_OUTPUT_FILENAME = "file.wav"
# Startup pyaudio instance
audio = pyaudio.PyAudio()
# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK)
print "recording..."
frames = []
# Record for RECORD_SECONDS
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print "finished recording"
# Stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
# Write your new .wav file with built in Python 3 Wave module
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
如果安装时遇到问题,下面是Ubuntu 16.04 LTS(最初
posted here
)
sudo apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
sudo apt-get install ffmpeg libav-tools
sudo pip install pyaudio
希望这有帮助!
额外的:
如果你觉得有
plenty examples
上
portaudio website
浅谈如何在C/C++中启动实时音频IO