Einzelnen Beitrag anzeigen

markusagb

Registriert seit: 11. Jun 2018
46 Beiträge
 
#8

AW: Mergen von Audios

  Alt 4. Jul 2018, 23:47
Für alle die das Gleiche benötigen, hier der Code wie es funktioniert. Hat etwas gedauert, aber das läuft:


procedure TForm1.Audiomerge;
var Source1, Source2, Source3 : Cardinal;
Mixer : Cardinal;
duration1, duration2, duration3: double;
len:qword;
start: QWORD;
length: QWORD ;
begin
Source1 := BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source2:= BASS_StreamCreateFile(false, PChar('D:\Meldung1.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source3:= BASS_StreamCreateFile(false, PChar('D:\Meldung2.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});

Mixer:= BASS_Mixer_StreamCreate(48000, 2, 0);

len:=BASS_ChannelGetLength(Source1, BASS_POS_BYTE);
duration1:=BASS_ChannelBytes2Seconds(Source1, len);
start:=BASS_ChannelSeconds2Bytes(mixer, 0.2);
length:=BASS_ChannelSeconds2Bytes(mixer, duration1);
BASS_Mixer_StreamAddChannelEx(mixer, Source1, 0, start, length);

len:=BASS_ChannelGetLength(Source2, BASS_POS_BYTE);
duration2:=BASS_ChannelBytes2Seconds(Source2, len);
start:=BASS_ChannelSeconds2Bytes(mixer, duration1);
length:=BASS_ChannelSeconds2Bytes(mixer, duration2);
BASS_Mixer_StreamAddChannelEx(mixer, Source2, 0, start, length);

len:=BASS_ChannelGetLength(Source3, BASS_POS_BYTE);
duration3:=BASS_ChannelBytes2Seconds(Source3, len);
start:=BASS_ChannelSeconds2Bytes(mixer, duration1+duration2);
length:=BASS_ChannelSeconds2Bytes(mixer, duration3);
BASS_Mixer_StreamAddChannelEx(mixer, Source3, 0, start, length);

BASS_ChannelPlay(mixer, false);

BASS_Encode_Start(Mixer, PChar('D:\neu.wav'), 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_ENCODE_PCM {$ENDIF}, nil, nil);

Geändert von markusagb ( 4. Jul 2018 um 23:52 Uhr)
  Mit Zitat antworten Zitat