Thema: Delphi WAV resampling

Einzelnen Beitrag anzeigen

Rer

Registriert seit: 7. Apr 2007
13 Beiträge
 
#1

WAV resampling

  Alt 15. Dez 2009, 15:10
Hi @all,
ich wollte die Sample-Rate von WAV-Datein verändern. Hierzu habe ich mir gedacht, dass ich die BASS Komponenten benutzen könnte (bass, bassenc, Bassmix) und komme aber wirklich nicht zurecht. Hier mein Ansatz:
Delphi-Quellcode:
Bass_Init(0, 24000, BASS_UNICODE, Application.Handle, nil);
Source := BASS_StreamCreateFile(false, Pchar('F:\Sound.wav'), 0, 0, BASS_STREAM_DECODE);
BASS_ChannelSetAttribute(Source, BASS_ATTRIB_FREQ, 24000);

BassMix := BASS_Mixer_StreamCreate(24000, 1, BASS_STREAM_DECODE+BASS_MIXER_END);
BASS_Mixer_StreamAddChannel(BassMix, Source, BASS_MIXER_FILTER);

BASS_Encode_Start(BassMix, PAnsiChar(PChar('F:\Sound2.wav')), BASS_ENCODE_PCM or BASS_ENCODE_AUTOFREE, nil, nil);

while (BASS_ChannelIsActive(BassMix) > 0) do begin
 BASS_ChannelGetData(BassMix, @buf, 10000);
 Application.ProcessMessages;
 PercentDone := Trunc(100 * (BASS_ChannelGetPosition(BassMix , BASS_POS_BYTE) / BASS_ChannelGetLength(BassMix , BASS_POS_BYTE)));
 ProgressBar1.Position := PercentDone;
end;
Die Dokumentationen, die beim Download von bass, bassenc und bassmix dabeiwaren, habe ich auch schon um rat bemüht, aber wurde aus diesen leider nicht schlau. Die Funktionsweise dieser Komponenten habe ich definitiv (noch) nicht verstanden. Vielleicht könnt ihr mir ja weiterhelfen
mfg RER

Edit:
Wie oben konvertiere ich mit folgendem code auch Mp3 in Wav:
Delphi-Quellcode:
Bass_Init(0, 44100, 0, Application.Handle, nil);
Channel := BASS_StreamCreateFile(false, Pchar(datei_plus_Pfad), 0, 0, BASS_STREAM_DECODE);
try
BASS_Encode_Start(channel, Pchar(AddBackslash(Tempdir)+ChangeFileExt(datei_nur_name, '.wav')), BASS_ENCODE_PCM or BASS_ENCODE_AUTOFREE, nil, nil);
while (BASS_ChannelIsActive(Channel ) > 0) do begin
BASS_ChannelGetData(Channel, @buf, 10000);
Application.ProcessMessages;
PercentDone := Trunc(100 * (BASS_ChannelGetPosition(Channel , BASS_POS_BYTE) / BASS_ChannelGetLength(Channel , BASS_POS_BYTE)));
ProgressBar1.Position := PercentDone; lb_stepprogress.Caption:=Inttostr(PercentDone)+' %';
end;
Nun hab ich in diesem Fall gedacht, dass ich einfach die 44100 bei BASS_INIT in zum Beispiel 24000 ändern kann, was jedoch ebenfalls nich funktioniert
  Mit Zitat antworten Zitat