将音频文件切割成十秒段
欢迎大家推荐一些方法,教我怎么用Python库把一个.wav1文件切割成按时间分段的片段。
1 其实文件类型并不是特别重要,如果需要的话,我肯定能把不同类型的文件转换过来。
2 个回答
我会使用wave模块来打开文件,先读取文件的头部信息,然后计算出10秒钟里有多少帧数据。接着,我会读取这么多帧的数据。最后,把这些帧的数据写到新的文件里,保留相同的头部信息(除了长度),一直做到完成为止。
我建议你先看看一个文件的数据结构,然后在合适的地方“切割”数据,这样就不会把某些帧提前切掉。
这意味着你需要查看录音的频率和比特率,利用这些信息来计算每一帧的大小(以比特为单位)。然后你就可以在不切割单独帧数据的情况下,提取音频的片段。
可以看看这个StackOverflow的帖子。它建议把你的音频当作一个二进制读取的字符串。因为它是一个字符串,你可以随意复制、切割和移动这个字符串到新的输出文件中。
再看看这个链接:http://docs.python.org/library/binascii.html
还有这个也值得一看:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
或者你也可以保持数据为二进制格式,使用字节数组。需要考虑一下头文件以及它会发生什么,虽然每种格式都不同。MP3格式比较简单,因为它的头信息是和数据交错在一起的:
http://en.wikipedia.org/wiki/Mp3#File_structure
好吧,这里有很多信息。
最后:你肯定已经见过的一个链接:http://sourceforge.net/projects/audiotools/
更新了……
使用sourceforge.net上音频工具的bits_per_sample()
方法
--返回这个音频文件每个样本的比特数,结果是一个正整数。
然后根据这些信息和上面的信息,把你的音频分割成字节数组。这样你至少可以准确重建一些原始音频数据。
你可以计算文件的长度(以比特为单位),然后除以16。接着可以使用一种方法根据时间(以毫秒为单位)来划分数组。听起来复杂,但其实只是基础的数学运算。