我正在尝试做一个实时的播放器/录音机。我刚刚开始并处理赢得PyAudio。
目前,我可以创建一个流并将其存储到一个numpy数组中,但我无法在需要时将其发送回pyaudio流。
我想使用数组,因为我更喜欢将所有内容存储在内存中,直到我想将其保存为波形文件。
请注意,我尝试使用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)
答案 0 :(得分:0)
由于您通过fromstring
方法获取numpy数组,因此您可以通过numpy.tostring()
方法返回字符串缓冲区。
或者,您可以简单地将字符串缓冲区pickle到硬盘,而不是将其转换为numpy数组。然后你不必担心如何恢复工作缓冲区。