在pyaudio中录制和播放字节列表/

2024-04-28 14:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用pyaudio和wave lib录制和播放我的声音,但我不知道怎么做,因为wave lib需要一个指向文件的路径,即使我试图用几秒钟前录制的字节列表将其设置为一个变量,但仍然不起作用,因为我不能对列表使用“read”。有人知道吗?我想做一个像KORG那样的活套,等等

把它录下来后,我要立即停止录制,就像放了个活套一样。在

这是我的代码(python3.4):

def record(self): #recording a voice

    #var for bytes from recording
    self.stream = self.player.open(format = self.FORMAT,
            channels = self.CHANNELS,
            rate = self.RATE,
            input = True,
            frames_per_buffer = self.CHUNK)

    print("Recording")

    self.frames = [] #byte list

    #recoring for a few seconds (5sec at this moment)
    for i in range(0, int(self.RATE / self.CHUNK * self.RECORD_SECONDS)):
        self.data = self.stream.read(self.CHUNK) #sing stream do data var
        self.frames.append(self.data) #add bytes to the end of a list
    print("Stop recording")

    self.stopRecording()

def stopRecording(self):

    self.stream.stop_stream()
    self.stream.close()
    print("Recording has been stopped")

    self.play()

def play(self): #playing a record
    print("Playing")


    f = wave.open(self.frames,"rb")  
    #read data  
    data = f.readframes(CHUNK)  

    #play stream  
    while data != '':  
        self.stream.write(data)  
        data = f.readframes(CHUNK)  

    self.stopPlaying()

Tags: self列表forreadplaydatastreamframes
1条回答
网友
1楼 · 发布于 2024-04-28 14:02:59

停止记录后,您需要连接附加数据,使用data = ''.join(self.frames),并在最后构建一个循环(for,while)来流化所有字节列表,我是这样做的:

import pyaudio

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 41000
RECORD_SECONDS = 5


p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input = True,
    output = True,
    frames_per_buffer = chunk)



print ("***Recording***")

all = [] 

for i in range(0, RATE / chunk * RECORD_SECONDS):
     data = stream.read(chunk)
     all.append(data) 


print("***Stop recording***")


print ("***START PLAY***")


data = ''.join(all)


for i in range(0, len(data), chunk):
    stream.write(data[i:i+chunk])

相关问题 更多 >