audiere.pas
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:12k
源码类别:

游戏引擎

开发平台:

Delphi

  1. //=========================================================================
  2. // Audiere Sound System
  3. // Version 1.9.2
  4. // (c) 2002 Chad Austin
  5. //
  6. // This API uses principles explained at
  7. // http://aegisknight.org/cppinterface.html
  8. //
  9. // This code licensed under the terms of the LGPL.  See the Audiere
  10. // license.txt.
  11. //-------------------------------------------------------------------------
  12. // Delphi Conversion By:
  13. // Jarrod Davis
  14. // Jarrod Davis Software
  15. // http://www.jarroddavis.com   - Jarrod Davis Software
  16. // http://www.gamevisionsdk.com - Game Application Framework for Delphi
  17. // support@jarroddavis.com      - Support Email
  18. //-------------------------------------------------------------------------
  19. // How to use:
  20. //   * Include Audiere in your Uses statement
  21. //   * Enable or Disable the DYNAMICS compiler define
  22. //   * If Dynamic, be sure to call AdrLoadDLL before using any commands.
  23. //     the DLL will be automaticlly unloaded at termination.
  24. //   * If Static, then use as normal.
  25. // History:
  26. //   * Initial 1.9.2 release.
  27. //   + Added dynamic loading. Use the DYNAMIC compiler define to control
  28. //     this. When enabled you can then use ArdLoadLL/AdrUnloadDLL to
  29. //     dynamiclly load/unload dll at runtime.
  30. //=========================================================================
  31. unit Audiere;
  32. {$A+}
  33. {$Z4}
  34. {.$DEFINE DYNAMIC}
  35. interface
  36. const
  37.   DLL_NAME = 'Audiere.dll';
  38. type
  39.   { TAdrSeekMode  }
  40.   TAdrSeekMode = (
  41.     Adr_Seek_Begin,
  42.     Adr_Seek_Current,
  43.     Adr_Seek_End
  44.   );
  45.   { TAdrSoundEffectType }
  46.   TAdrSoundEffectType = (
  47.     Adr_SoundEffectType_Single,
  48.     Adr_SoundEffectType_Multiple
  49.   );
  50.   { TAdrSampleFormat }
  51.   TAdrSampleFormat = (
  52.     Adr_SampleFormat_U8,
  53.     Adr_SampleFormat_S16
  54.   );
  55.   { TAdrFileFormat }
  56.   TAdrFileFormat = (
  57.     FF_AUTODETECT,
  58.     FF_WAV,
  59.     FF_OGG,
  60.     FF_FLAC,
  61.     FF_MP3,
  62.     FF_MOD
  63.   );
  64.   { TAdrRefCounted  }
  65.   TAdrRefCounted = class
  66.   public
  67.     procedure Ref;   virtual; stdcall; abstract;
  68.     procedure UnRef; virtual; stdcall; abstract;
  69.   end;
  70.   { TAdrFile }
  71.   TAdrFile = class(TAdrRefCounted)
  72.   public
  73.     function Read(aBuffer: Pointer; aSize: Integer): Integer; virtual; stdcall; abstract;
  74.     function Seek(aPosition: Integer; aSeekMode: TAdrSeekMode): Boolean; virtual; stdcall; abstract;
  75.     function Tell: Integer; virtual; stdcall; abstract;
  76.   end;
  77.   { TAdrSampleSource }
  78.   TAdrSampleSource = class(TAdrRefCounted)
  79.   public
  80.     procedure GetFormat(var aChannelCount: Integer; var aSampleRate: Integer; var aSampleFormat: TAdrSampleFormat); virtual; stdcall; abstract;
  81.     function  Read(aFrameCount: Integer; aBuffer: Pointer): Integer;  virtual; stdcall; abstract;
  82.     procedure Reset; virtual; stdcall; abstract;
  83.     function  IsSeekable: Boolean; virtual; stdcall; abstract;
  84.     function  GetLength: Integer; virtual; stdcall; abstract;
  85.     procedure SetPosition(Position: Integer); virtual; stdcall; abstract;
  86.     function  GetPosition: Integer; virtual; stdcall; abstract;
  87.   end;
  88.   { TAdrOutputStream }
  89.   TAdrOutputStream = class(TAdrRefCounted)
  90.   public
  91.     procedure Play; virtual; stdcall; abstract;
  92.     procedure Stop; virtual; stdcall; abstract;
  93.     function  IsPlaying: Boolean; virtual; stdcall; abstract;
  94.     procedure Reset; virtual; stdcall; abstract;
  95.     procedure SetRepeat(aRepeat: Boolean); virtual; stdcall; abstract;
  96.     function  GetRepeat: Boolean; virtual; stdcall; abstract;
  97.     procedure SetVolume(aVolume: Single); virtual; stdcall; abstract;
  98.     function  GetVolume: Single; virtual; stdcall; abstract;
  99.     procedure SetPan(aPan: Single); virtual; stdcall; abstract;
  100.     function  GetPan: Single; virtual; stdcall; abstract;
  101.     procedure SetPitchShift(aShift: Single); virtual; stdcall; abstract;
  102.     function  GetPitchShift: Single; virtual; stdcall; abstract;
  103.     function  IsSeekable: Boolean; virtual; stdcall; abstract;
  104.     function  GetLength: Integer; virtual; stdcall; abstract;
  105.     procedure SetPosition(aPosition: Integer); virtual; stdcall; abstract;
  106.     function  GetPosition: Integer; virtual; stdcall; abstract;
  107.   end;
  108.   { TAdrAudioDevice }
  109.   TAdrAudioDevice = class(TAdrRefCounted)
  110.   public
  111.     procedure Update; virtual; stdcall; abstract;
  112.     function  OpenStream(aSource: TAdrSampleSource): TAdrOutputStream; virtual; stdcall; abstract;
  113.     function  OpenBuffer(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampelFormat: TAdrSampleFormat):  TAdrOutputStream; virtual; stdcall; abstract;
  114.   end;
  115.   { TAdrSampleBuffer }
  116.   TAdrSampleBuffer = class(TAdrRefCounted)
  117.   public
  118.     procedure GetFormat(var ChannelCount: Integer; var aSampleRate: Integer; var aSampleFormat: TAdrSampleFormat); virtual; stdcall; abstract;
  119.     function  GetLength: Integer; virtual; stdcall; abstract;
  120.     function  GetSamples: Pointer; virtual; stdcall; abstract;
  121.     function  OpenStream: TAdrSampleSource; virtual; stdcall; abstract;
  122.   end;
  123.   { TAdrSoundEffect }
  124.   TAdrSoundEffect = class(TAdrRefCounted)
  125.   public
  126.     procedure Play; virtual; stdcall; abstract;
  127.     procedure Stop; virtual; stdcall; abstract;
  128.     procedure SetVolume(aVolume: Single); virtual; stdcall; abstract;
  129.     function  GetVolume: Single; virtual; stdcall; abstract;
  130.     procedure SetPan(aPan: Single); virtual; stdcall; abstract;
  131.     function  GetPan: Single; virtual; stdcall; abstract;
  132.     procedure SetPitchShift(aShift: Single); virtual; stdcall; abstract;
  133.     function  GetPitchShift: Single; virtual; stdcall; abstract;
  134.   end;
  135. { --- Audiere Routines -------------------------------------------------- }
  136. {$IFNDEF DYNAMIC}
  137. function AdrGetVersion: PChar; stdcall; external DLL_NAME name '_AdrGetVersion@0';
  138. function AdrGetSupportedFileFormats: PChar; stdcall; external DLL_NAME name '_AdrGetSupportedFileFormats@0';
  139. function AdrGetSupportedAudioDevices: PChar; stdcall; external DLL_NAME name '_AdrGetSupportedAudioDevices@0';
  140. function AdrGetSampleSize(aFormat: TAdrSampleFormat): Integer; stdcall; external DLL_NAME name '_AdrGetSampleSize@4';
  141. function AdrOpenDevice(const aName: PChar; const aParams: PChar): TAdrAudioDevice; stdcall; external DLL_NAME name '_AdrOpenDevice@8';
  142. function AdrOpenSampleSource(const aFilename: PChar; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrOpenSampleSource@8';
  143. function AdrOpenSampleSourceFromFile(aFile: TAdrFile; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrOpenSampleSourceFromFile@8';
  144. function AdrCreateTone(aFrequency: Double): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateTone@8';
  145. function AdrCreateSquareWave(aFrequency: Double): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateSquareWave@8';
  146. function AdrCreateWhiteNoise: TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateWhiteNoise@0';
  147. function AdrCreatePinkNoise: TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreatePinkNoise@0';
  148. function AdrOpenSound(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aStreaming: LongBool): TAdrOutputStream; stdcall; external DLL_NAME name '_AdrOpenSound@12';
  149. function AdrCreateSampleBuffer(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampleFormat: TAdrSampleFormat): TAdrSampleBuffer; stdcall; external DLL_NAME name '_AdrCreateSampleBuffer@20';
  150. function AdrCreateSampleBufferFromSource(aSource: TAdrSampleSource): TAdrSampleBuffer; stdcall; external DLL_NAME name '_AdrCreateSampleBufferFromSource@4';
  151. function AdrOpenSoundEffect(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aType: TAdrSoundEffectType): TAdrSoundEffect; stdcall; external DLL_NAME name '_AdrOpenSoundEffect@12';
  152. {$ENDIF}
  153. {$IFDEF DYNAMIC}
  154. var
  155.   AdrGetVersion                  : function: PChar; stdcall = nil;
  156.   AdrGetSupportedFileFormats     : function: PChar; stdcall = nil;
  157.   AdrGetSupportedAudioDevices    : function : PChar; stdcall = nil;
  158.   AdrGetSampleSize               : function(aFormat: TAdrSampleFormat): Integer; stdcall = nil;
  159.   AdrOpenDevice                  : function(const aName: PChar; const aParams: PChar): TAdrAudioDevice; stdcall = nil;
  160.   AdrOpenSampleSource            : function(const aFilename: PChar; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall = nil;
  161.   AdrOpenSampleSourceFromFile    : function(aFile: TAdrFile; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall = nil;
  162.   AdrCreateTone                  : function(aFrequency: Double): TAdrSampleSource; stdcall = nil;
  163.   AdrCreateSquareWave            : function(aFrequency: Double): TAdrSampleSource; stdcall = nil;
  164.   AdrCreateWhiteNoise            : function: TAdrSampleSource; stdcall = nil;
  165.   AdrCreatePinkNoise             : function: TAdrSampleSource; stdcall = nil;
  166.   AdrOpenSound                   : function(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aStreaming: LongBool): TAdrOutputStream; stdcall = nil;
  167.   AdrCreateSampleBuffer          : function(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampleFormat: TAdrSampleFormat): TAdrSampleBuffer; stdcall = nil;
  168.   AdrCreateSampleBufferFromSource: function(aSource: TAdrSampleSource): TAdrSampleBuffer; stdcall = nil;
  169.   AdrOpenSoundEffect             : function(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aType: TAdrSoundEffectType): TAdrSoundEffect; stdcall = nil;
  170. function AdrLoadDLL: Boolean; stdcall;
  171. procedure AdrUnloadDLL; stdcall;
  172. {$ENDIF}
  173. implementation
  174. {$IFDEF DYNAMIC}
  175. uses
  176.   Windows;
  177. var
  178.   AdrDLL: HMODULE = 0;
  179. function AdrLoadDLL: Boolean;
  180. begin
  181.   Result := False;
  182.   AdrDLL := LoadLibrary('audiere.dll');
  183.   if(AdrDLL = 0) then
  184.   begin
  185.     Exit;
  186.   end;
  187.   @AdrGetVersion                   := GetProcAddress(AdrDLL, '_AdrGetVersion@0');
  188.   @AdrGetSupportedFileFormats      := GetProcAddress(AdrDLL, '_AdrGetSupportedFileFormats@0');
  189.   @AdrGetSupportedAudioDevices     := GetProcAddress(AdrDLL, '_AdrGetSupportedAudioDevices@0');
  190.   @AdrGetSampleSize                := GetProcAddress(AdrDLL, '_AdrGetSampleSize@4');
  191.   @AdrOpenDevice                   := GetProcAddress(AdrDLL, '_AdrOpenDevice@8');
  192.   @AdrOpenSampleSource             := GetProcAddress(AdrDLL, '_AdrOpenSampleSource@8');
  193.   @AdrOpenSampleSourceFromFile     := GetProcAddress(AdrDLL, '_AdrOpenSampleSourceFromFile@8');
  194.   @AdrCreateTone                   := GetProcAddress(AdrDLL, '_AdrCreateTone@8');
  195.   @AdrCreateSquareWave             := GetProcAddress(AdrDLL, '_AdrCreateSquareWave@8');
  196.   @AdrCreateWhiteNoise             := GetProcAddress(AdrDLL, '_AdrCreateWhiteNoise@0');
  197.   @AdrCreatePinkNoise              := GetProcAddress(AdrDLL, '_AdrCreatePinkNoise@0');
  198.   @AdrOpenSound                    := GetProcAddress(AdrDLL, '_AdrOpenSound@12');
  199.   @AdrCreateSampleBuffer           := GetProcAddress(AdrDLL, '_AdrCreateSampleBuffer@20');
  200.   @AdrCreateSampleBufferFromSource := GetProcAddress(AdrDLL, '_AdrCreateSampleBufferFromSource@4');
  201.   @AdrOpenSoundEffect              := GetProcAddress(AdrDLL, '_AdrOpenSoundEffect@12');
  202.   if not Assigned(AdrGetVersion) then Exit;
  203.   if not Assigned(AdrGetSupportedFileFormats) then Exit;
  204.   if not Assigned(AdrGetSupportedAudioDevices) then Exit;
  205.   if not Assigned(AdrGetSampleSize) then Exit;
  206.   if not Assigned(AdrOpenDevice) then Exit;
  207.   if not Assigned(AdrOpenSampleSource) then Exit;
  208.   if not Assigned(AdrOpenSampleSourceFromFile) then Exit;
  209.   if not Assigned(AdrCreateTone) then Exit;
  210.   if not Assigned(AdrCreateSquareWave) then Exit;
  211.   if not Assigned(AdrCreateWhiteNoise) then Exit;
  212.   if not Assigned(AdrCreatePinkNoise) then Exit;
  213.   if not Assigned(AdrOpenSound) then Exit;
  214.   if not Assigned(AdrCreateSampleBuffer) then Exit;
  215.   if not Assigned(AdrCreateSampleBufferFromSource) then Exit;
  216.   if not Assigned(AdrOpenSoundEffect) then Exit;
  217.   Result := True;
  218. end;
  219. procedure AdrUnloadDLL;
  220. begin
  221.   if AdrDLL <> 0 then
  222.   begin
  223.     FreeLibrary(AdrDLL);
  224.     AdrDLL := 0;
  225.   end;
  226. end;
  227. initialization
  228. begin
  229. end;
  230. finalization
  231. begin
  232.   AdrUnLoadDLL;
  233. end;
  234. {$ENDIF}
  235. end.