【问题标题】:Python, Error audio Recording in 16000Hz using PyaudioPython,使用 Pyaudio 以 16000Hz 录制错误音频
【发布时间】:2012-10-11 07:00:11
【问题描述】:

我使用 Python 2.7.3、Mac OS 10.8.2 和 Xcode 4.5.1

我正在尝试按照http://people.csail.mit.edu/hubert/pyaudio/ 中的说明使用 PyAudio 录制声音

并使用程序

"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
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("* done 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()

它适用于RATE = 44100。但我想用RATE = 16000CHANNELS = 1录制

更改值给我一个错误

如何使用RATE = 16000 进行录音?

【问题讨论】:

  • 增加块大小(例如到 4096)能解决问题吗?
  • @nneonneo:不,它没有。仅适用于 44100
  • 嗯。我以前遇到过这个问题,但从未解决过。这可能是 PortAudio 中的错误,或者是不受支持的录音配置。如果您想要 16000 Hz 输出,则可以使用采样率转换库。
  • 您可以使用例如pylibsamplerate(需要 Numpy),它有一个非常简单的 API 来进行转换(只要将音频转换为 Numpy 数组,只需 src_simple(a, 16000/44100.),如 np.frombuffer(data, np.int16))。但是,这仍然比我怀疑你想要的要复杂一些,所以我希望有人能尽快为这个问题提供一个好的答案。
  • 非常感谢。你能编辑一下代码吗?

标签: python pyaudio


【解决方案1】:

我遇到了同样的问题。该问题已在 portaudio 中修复,但 brew 为我安装了旧版本。我升级了

brew install portaudio --HEAD

然后能够使用 CHANNELS=1 和 RATE=16000 运行您的代码

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2020-12-19
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多