- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 python 和 pyaudio 使用回调方法流式传输纯正弦音,以便稍后通过用户输入调制声音。一切都很好,除了当我运行代码时,我收到 1-2 秒的与警告消息相关的爆裂声ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred之后,正弦音被正确传输。关于如何消除初始爆裂声的任何提示?这是流式传输一秒钟声音的代码
import pyaudio
import time
import numpy as np
CHANNELS = 1
RATE = 44100
freq = 600
CHUNK = 1024
lastchunk = 0
def sine(current_time):
global freq,lastchunk
length = CHUNK
factor = float(freq)*2*np.pi/RATE
this_chunk = np.arange(length)+lastchunk
lastchunk = this_chunk[-1]
return np.sin(this_chunk*factor)
def get_chunk():
data = sine(time.time())
return data * 0.1
def callback(in_data, frame_count, time_info, status):
chunk = get_chunk() * 0.25
data = chunk.astype(np.float32).tostring()
return (data, pyaudio.paContinue)
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=CHANNELS,
rate=RATE,
output=True,
stream_callback=callback)
stream.start_stream()
time.sleep(1)
stream.stop_stream()
stream.close()
干杯
最佳答案
PortAudio(PyAudio 背后的库)允许您指定 block 大小,在 PyAudio 示例中通常称为 CHUNK
。如果您不指定,默认值为 0
,在 PortAudio 术语中这意味着 block 大小将自动选择,甚至会在回调之间变化!
要检查这一点,请尝试在回调中打印 frame_count
(这是 block 大小的另一个名称)。我怀疑 PortAudio 一开始选择的 block 大小太小,当这导致欠载时,它会增加 block 大小。我说得对吗?
为避免这种情况,您应该从一开始就指定一个固定的 block 大小,使用:
stream = p.open(..., frames_per_buffer=CHUNK, ...)
... 其中 frames_per_buffer
是 block 大小的另一个名称。
这也更有意义,因为到目前为止,您在不知道实际 block 大小的情况下在代码中使用 length = CHUNK
!
如果这仍然导致数据不足,您可以尝试将 block 大小进一步增加到 2048
。
最后,让我冒昧地为我自己的 PortAudio 包装器制作一个不要脸的插件,sounddevice模块。它与 PyAudio 的功能基本相同,但更易于安装,恕我直言,它具有更好的 API,并且它直接支持 NumPy,无需您进行手动转换。
关于python - pyaudio 中的破解声音正弦音调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40378640/
我正在尝试运行以下 python 程序,但出现了一些错误。该程序旨在将实时语音转换为文本,它使用的是我使用 CMUSphinx 训练的声学模型。 编码: #!/usr/bin/env python i
我一直无法找到在我的机器上安装 PyAudio 的修复程序。我尝试了几种不同的解决方案,并且确实使用自制软件安装了必备库“portaudio”。我还寻找了出现在输出底部的 gcc 错误的解决方案,而这
我在学校项目中使用 pyaudio,我试图让声音一次只在一个扬声器上播放。我的代码是这样的: import pyaudio p = pyaudio.PyAduio() def play_wave(st
我有一个播放 wav 文件的非常基本的 pyaudio 代码。 open_wave = wave.open("tone_silence/l0r1d0_500.wavc",'rb') p
我使用 pyaudio 库从声卡中读取声音。我使用以下代码 stream = pyaudio.PyAudio().open(format=pyaudio.paInt16, channels=2,
我正在尝试使用 pyaudio 构建一个应用程序来记录扬声器和麦克风的声音,但我只是不知道如何同时记录它们。我尝试启用立体声混音器,但它没有成功,因为我只能听扬声器发出声音。我使用的这段代码使用 py
我正在尝试使用麦克风从盖革计数器收集数据并使用 Python 对其进行处理。但是,我使用的是大学计算机,因此不允许我安装此工作似乎必需的 PyAudio 模块 ( Python read microp
是否可以使用 pyaudio 演奏和弦? 最佳答案 当然可以! 只需生成结果并将其传递给播放器即可。 This article covers a method to do it. 以下是示例代码,以防
我在 PyAudio 网站上看到了录制固定长度录音的录音教程,但我想知道如何对非固定长度的录音做同样的事情?基本上,我想创建按钮来开始和结束录音,但我还没有找到任何关于此事的信息。有什么想法,我不是在
我正在尝试创建一个 python 程序来使用 PyAudio 和 Ubuntu 16.04 录制和循环音轨。我收到一条错误消息,提示“未找到默认输入设备”。当我查询默认设备并尝试列出所有设备时,我得到
为了录制一个 2 秒的 wav 文件,我使用了 PyAudio(带有 Pyzo)和以下经典代码来录制声音并保存它: import pyaudio import wave chunk = 1024 FO
我目前面临一个难题。我需要在法语 Windows 环境中使用 Pyaudio,并且音频设备的名称默认包含 é 或 è。 这是出现特殊字符时出现的错误: u=self.p.get_device_i
我目前正在使用PyAudio来开发轻型录音实用程序,该实用程序可以满足我计划中的应用程序的特定需求。我正在使用ASIO音频接口(interface)。我正在编写程序要做的是通过界面播放wav文件,同时
尝试使用 pip 安装 PyAudio 包显示错误,而其他包安装正常。我正在使用 python 3.7。为什么会出现此错误? C:\Users\Himanshu>pip install PyAudio
我正在 Intel Edison 开发板上试用 pyaudio,但内置测试失败了。单独录制和播放在我的设置下工作正常,但如果我尝试将输入连接到输出,则会出现错误。 File "wire_full.py
我正在使用 python 和 pyaudio 使用回调方法流式传输纯正弦音,以便稍后通过用户输入调制声音。一切都很好,除了当我运行代码时,我收到 1-2 秒的与警告消息相关的爆裂声ALSA lib p
我已经使用这个压缩包构建并安装了 PortAudio:'pa_stable_v19_20071207.tar.gz' 完成此步骤后,当我尝试通过此 URL 中的压缩包安装 PyAudio 时: htt
我一直在尝试为语音识别项目安装 PyAudio,但我尝试过的所有方法都没有奏效。我尝试安装最新版本的 python (3.7) 只是为了 noobishly 发现 pyaudio 与它不兼容,现在我正
我正在尝试创建一个简单的应用程序,该应用程序加载 wav 文件(键盘的每个音符一个)并在按下(或播放)MIDI 音符时播放特定的文件。到目前为止,我已经在两个单独的线程中使用 mido 创建了一个 m
我正在尝试使用 pyaudio 播放流音频 我正在获取一些数据,对其进行处理,然后将它们放入音频流中。 数据速率相当恒定,但有一些抖动。 我可以在日志中看到数据速率是恒定的并且处理是实时的。 Demo
我是一名优秀的程序员,十分优秀!