簡體   English   中英

在python的音頻文件的不同位置插入不同數量的靜音

[英]to insert different amounts of silence at different positions in an audio file in python

我想在python的音頻的第二秒,音頻的第十秒等處插入不同數量的靜默,例如50毫秒,100毫秒等等。 我的音頻文件是.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)

這在以下鏈接上顯示:

鏈接

該鏈接正在使用JES框架

但是我無法理解如何使用我想實現的同一段代碼來實現功能。 有人可以指導我嗎?

音頻樣本只是一個數字,它定義了特定時間點的音頻曲線的高度。 在您的代碼函數“ silence”中,將音頻曲線從文件加載到數據結構(陣列)中的“ samples”

您的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM