Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program bassmp3;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Classes,
- IOUtils,
- Dynamic_Bass,
- Dynamic_BassEnc,
- Dynamic_BassEnc_OGG,
- Dynamic_BassEnc_MP3;
- procedure EncodeProc(handle:HENCODE; channel:DWORD; buffer:Pointer; len:DWORD; user:Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
- begin
- TMemoryStream(user).WriteBuffer(Buffer^, len);
- end;
- procedure AudioEncode(const aFileIn, aFileOut: string);
- var
- data_in, data_out, buf: TBytes;
- hdecoder: HSTREAM;
- hencoder: HENCODE;
- ms: TMemoryStream;
- r: Integer;
- begin
- Load_BASSDLL(bassdll);
- Load_BASSENCDLL(bassencdll);
- Load_BASSENCOGGDLL(bassencoggdll);
- Load_BASSENCMP3DLL(bassencmp3dll);
- BASS_Init(-1, 44100, 0, 0, nil);
- data_in := TFile.ReadAllBytes(aFileIn);
- hdecoder := BASS_StreamCreateFile(True, Pointer(data_in), 0, Length(data_in), BASS_STREAM_DECODE);
- if hdecoder = 0 then
- raise Exception.Create('BASS Stream create error');
- ms := TMemoryStream.Create;
- try
- //hencoder := BASS_Encode_OGG_Start(hdecoder, nil, BASS_ENCODE_AUTOFREE, EncodeProc, ms);
- hencoder := BASS_Encode_MP3_Start(hdecoder, nil, BASS_ENCODE_AUTOFREE, EncodeProc, ms);
- if hencoder = 0 then
- raise Exception.Create('BASS Encoder create error');
- SetLength(buf, 100000);
- repeat
- r := BASS_ChannelGetData(hdecoder, @buf[0], SizeOf(buf));
- until r < 0;
- SetLength(data_out, ms.Size);
- if Length(data_out) <> 0 then
- System.Move(ms.Memory^, Pointer(data_out)^, Length(data_out));
- TFile.WriteAllBytes(aFileOut, data_out);
- finally
- ms.Free;
- BASS_StreamFree(hdecoder);
- end;
- end;
- begin
- try
- AudioEncode(
- ExtractFilePath(ParamStr(0)) + 'test.wav',
- ExtractFilePath(ParamStr(0)) + 'test.ogg'
- );
- except
- on E: Exception do
- Writeln(E.ClassName, ': ', E.Message);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement