Advertisement
Guest User

Untitled

a guest
Aug 19th, 2018
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.86 KB | None | 0 0
  1. program bassmp3;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   Classes,
  8.   IOUtils,
  9.   Dynamic_Bass,
  10.   Dynamic_BassEnc,
  11.   Dynamic_BassEnc_OGG,
  12.   Dynamic_BassEnc_MP3;
  13.  
  14.  
  15. procedure EncodeProc(handle:HENCODE; channel:DWORD; buffer:Pointer; len:DWORD; user:Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  16. begin
  17.   TMemoryStream(user).WriteBuffer(Buffer^, len);
  18. end;
  19.  
  20. procedure AudioEncode(const aFileIn, aFileOut: string);
  21. var
  22.   data_in, data_out, buf: TBytes;
  23.   hdecoder: HSTREAM;
  24.   hencoder: HENCODE;
  25.   ms: TMemoryStream;
  26.   r: Integer;
  27. begin
  28.   Load_BASSDLL(bassdll);
  29.   Load_BASSENCDLL(bassencdll);
  30.   Load_BASSENCOGGDLL(bassencoggdll);
  31.   Load_BASSENCMP3DLL(bassencmp3dll);
  32.  
  33.   BASS_Init(-1, 44100, 0, 0, nil);
  34.  
  35.   data_in := TFile.ReadAllBytes(aFileIn);
  36.  
  37.   hdecoder := BASS_StreamCreateFile(True, Pointer(data_in), 0, Length(data_in), BASS_STREAM_DECODE);
  38.   if hdecoder = 0 then
  39.     raise Exception.Create('BASS Stream create error');
  40.  
  41.   ms := TMemoryStream.Create;
  42.   try
  43.     //hencoder := BASS_Encode_OGG_Start(hdecoder, nil, BASS_ENCODE_AUTOFREE, EncodeProc, ms);
  44.     hencoder := BASS_Encode_MP3_Start(hdecoder, nil, BASS_ENCODE_AUTOFREE, EncodeProc, ms);
  45.     if hencoder = 0 then
  46.       raise Exception.Create('BASS Encoder create error');
  47.  
  48.     SetLength(buf, 100000);
  49.     repeat
  50.       r := BASS_ChannelGetData(hdecoder, @buf[0], SizeOf(buf));
  51.     until r < 0;
  52.  
  53.     SetLength(data_out, ms.Size);
  54.     if Length(data_out) <> 0 then
  55.       System.Move(ms.Memory^, Pointer(data_out)^, Length(data_out));
  56.  
  57.     TFile.WriteAllBytes(aFileOut, data_out);
  58.  
  59.   finally
  60.     ms.Free;
  61.     BASS_StreamFree(hdecoder);
  62.   end;
  63. end;
  64.  
  65. begin
  66.   try
  67.     AudioEncode(
  68.       ExtractFilePath(ParamStr(0)) + 'test.wav',
  69.       ExtractFilePath(ParamStr(0)) + 'test.ogg'
  70.     );
  71.   except
  72.     on E: Exception do
  73.       Writeln(E.ClassName, ': ', E.Message);
  74.   end;
  75. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement