我正在尝试做一个实时播放器/记录器循环。我才刚开始做win PyAudio的生意。
目前,我可以创建一个流并将其存储到numpy数组中,但我不能在需要的时候将其发送回pyaudio流。
我想使用数组,因为我更喜欢将所有内容存储在内存中,直到我想将其保存为wave文件。
请注意,我尝试使用Matth的python-sounddevice播放它,但我也无法播放它。我找不到实现这一点的方法。
下面是我当前的代码:
import sys
import pyaudio
import numpy as np
import sounddevice as sd
p = pyaudio.PyAudio()
datos_numpy=np.array([])
CHUNK=64
CHANNELS=2
FORMAT=pyaudio.paFloat32
RATE=44100
is_recording=False
is_playing=False
def callback(in_data, frame_count, time_info, status):
global datos_numpy, is_playing, is_recording
if is_recording==True:
if in_data:
print 'recording'
temp_data=np.fromstring(in_data, dtype=np.float32)
datos_numpy = np.append(datos_numpy,temp_data)
else:
print('no input')
return in_data, pyaudio.paContinue
elif is_playing==True:
print 'playing'
#out_data= ???? HERE IS MY PROBLEM
#return out_data, pyaudio.paContinue
else:
return in_data, pyaudio.paContinue
stream = p.open(format=pyaudio.paFloat32,
channels=CHANNELS,
rate=RATE,
output=True,
input=True,
input_device_index=6,
output_device_index=14,
frames_per_buffer=CHUNK,
stream_callback=callback)
def record():
global is_playing, is_recording
is_recording=True
is_playing=False
def play():
global is_playing, is_recording, datos_numpy
is_recording=False
is_playing=True
sd.play(datos_numpy, 44100)发布于 2016-01-25 04:48:34
由于您是通过fromstring方法获取numpy数组,因此您可能能够通过numpy.tostring()方法获取字符串缓冲区。
或者,您可以简单地将字符串缓冲区保存到硬盘中,而不是将其转换为numpy数组。然后,您不必担心如何将工作缓冲区取回。
https://stackoverflow.com/questions/34977529
复制相似问题