Python中如何在不写入磁盘的情况下获取.wav文件数据?
内存存储录音字节流的解决方案
你已经拿到了wav_bytes字节数据,完全不需要写入磁盘,直接用BytesIO将其包装成类文件对象,就能直接传给需要音频输入的推理函数,修改后的代码如下:
from io import BytesIO import numpy as np val = st_audiorec() if isinstance(val, dict): # 提取音频数据 with st.spinner('retrieving audio-recording...'): ind, val = zip(*val['arr'].items()) ind = np.array(ind, dtype=int) # 转为numpy数组 val = np.array(val) # 转为numpy数组 sorted_ints = val[ind] # 生成wav格式字节流 wav_bytes = b"".join([int(v).to_bytes(1, "big") for v in sorted_ints]) # 关键:将字节流包装为内存中的类文件对象 audio_in_memory = BytesIO(wav_bytes) # 重置文件指针到开头(避免后续读取时从末尾开始) audio_in_memory.seek(0) # 直接将audio_in_memory传入你的推理函数 # result = your_inference_function(audio_in_memory)
说明:
BytesIO(wav_bytes)会在内存中创建一个可读写的类文件对象,和磁盘文件的接口完全一致,大部分处理音频的推理函数都支持直接接收这种对象。- 调用
seek(0)是为了确保后续读取操作从音频数据的起始位置开始,避免因指针位置问题读取不到内容。 - 删除了写入磁盘的代码块,全程在内存中完成音频数据的处理与传递。
内容的提问来源于stack exchange,提问作者humblefool_9
相关产品推荐
相关产品推荐

