2016-12-29 2 views
0

Ich habe ein Programm, das Audiotracks miteinander kombiniert, das aktuelle System, das ich habe, ist, dass ich zwei Audiotracks schreiben und sie gleichzeitig spielen lassen kann. Das Problem, das ich habe ist, dass es spielt nur für die Dauer der kürzesten Strecke, so zum Beispiel:Anpassen der Audiodauer beim Verbinden mehrerer Spuren

Track 1 der Dauer = 02.00

Track 2 der Dauer = 01.12

Es wird Spielen Sie nur für 1:12, wenn ich es für 2:00 (die ganze Länge) spielen möchte. Was ist der beste Weg, dieses Problem zu lösen?

Meine Lösung bisher:

length = min([length(s1), length(s2)]); 

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

Entweder pad die kürzere Strecke, so dass es die gleiche Länge oder den Indexierungs verwenden, um die kürzere Strecke zu dem gewünschten Segment des einer mehr hinzuzufügen. – excaza

Antwort

0

allerersten Funktionsnamen „Länge“ nicht verwenden, als neuen Variable zu definieren, Sie werden es nicht als Funktion in der nächsten Anweisung in der Lage zu verwenden. Zweitens, wenn Sie mehrere Titel spielen, möchten Sie in der Lage sein, eine Art von Synchronisierung am Anfang zu machen, also habe ich für Sie diese Option hinzugefügt. Dies ist

Die Lösung:

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