Hallo zusammen,
da dieses Forum bzw. die Mitglieder schon mehrmals behilflich waren würde ich gerne nochmals darauf zurückkommen.
Ich habe nun 1 Woche vergeblich versucht, Stille in einem Audiofile zu finden (mit Bass). Im Forum gibt es ein Beispiel für "Silence am Anfang und Ende" zu definieren. Das funktioniert auch sehr gut. Allerdings verstehe ich den Code nicht bzw. kann ihn nicht adaptieren. Ich möchte z.B. 10 Sek ins File rein gehen und dann das File scannen nach einem Mute bzw. sehr leisen Sequenz. Das benötige ich um ein anderes File drauf zu legen (Nachrichten-Trenner). Ich setze also die Position des Files auf 10 Sek, soweit sogut. Aber dann komme ich auch schon nicht mehr weiter denn der Code den ich habe sucht ja nach Anfang und Ende...
Hier der Code:
Code:
count := 0;
chan := BASS_StreamCreateFile(False, PChar(FileName), 0, 0, BASS_STREAM_DECODE {$IFDEF
UNICODE}or BASS_UNICODE{$ENDIF});
// Start-Point
while Bass_ChannelIsActive(chan) <> 0 do
begin
b := BASS_ChannelGetData(chan, @buf, 20000);
b := b div 2;
a := 0;
while (a < b) and (Abs(buf[a]) <= threshold) do
a := a + 1;
count := count + (a * 2);
if (a < b) then
begin
while (a <> 0) and (Abs(buf[a]) > (threshold div 4)) do
begin
a := a - 1;
count := count - 2;
end;
Break;
end;
end;
StartPoint := count;
// End-Point
pos := BASS_ChannelGetLength(chan, BASS_POS_BYTE);
while (pos > count) do
begin
if pos < 100000 then
pos := 0
else
pos := pos - 100000;
BASS_ChannelSetPosition(chan, pos, BASS_POS_BYTE);
b := BASS_ChannelGetData(chan, @buf, 100000);
b := b div 2;
a := b;
while (a > 0) and (Abs(buf[a - 1]) <= (threshold div 2)) do
a := a - 1;
if a > 0 then
begin
count := pos - (a * 2);
Break;
end;
end;
EndPoint := Count;
Kann mir jemand einen Tipp geben wie ich den Code modifizieren kann, das er mir die Stelle die den threshold unterschreitet ausgibt und die Länge des Unterschreitens?
Ich sag jetzt schon mal danke!
Markus
* Anmerkung, eventuell ist da ein Fehler drin, es heißt in Zeile 14 "while (a <> 0) and (Abs(buf[a]) > (threshold div 4)) do", eventuell müsste es heissen "(threshold div 2)"?