,我會說我是一個新手,總當涉及到音頻處理及合成,如果我在做一些愚蠢的假設或誤解核心概念前言本請指正。合成可變長度的多音調音頻SOX法案,同時避免削波
我與SOX試驗,以數字數據的陣列轉換成單一的音頻文件。到目前爲止,我有兩種「工作」方法產生了一些非常可怕的結果,並且都有嚴重的侷限性。
我通過PHP在使用64位WIN SOX 8.1箱。
方法1輸出各個音調然後串聯
$toneLinks=array();
for($i=0;$i<count($sourceData);$i++){
$filename='tones\\'.$dataTitle.'_'.$i.'.au';
$soxCommand=$soxFolder.'sox -n '.$filename.' synth .5 sin '.($sourceData[$i]).' vol 0.5 ';
shell_exec($soxCommand);
$toneLinks[]=$filename;
}
$chunks=array_chunk($toneLinks,100);
$chunkFiles=array();
for($ch=0;$ch<count($chunks);$ch++){
$name='tones\\'.$dataTitle.'_chunk_'.$ch.'.au';
$soxCommand=$soxFolder.'sox ';
for($i=0;$i<count($chunks[$ch]);$i++){
$soxCommand.=' '.$chunks[$ch][$i];
}
$soxCommand.=' '.$name;
$result=shell_exec($soxCommand);
$chunkFiles[]=$name;
}
$soxCommand=$soxFolder.'sox ';
for($i=0;$i<count($chunkFiles);$i++){
$soxCommand.=' '.$chunkFiles[$i];
}
$soxCommand.=' '.$dataTitle.'.au';
shell_exec($soxCommand);
限制:
- 慢,需要許多單個處決
混合似乎限於,即試圖加入100或200個文件將產生包含一些但不是全部音調的文件。試圖加入1000個文件將失敗,不輸出。人們可能想要連接幾個文件,然後連接這些連接的文件,但這會加劇第一個限制。當創建多個< = 100音調中介文件的最終混音時,它會在組件完成渲染之前處理混音,從而產生空的最終混音。- 廢棄的「混合」,並能成功地串聯任意數量的使用更新的方法1的色調,因爲這種方法表現出最答應我會繼續嘗試和更新的進展,關於最終限制作出。
- 雖然不是關鍵,沒有「流」到最終輸出,它聽起來就像是什麼東西,大量的獨立音調粘在一起。
方法2生成在單個命令
$soxCommand=$soxFolder.'sox -n '.$dataTitle.'.au synth ';
for($i=1;$i<count($sourceData);$i++){
$soxCommand.='.25 sin '.($sourceData[$i]).' ';
}
$soxCommand.='delay ';
for($i=1;$i<count($sourceData);$i++){
$soxCommand.=($i*.2).' ';
}
$soxCommand.='remix - fade 0 '.(count($sourceData)*.2+.5).' .1 norm -1';
shell_exec($soxCommand);
限制的 「弦」:
- 試圖創建 「和絃」 具有多於300噸一個遇到類似一個 因爲有在 補償混合音頻問題與過去的方法,但是串聯小 文件,用這種方法聽起來很奇怪螞蟻在加入時有可聽見的中斷。可以重疊文件,但這仍然不理想。
- 雖然音符與此方法的重疊產生「流動」音頻 它也引入了削波,可能是由於音量爲1的兩個音調的分層。我一直無法工作,如何指定量按方法1
理想的答案將解決以下問題:
- 合成多個音調並將它們組合成一個單一的凝聚力 片「音樂「
- 與
- 避免限幅在最後的輸出的源數據集不確定長度的工作