我有一个2秒的16位单通道8khz wav文件,我需要更改其音量。
它应该非常简单,因为更改音量与更改信号的幅度相同,我只需要对其进行衰减,即将其乘以0到1之间的一个数字即可。但这是行不通的:新的声音较低,但非常杂音。我究竟做错了什么?
这是我的代码:
import wave, numpy, struct
# Open
w = wave.open("input.wav","rb")
p = w.getparams()
f = p[3] # number of frames
s = w.readframes(f)
w.close()
# Edit
s = numpy.fromstring(s, numpy.int16) * 5 / 10 # half amplitude
s = struct.pack('h'*len(s), *s)
# Save
w = wave.open("output.wav","wb")
w.setparams(p)
w.writeframes(s)
w.close()
感谢大伙们!
正如您在问题注释中看到的那样,有几种解决方案,其中一些效率更高。
Jan Dvorak立即检测到该问题(“ * 5部分出现剪切和溢出”),直接的解决方案是:
s = numpy.fromstring(s, numpy.int16) / 10 * 5
在这种情况下,这个解决方案对我来说是完美的,足够好了。
谢谢大家!
我正在尝试用Python以编程方式拆分wav文件。基于stackoverflow的提示以及Python wave模块的文档,我将执行以下操作 我迭代了许多不同的起始值和结束值,并以这种方式从原始文件中提取音频块。奇怪的是,这种技术对某些块非常有效,而对其他块产生垃圾白噪声。此外,没有明显的模式表明起始位置和结束位置会产生白噪声,只是输入文件会持续产生白噪声。 有人以前经历过这种行为吗?或者知道我做
我正在读一本书。wav文件在C中,然后我尝试使用一些QT函数播放音频文件。以下是我如何阅读该文件: 所以我的音频文件在里面。的每个元素都是无符号的16位整数。 为了播放声音,我将每个16位无符号整数分成两个字符,然后每隔3毫秒(使用计时器)向音频卡发送256个字符。假设是256个字符的字符数组,我这样做(每隔3毫秒)来播放声音: 此外,定义为: 并且定义为: 并且音频格式设置正确为: 然而,当我试
有没有其他方法使文件成为只读的?
问题内容: 我尝试pygame播放wav文件,如下所示: 但是它改变了声音,我不知道为什么!我阅读了此链接解决方案,但无法解决播放wave文件的问题! 对于此解决方案,我不知道应该导入什么? 对于这个解决方案/ dev / dsp在新版本的linux中不存在: 而当我尝试pyglet它给我这个错误: 问题答案: 您可以使用PyAudio。我的Linux上的一个示例可以正常工作:
问题内容: 我只需要阅读一个大文件的第一行并进行更改。 是否有技巧仅使用Python更改文件的第一行并将其另存为另一个文件?我所有的代码都是在python中完成的,可以帮助我保持一致性。 想法是不必读取然后再写入整个文件。 问题答案: 应该比逐行运行要快得多。从文档中注意: 请注意,如果[from_file]对象的当前文件位置不为0,则仅复制从当前文件位置到文件末尾的内容。 从而:
问题内容: 假设从CGI开始,我已经将文件显示为文件。我想将的文件扩展名更改为显示文件。我该怎么做? 问题答案: , 例如:
问题内容: 嗨,我需要将wav音频文件的采样率从44.1kHz下采样到8kHz。我必须使用字节数组手动完成所有工作…这是出于学术目的。 我目前正在使用2个类(接收器和源)来弹出和推送字节数组。一切顺利,直到到达需要使用线性插值对数据块进行下采样的部分为止。 由于我是从44100降采样到8000 Hz,因此我该如何插入一个包含约128000000字节的字节数组?现在,我弹出5、6或7个字节,具体取决
问题内容: 每当在特定目录中添加/删除/修改新文件时,我都需要在python中知道吗?我正在寻找一个类似“ inofity”的功能(来自POSIX)。 谢谢 问题答案: 注意:我删除了我的答案,因为它无关紧要,并且经常被否决。 我无法删除它。