使用 python 从 PC 麦克风获取音频输入
Taking audio input from PC microphone using python
我正在使用 ubuntu 16.04,我必须从我的电脑麦克风获取音频输入。我用的是python 3.我用的是pyalsaaudio。我从某处复制了代码。这是代码
import alsaaudio, time, audioop
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)
inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
inp.setperiodsize(160)
while True:
l,data = inp.read()
if l:
print(audioop.max(data, 2))
time.sleep(.001)
通过使用此代码,我收到一个错误,因为
ALSAAudioError: Invalid argument
在第 1 行中3 inp.setchannels(1)
如果有另一个库可以做到这一点,我是新手,那么也请提出建议。
谢谢
据我所知 pyalsaaudio documentation you seem to be setting it up correct according to their example for recording audio.
我能看到你的程序的唯一问题可能是安装过程?你是用pip安装的还是手动安装的? (我猜是 pip;也许您缺少正确的 ALSA 依赖项?)。如果您想继续使用这个库,也许值得尝试手动安装。
PyAudio
根据我的经验,大多数人倾向于使用 PyAudio 进行实时音频 IO。它建立在 portaudio 之上,后者在 Linux 构建过程中使用 ALSA。由于它被广泛使用,您会发现很多示例,例如:
- Real-time Blocking mode audio IO
- Real-time Callback mode audio IO
- Playing .wav files
- 这是一个网站,其中包含 50 个其他 PyAudio 事物的示例...
为了让您入门,这里有一个从麦克风录制音频的示例(阻塞,即程序在其他任何事情发生之前等到音频被录制),并将该数据写入 [= 中的 .wav 文件55=] 与 PyAudio.
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 on the portaudio website 中有关于如何开始使用实时音频 IO 的 C/C++
我正在使用 ubuntu 16.04,我必须从我的电脑麦克风获取音频输入。我用的是python 3.我用的是pyalsaaudio。我从某处复制了代码。这是代码
import alsaaudio, time, audioop
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)
inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
inp.setperiodsize(160)
while True:
l,data = inp.read()
if l:
print(audioop.max(data, 2))
time.sleep(.001)
通过使用此代码,我收到一个错误,因为
ALSAAudioError: Invalid argument
在第 1 行中3 inp.setchannels(1)
如果有另一个库可以做到这一点,我是新手,那么也请提出建议。 谢谢
据我所知 pyalsaaudio documentation you seem to be setting it up correct according to their example for recording audio.
我能看到你的程序的唯一问题可能是安装过程?你是用pip安装的还是手动安装的? (我猜是 pip;也许您缺少正确的 ALSA 依赖项?)。如果您想继续使用这个库,也许值得尝试手动安装。
PyAudio
根据我的经验,大多数人倾向于使用 PyAudio 进行实时音频 IO。它建立在 portaudio 之上,后者在 Linux 构建过程中使用 ALSA。由于它被广泛使用,您会发现很多示例,例如:
- Real-time Blocking mode audio IO
- Real-time Callback mode audio IO
- Playing .wav files
- 这是一个网站,其中包含 50 个其他 PyAudio 事物的示例...
为了让您入门,这里有一个从麦克风录制音频的示例(阻塞,即程序在其他任何事情发生之前等到音频被录制),并将该数据写入 [= 中的 .wav 文件55=] 与 PyAudio.
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 on the portaudio website 中有关于如何开始使用实时音频 IO 的 C/C++