Numpy:Wav 列出然后再次返回会产生垃圾

Numpy: Wav to list and then back again creates garbage

我正在使用 Python 3.7,目前正在开发一个解决方案,要求我将 WAV 文件转换为 Numpy 数组,然后转换为列表,然后返回数组,最后再次编写为一个 WAV 文件。今天早些时候,它能够毫无问题地转换然后重新转换。但是,它目前正在返回一个可收听但完全静态的 WAV 文件。

import numpy as np
import scipy.io.wavfile as wavfile

...

rate, data = wavfile.read(os.path.join(F_IN_FOLDER, f))
work = data.tolist()
out = np.array(work, dtype=np.float32)
wavfile.write(os.path.join(F_IN_FOLDER, f), rate, out)

这段代码的目的是,作为一个列表,我可以将 WAV 文件的某些部分静音,然后覆盖原始文件。我对 WAV 文件和 Numpy 库没有经验,如果有更有效的方法,我有兴趣学习它。

我同意@NilsWerner 的观点——您应该能够像 numpy 数组一样处理所有事情,并且比将其作为列表处理要快得多。我不确定 "silence" 是什么意思,但暂时假设这涉及将零写入数组的特定部分,那么您可以执行以下操作:

# create an array of 1's (my sample test data)
a = np.ones(10)

# zero out a specific range of indices using standard numpy slice notation.
a[5:8] = 0

# check the result
print(a)

然后回来

[1. 1. 1. 1. 1. 0. 0. 0. 1. 1.]

numpy slices and the related scipy documentation scipy indexing 查看 numpy 文档。