gpt4 book ai didi

Python:如何在生成的 .wav 文件中插入静音间隙?

转载 作者:行者123 更新时间:2023-12-01 05:27:42 34 4
gpt4 key购买 nike

我正在编写一个简单的脚本,可以从源音频文件中生成随机“故障”。它读取源音频文件的随机 block ,并将该 block 写入新的 .wav 文件,然后是一段静音,然后是另一个 block ,然后是静音,等等。

我尝试阅读有关 .wav 格式的内容来了解​​什么是“沉默”,但其中大部分内容超出了我的理解范围。沉默似乎只是一个(十六进制?)值 0。我制作了一个纯粹的静音文件进行分析,在记事本中,静音表示为空格,而在 sublime text 中,它是一堆 0。所以我的方法是采用静音字符(“”或 0),将其乘以源音频帧的字符数(因此它会自动纠正不同可能的 .wav 属性、单声道立体声等),然后然后乘以该间隙所需的沉默帧数。一切工作正常,除了我所写的任何内容,因为沉默不可避免地会以某个值写入,该值虽然一致,但确实具有振幅,因此在波中显示如下:

Waveform

在十六进制编辑器中,间隙总是一些重复的模式,例如 30303030303030 之类的。我显然做错了什么或误解了 .wav 数据的性质,但我无法弄清楚。这是代码的基本精简版本:

import sys
import wave

script, filename = sys.argv

sourceFile = wave.open(filename, 'r')
sampleParams = sourceFile.getparams()

def randChunk(source):
blahblah
# Returns random chunk of audio from sourceFile


numGlitch = int(raw_input('How many glitches do you want?: '))
silenceSpace = int(raw_input('How many frames of silence between glitches?: '))

singleglitchFile = filename[:-4] + '_glitch.wav'
outfile = wave.open(singleglitchFile, 'w')
# set the outfile params to whatever sourceFile params were
outfile.setparams(sampleParams)

# WHERE EVERYTHING GOES WRONG
silence = 0 # or " " or hex(0) or whatever the hell silence is supposed to be
frameLength = len(sourceFile.readframes(1))
emptyspace = (silence * frameLength) * silenceSpace

for n in range(numGlitch):
outfile.writeframes(randChunk(sourceFile))
outfile.writeframes(emptyspace)

outfile.close()

找出解决方案不仅可以使该脚本正常工作,而且可以帮助我弄清楚下一阶段:如何获取源中连续帧的平均幅度并过滤掉任何不满足特定阈值的帧(即过滤掉太安静的 block )。

最佳答案

值为 0 的字符是 chr(0)'\x00'0 是一个整数,因此将其相乘即可得到整数乘法的结果。 0 * 任何内容0,但'\x00' * 3'\x00\x00\x00'

关于Python:如何在生成的 .wav 文件中插入静音间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032743/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com