0

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)

これは次のリンクにあります。

リンク

このリンクは JES フレームワークを使用しています

しかし、実装したいのと同じコードを使用して機能を実現する方法を理解できません。誰でもこれについて私を案内できますか?

4

1 に答える 1

1

オーディオ サンプルは、特定の時点でのオーディオ カーブの高さを定義する単一の数値です。あなたのコード関数では、「沈黙」はオーディオ曲線をファイルからデータ構造(配列)「サンプル」にロードします

sampNum ループは、インデックス値のセグメントをトラバースし、各サンプル インデックスのサンプル値を取得します (getSampleObjectAt) ... 次に、サンプル値を 0 に設定します (setSampleValue) ... サイレンスは正規に値 0 として定義されます

オーディオは通常、1 秒あたり 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)
于 2015-03-19T17:07:11.533 に答える