在python中的音频文件中的不同位置插入不同数量的静音

时间:2015-03-19 09:39:24

标签: python audio jes

我希望插入不同数量的静音,例如50毫秒,100毫秒等等......在音频的第2秒,音频的第10秒等等分别在python中。 我的音频文件是.wav格式

我找到了以下代码:

def silence () 
    file = pickAFile()
    sound = makeSound(file)
    samples = getSamples(sound)

for sampNum in range(44100*2, 44100 * 4):
    sample = getSampleObjectAt(sound, sampNum)
    setSampleValue(sample,0);

play(sound)

这可以在以下链接中找到:

link

此链接正在使用JES框架

但是我无法理解如何使用我想要实现的相同代码来实现功能。任何人都可以指导我吗?

1 个答案:

答案 0 :(得分:1)

音频样本只是一个数字,用于定义特定时间点音频曲线的高度。在你的代码功能"沉默"将音频曲线从文件加载到数据结构(数组)"样本"

你的sampNum循环遍历一段索引值,检索每个样本索引的样本值(getSampleObjectAt)...然后将样本值设置为0(setSampleValue)...沉默被规范地定义为值0

音频通常每秒采样44100次...因此忽略多通道和位深度我假设由getSampleObjectAt处理...此循环从以下位置检索样本:

(44100*2, 44100 * 4)

这意味着它会生成2秒到4秒的样本索引列表

为实现目标,只需计算沉默开始和结束时所需的范围

goal A - start at second 2 silence for  50 millisec
       - start at 2000 millisec until 2050 millisec
       - from 2000 millisec to 2500 millisec

start_sample_index = sample_rate * 2000  / 1000
start_sample_index = 44100 * 2000  / 1000
start_sample_index = 88200

end_sample_index = sample_rate * 2050  / 1000
end_sample_index = 44100 * 2050  / 1000
end_sample_index = 90405

所以伪代码(未经测试)

set_silence_from_to_in_millisec(start_time, end_time, sample_rate, sound_obj) :

    start_index = sample_rate * start_time / 1000
    end_index   = sample_rate * end_time   / 1000

    for sampNum in range(start_index, end_index):
        sample = getSampleObjectAt(sound_obj, sampNum)
        setSampleValue(sample,0);

因此,对于目标A,呼叫将是

set_silence_from_to_in_millisec(2000, 2050, 44100, my_sound_obj)