首页 > 解决方案 > Numpy:Wav 列出然后再返回创建垃圾

问题描述

我正在使用 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 库没有经验,如果有更有效的方法来解决这个问题,我有兴趣学习它。

标签: pythonpython-3.xnumpywav

解决方案


我同意@NilsWerner - 你应该能够将所有事情都作为 numpy 数组进行,并且比将其作为列表处理要快得多。我不确定您所说的“沉默”是什么意思,但假设这涉及将零写入数组的特定部分,那么您可以执行以下操作:

# 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的 numpy 文档和相关的 scipy 文档scipy indexing


推荐阅读