什么类型的文件是audioop的"声音片段"参数?

cam*_*den 10 python audio beat-detection

Python的audioop文档指出,大多数可用的功能需要"声音碎片".

audioop模块包含对声音片段的一些有用操作.它对声音片段进行操作,声音片段由8,16或32位宽的有符号整数样本组成,存储在Python字符串中.

究竟什么是声音片段,如何将现有的.wav文件合并为一个?

谢谢.

Mat*_*vid 7

您可以使用波形模块执行此操作

open()方法打开文件并readframes(n)返回(最多)n帧音频作为字节串,正是audioop想要的.

例如,假设您需要使用avg()audioop中的方法.这是你如何做到的:

import wave
import audioop


wav = wave.open("piano2.wav")
print(audioop.avg(wav.readframes(wav.getnframes()), wav.getsampwidth()))
Run Code Online (Sandbox Code Playgroud)

输出:

-2
Run Code Online (Sandbox Code Playgroud)

此外,您可能rewind()对wave模块中的方法感兴趣.它将读取位置放回到wav文件的开头.

如果你需要两次阅读你的wav文件,你可以这样写:

wav = wave.open("piano2.wav")
print(audioop.avg(wav.readframes(wav.getnframes()), wav.getsampwidth()))

# if you don't call rewind, next readframes() call 
# will return nothing and audioop will fail

wav.rewind() 
print(audioop.max(wav.readframes(wav.getnframes()), wav.getsampwidth()))
Run Code Online (Sandbox Code Playgroud)

或者您也可以缓存字符串:

wav = wave.open("piano2.wav")
string_wav = wav.readframes(wav.getnframes())
print(audioop.avg(string_wav, wav.getsampwidth()))
# wav.rewind()
print(audioop.max(string_wav, wav.getsampwidth()))
Run Code Online (Sandbox Code Playgroud)