持续无限地实时流式传输音频信号,Python

Lav*_*ena 2 audio real-time pyaudio python-3.x

我有一个简单的问题,在 Python 中从音频插孔流式传输音频信号时,使用 pyaudio 库如何继续流式传输音频信号,直到我选择“停止”程序。

示例:我们在无限 while 循环下无限捕获网络摄像头帧的方式。

例如:在这段代码(取自链接)中,只记录了 5 秒的流,什么是符合我目的的修改

import pyaudio
import wave
import numpy as np
CHUNK = 44100
FORMAT = pyaudio.paInt32
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

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

print("* recording") 
frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    audio_data = np.fromstring(data, dtype=np.int32)
    print(data)
    print(audio_data)
    frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()
Run Code Online (Sandbox Code Playgroud)

此链接上给出的代码(使用回调模式处理音频数据)也记录了 4-5 秒。

如果有人能帮我解决这个问题,我将不胜感激!!

Lav*_*ena 6

嗯,同时我想出了解决方案

import pyaudio
import numpy as np
import pylab
import time
import sys
import matplotlib.pyplot as plt


RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second

def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
print(data)

if __name__=="__main__":
    p=pyaudio.PyAudio()
    stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
                  frames_per_buffer=CHUNK)
    for i in range(sys.maxsize**10):
        soundplot(stream)
    stream.stop_stream()
    stream.close()
    p.terminate()
Run Code Online (Sandbox Code Playgroud)

和这个职位在这里将帮助你简单而具体的方法