gpt4 book ai didi

python - pyAudioAnalysis 可以用于实时 http 音频流吗?

转载 作者:行者123 更新时间:2023-12-04 23:18:29 25 4
gpt4 key购买 nike

我正在尝试使用 pyAudioAnalysis 从 HTTP 流中实时分析音频流。我的目标是使用这个库中的过零率 (ZCR) 和其他方法来识别流中的事件。
pyAudioAnalysis 仅支持来自文件的输入,但将 http 流转换为 .wav 会产生很大的开销和我想避免的临时文件管理。
我的方法如下:
使用 ffmpeg,我能够将原始音频字节放入子进程管道。

try:
song = subprocess.Popen(["ffmpeg", "-i", "https://media-url/example", "-acodec", "pcm_s16le", "-ac", "1", "-f", "wav", "pipe:1"],
stdout=subprocess.PIPE)
然后我使用 pyAudio 缓冲了这些数据,希望能够使用 pyAudioAnalysis 中的字节
CHUNK = 65536

p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=44100,
output=True)

data = song.stdout.read(CHUNK)

while len(data) > 0:
stream.write(data)
data = song.stdout.read(CHUNK)
但是,将此数据输出输入 AudioBasicIO.read_audio_generic() 会产生一个空的 numpy 数组。
在不创建临时文件的情况下是否有解决此问题的有效方法?

最佳答案

你可以试试我的 ffmpegio 包裹:

pip install ffmpegio

import ffmpegio

# read entire stream
fs, x = ffmpegio.audio.read("https://media-url/example", ac=1, sample_fmt='s16')
# fs - sampling rate
# x - [nx1] numpy array

# or read a block at a time:
with ffmpegio.open(["https://media-url/example", "ra", blocksize=1024, ac=1, sample_fmt='s16') as f:
fs = f.rate
for x in f:
# x: [1024x1] numpy array (or shorter for the last block)
process_data(x)
注意,如果需要归一化样本,可以设置 sample_fmt'flt' 'dbl' .
如果您希望保持低依赖性,调用 ffmpeg 子进程的关键是使用原始输出格式:

import subprocess as sp
import numpy as np

song = sp.Popen(["ffmpeg", "-i", "https://media-url/example", "-f", "s16le","-c:a", "pcm_s16le", "-ac", "1", "pipe:1"], stdout=sp.PIPE)

CHUNK = 65536
n = CHUNK/2 # 2 bytes/sample

data = np.frombuffer(song.stdout.read(CHUNK),np.int16)
while len(data) > 0:
data = np.frombuffer(song.stdout.read(CHUNK),np.int16)
我不能说 pyAudioAnalysis但我怀疑它需要样本而不是字节。

关于python - pyAudioAnalysis 可以用于实时 http 音频流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71669701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com