2016-12-29 140 views
0

我有一個將音軌結合在一起的程序,目前的系統是我可以編寫兩個音軌並使它們同時播放。我遇到的問題是,它只是起到了最短軌道的持續時間,所以例如:加入多個音軌時的音頻持續時間匹配

軌道1的持續時間= 2:00

軌道2的持續時間= 1:12

它將當我想讓它玩2:00(全長)時,只玩1:12。解決這個問題的最好方法是什麼?

我到目前爲止的解決方案:

所有的
length = min([length(s1), length(s2)]); 

s1 = s1(1:length); 
s2 = s2(1:length); 
s3 = s1 + s2; 
+1

要麼墊較短軌道所以它的相同的長度,或者使用索引,以較短的曲目添加到的較長的一個所期望的段。 – excaza

回答

0

先不使用功能名稱「長度」來定義新的變量,你將無法在接下來的語句中使用它的功能。 其次,當您播放多首曲目時,您希望能夠在開始時進行某種同步,所以我爲您添加了此選項。

解決的辦法是這樣的:

s1=[ 0.5, 0.2, 0.2, 0.1 ]; 
s2=[ 0.1, 0.4 ]; 

s1_pad_delay=8; s1_pad_after=5; 
s2_pad_delay=4; s2_pad_after=3; 

s1_len=s1_pad_delay+length(s1)+s1_pad_after; 
s2_len=s2_pad_delay+length(s2)+s2_pad_after; 
mix_len=max(s1_len,s2_len); 

s1_padded=[ zeros(1,s1_pad_delay), s1, zeros(1,mix_len-length(s1)-s1_pad_delay) ]; 
s2_padded=[ zeros(1,s2_pad_delay), s2, zeros(1,mix_len-length(s2)-s2_pad_delay) ]; 

mix=s1_padded+s2_padded 
相關問題