WAV 文件以错误的顺序保存

Posted

技术标签:

【中文标题】WAV 文件以错误的顺序保存【英文标题】:WAV files being saved in wrong order 【发布时间】:2016-10-09 03:30:00 【问题描述】:

我有一个程序在 for 循环上循环,并将正弦波保存为 wav 文件,以便为键盘创建一系列音调。循环从 -int 到 +int,并在每次迭代中保存这些 WAV 文件。唯一的问题是,当它达到 x = 2 左右时,文件顺序就会混乱。我不知道为什么会发生这种情况或如何解决它。

out_int = 0

for x in xrange(-43, 47, 1):   
    CFreq = CFreq * 2**(x/12.)                                 
    out_int += 1

    .
    .
    .
        wavdata    = np.zeros(len(data), np.int16)
        wavdata[:] = data / max(data) * 2**15

        wavfile = wave.open("WavFiles/Modes_%02d_.wav" % (out_int), "wb")

这些文件中有很多数据,这就是为什么我猜测在保存以前的样本之前制作一些笔记并保存它需要更长的时间。 每个样本的输出频率是正确的,但它们听起来不正常。

有没有办法确保代码先写入并保存每个文件,然后再转到下一个文件?我尝试将循环的顺序从正值更改为负值,但随后负迭代的样本被搞砸了。

【问题讨论】:

【参考方案1】:

没有足够的代码可以复制,但是,这里有一个使用 enumerate 的示例,它将按顺序排列后续的 xrange 元素。也许这将有助于保持您的波形文件按顺序排列。

for i, x in enumerate(xrange(-43, 47, 1)):    
    file_name = "file0-1.wav".format(i, x)
    print file_name

输出:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
file0--43.wav
file1--42.wav
file2--41.wav
file3--40.wav
|
|
file86-43.wav
file87-44.wav
file88-45.wav
file89-46.wav

【讨论】:

我意识到我的文件播放器没有播放正确的文件,并且顺序很好!

以上是关于WAV 文件以错误的顺序保存的主要内容,如果未能解决你的问题,请参考以下文章

PIL 图像以错误的顺序保存(for 循环,枚举索引)

保存的 .wav 文件没有数据

通过 openAL 将录制的音频保存为 .wav

如何保存同时播放两个曲目的wav文件?在不同的体积

如何将您在 python 中创建的 .wav 文件保存到指定目录?

如何在 Silverlight 应用程序中将 byte[] 保存为 wav 文件?