Python Pyaudio:播放错误:4
您好,我正在与pyaudio合作构建一个应用程序,该应用程序可以实时录制和回放音频,并在音频信号中添加一个低通滤波器。 当我尝试运行此代码时,出现以下错误: Pyaudio:播放错误:4Python Pyaudio:播放错误:4,python,python-2.7,pyaudio,Python,Python 2.7,Pyaudio,您好,我正在与pyaudio合作构建一个应用程序,该应用程序可以实时录制和回放音频,并在音频信号中添加一个低通滤波器。 当我尝试运行此代码时,出现以下错误: Pyaudio:播放错误:4 from pyaudio import PyAudio, paContinue, paFloat32 from time import sleep from numpy import array, random, arange, float32, float64, zeros import sounddevic
from pyaudio import PyAudio, paContinue, paFloat32
from time import sleep
from numpy import array, random, arange, float32, float64, zeros
import sounddevice as sd
fs = 44100 # Hz
threshold = 0.8 # absolute gain
delay = 40 # samples
signal_length = 1 # second
release_coeff = 0.5555 # release time factor
attack_coeff = 0.5 # attack time factor
dtype = float32 # default data type
block_length = 1024 # samples
class Limiter:
def __init__(self, attack_coeff, release_coeff, delay, dtype=float32):
self.delay_index = 0
self.envelope = 0
self.gain = 1
self.delay = delay
self.delay_line = zeros(delay, dtype=dtype)
self.release_coeff = release_coeff
self.attack_coeff = attack_coeff
def limit(self, signal, threshold):
for i in arange(len(signal)):
self.delay_line[self.delay_index] = signal[i]
self.delay_index = (self.delay_index + 1) % self.delay
# calculate an envelope of the signal
self.envelope *= self.release_coeff
self.envelope = max(abs(signal[i]), self.envelope)
# have self.gain go towards a desired limiter gain
if self.envelope > threshold:
target_gain = (1+threshold-self.envelope)
else:
target_gain = 1.0
self.gain = ( self.gain*self.attack_coeff +
target_gain*(1-self.attack_coeff) )
# limit the delayed signal
signal[i] = self.delay_line[self.delay_index] * self.gain
print "Recording Audio"
signal = sd.rec(signal_length * fs, samplerate=fs, channels=1, dtype=dtype)
sd.wait()
print "Audio recording complete , Play Audio"
original_signal = array(signal, copy=True, dtype=dtype)
limiter = Limiter(attack_coeff, release_coeff, delay, dtype)
def callback(in_data, frame_count, time_info, flag):
if flag:
print("Playback Error: %i" % flag)
played_frames = callback.counter
callback.counter += frame_count
limiter.limit(signal[played_frames:callback.counter], threshold)
return signal[played_frames:callback.counter], paContinue
callback.counter = 0
pa = PyAudio()
stream = pa.open(format = paFloat32,
channels = 1,
rate = fs,
frames_per_buffer = block_length,
output = True,
stream_callback = callback)
while stream.is_active():
sleep(0.1)
stream.close()
pa.terminate()
您不应该将PyAudio和
sounddevice混用
不管怎样,如果在回调函数中调用函数和,它们将无法正常工作(因为它们在内部使用自己的“流”和自己的回调函数)。给我们一个完整的回溯Hello。我是python新手,我应该将代码放在哪里以获取跟踪,以及应该添加什么跟踪代码。谢谢。回溯是外壳中常见的红色完整错误。回溯的最后一行应该是错误:Pyaudio:Playback error:4
ok回溯是:录制音频录制完成,播放音频播放错误:4播放错误:4播放错误:4播放错误:4播放错误:4播放错误:4播放错误:4播放错误:4Ok。那么解决办法是什么呢。这段代码基本上是用来录制麦克风并用低通滤波器播放音频,以产生混音效果。这是两个独立的问题。如果您显示了低通滤波器的代码,我可以向您演示如何将其与sounddevice
一起使用。基本上,您只需使用,将低通滤波器应用于indata
,并将结果分配给outdata[:]
。您只需注意在连续的回调调用之间保持筛选器的状态。你好,Matthias。我给出了上面的代码,作为添加类似于低通滤波器的限制器的一种方式。在某种程度上,在麦克风上讲话的人会产生口吃的效果。如果你有类似的代码,请分享。谢谢。您应该首先尝试实现一个简单版本的限制器/过滤器/。。。它接受一个NumPy数组并返回另一个带有结果的数组。如果你需要信号处理部分的帮助,你应该看看。