Recent

Author Topic: VGM Player  (Read 658 times)

Gigatron2

  • Newbie
  • Posts: 3
VGM Player
« on: January 15, 2025, 12:03:16 am »
Hi, it's Gigatron from another computer i am not at home yet;

The .dll was compiled for X64 system with visual studio 2022 and minimum functions are exported in the library;

The library is attached in rar format; no vgz music you must download them to test this player.


A VGM Player is a sound player that plays VGM and (often also) VGZ files.
You can download vgm files here : https://vgmrips.net/packs/

Hope you can play over 61000 vgm rips music from differents sound-chips;

Here are the supported chips : Video Game Music Files (*.vgm, *.vgz) formats. VGMPlay emulates a variety of sound chips used in legacy arcade and console game hardware: SN76496 (Sega PSG) and T6W28 (NeoGeo Pocket custom), YM2413* (OPLL), YM2612 (OPN2), YM2151 (OPM), SegaPCM, RF5C68, YM2203 (OPN), YM2608 (OPNA), YM2610/B (OPNB), YM3812* (OPL2), YM3526* (OPL), Y8950* (MSX AUDIO), YMF262* (OP3), YMF278B (OPL4), YMF271 (OPLX), YMZ280B, RF5C164 (Sega MegaCD PCM), PWM (from Sega 32x), AY8910 (MSX PSG), GameBoy DMG, NES APU (incl. FDS), MultiPCM, UPD7759, OKI6258 (Sharp X68000 ADPCM), OKI6295, K051649, K054539, HuC6280 (PC Engine), C140, K053260, Pokey (Atari), QSound, SCSP (Saturn Custom Sound Processor, YMF292-F)

The credits are comming in the next release:

The main Unit :

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs,StdCtrls, ExtCtrls,
  9.   vgm_lib, mmsystem, windows;
  10.  
  11. const
  12.  
  13.   Channels = 2;
  14.   BitsPerSample = 16;
  15.   SampleRate = 44100; // number of samples per second
  16.   BufSize = 65536 ; //   multiple of 2
  17.   BufferCount = 2;
  18.  
  19. type
  20.  
  21.   { TForm1 }
  22.  
  23.   TForm1 = class(TForm)
  24.     Label1: TLabel;
  25.     Timer1: TTimer;
  26.     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure FormShow(Sender: TObject);
  29.     procedure Timer1Timer(Sender: TObject);
  30.   private
  31.      buffers: array[0..BufferCount-1] of array[0..BufSize-1] of SmallInt;
  32.      waveHeaders: array[0..BufferCount-1] of TWaveHdr;
  33.      currentBuffer: Integer;
  34.   public
  35.  
  36.   end;
  37.  
  38. var
  39.   Form1: TForm1;
  40.   waveOut: HWAVEOUT;
  41.   waveHeader: TWaveHdr;
  42.   ok_flag : boolean = false;
  43.   // vgm
  44.   vgm_mus : boolean;
  45.  
  46. implementation
  47.  
  48. {$R *.lfm}
  49.  
  50. /// audio init et le reste !!
  51. procedure HandleError(const Str: PAnsiChar);
  52. begin
  53.   if Str <> nil then
  54.   begin
  55.     ShowMessage('Error: Wrong Format ? '+ Str);
  56.  
  57.     Halt(1);
  58.   end;
  59. end;
  60.  
  61. procedure FillBuff(bufferIndex: Integer);
  62. var
  63.   GenSmp, NumSmp: Integer;
  64. begin
  65.   if ok_flag then
  66.   begin
  67.  
  68.     bufferIndex := Form1.currentBuffer;
  69.     NumSmp := BufSize div (Channels * (BitsPerSample div 16));
  70.     GenSmp := FillBuffer(@Form1.buffers[bufferIndex][0],NumSmp);
  71.     Form1.waveHeaders[bufferIndex].dwFlags := Form1.waveHeaders[bufferIndex].dwFlags and (not WHDR_DONE);
  72.   end;
  73. end;
  74.  
  75. function WaveOutCallback(hwo: HWAVEOUT; uMsg: UINT; dwInstance, dwParam1, dwParam2: DWORD_PTR): DWORD; stdcall;
  76. begin
  77.   if uMsg = WOM_DONE then
  78.   begin
  79.     FillBuff(Form1.currentBuffer);
  80.     waveOutWrite(hwo, @Form1.waveHeaders[Form1.currentBuffer], SizeOf(TWaveHdr));
  81.     Form1.currentBuffer := (Form1.currentBuffer + 1) mod BufferCount;
  82.   end;
  83.   Result := 0;
  84. end;
  85.  
  86. procedure InitAudio;
  87. var
  88.   wFormat: TWaveFormatEx;
  89.   i: Integer;
  90. begin
  91.  
  92.   SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_LOWEST);
  93.  
  94.   with wFormat do
  95.   begin
  96.     wFormatTag := WAVE_FORMAT_PCM;
  97.     nChannels := Channels;
  98.     nSamplesPerSec := SampleRate;
  99.     wBitsPerSample := BitsPerSample;
  100.     nBlockAlign := (wBitsPerSample * nChannels) div 8;
  101.     nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
  102.     cbSize := 0;
  103.   end;
  104.  
  105.   if waveOutOpen(@waveOut, WAVE_MAPPER, @wFormat, QWORD(@WaveOutCallback), 0, CALLBACK_FUNCTION) <> MMSYSERR_NOERROR then
  106.     raise Exception.Create('Erreur ouverture periph audio');
  107.  
  108.   // buffers
  109.   for i := 0 to BufferCount - 1 do
  110.   begin
  111.     ZeroMemory(@Form1.waveHeaders[i], SizeOf(TWaveHdr));
  112.      with Form1.waveHeaders[i] do
  113.     begin
  114.       lpData := @Form1.buffers[i][0];
  115.       dwBufferLength := BufSize * SizeOf(SmallInt);
  116.       dwFlags := 0;
  117.     end;
  118.     waveOutPrepareHeader(waveOut, @Form1.waveHeaders[i], SizeOf(TWaveHdr));
  119.   end;
  120.   Form1.currentBuffer := 0;
  121.    for i := 0 to BufferCount - 1 do
  122.       begin
  123.         FillBuff(i);
  124.         waveOutWrite(waveOut, @Form1.waveHeaders[i], SizeOf(TWaveHdr));
  125.       end;
  126.  
  127. end;
  128.  
  129. { TForm1 }
  130.  
  131. procedure TForm1.FormCreate(Sender: TObject);
  132. var
  133.   Buffer: array of Byte;
  134.   FileName: string;
  135.  
  136. begin
  137.  
  138.   FileName := 'challenger.vgz';
  139.  
  140.   VGMPlay_Init;
  141.   VGMPlay_Init2;
  142.  
  143.   vgm_mus := OpenVGMFile(Pchar(Filename));
  144.  
  145. end;
  146.  
  147. procedure TForm1.FormShow(Sender: TObject);
  148. begin
  149.  InitAudio;
  150.  ok_flag := true;
  151.  PlayVGM;   // start player
  152.  
  153. end;
  154.  
  155. procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  156. var
  157.   i: Integer;
  158. begin
  159.  
  160.   for i := 0 to BufferCount - 1 do
  161.    waveOutUnprepareHeader(waveOut, @waveHeaders[i], SizeOf(TWaveHdr));
  162.    waveOutClose(waveOut);
  163.  
  164. end;
  165.  
  166. procedure TForm1.Timer1Timer(Sender: TObject);
  167. begin
  168.  
  169. end;
  170.  
  171. end.
  172.  

vgmplay unit

Code: Pascal  [Select][+][-]
  1. unit vgm_lib;
  2.  
  3.  
  4. {$mode objfpc}{$H+}
  5.  
  6.  
  7.  
  8. interface
  9.  
  10. uses
  11.  SysUtils,windows;
  12.  
  13.   const
  14.     VGMLIB = 'VGMPlay.dll';
  15.  
  16.  
  17. procedure VGMPlay_Init; cdecl; external VGMLIB ;
  18. procedure VGMPlay_Init2;cdecl; external VGMLIB ;
  19. procedure PlayVGM;cdecl; external VGMLIB ;
  20.  
  21. function  OpenVGMFile(fname: Pchar):Boolean;cdecl; external VGMLIB ;
  22.  
  23. function  FillBuffer(buff : Pointer;buffsize : integer):integer; cdecl; external VGMLIB ;
  24.  
  25.  
  26. implementation
  27.  
  28. end.
  29.  


Gigatron2

  • Newbie
  • Posts: 3
Re: VGM Player
« Reply #1 on: January 17, 2025, 09:29:09 pm »
Hi , this is the second release of this library, added some functions but not tested , so
feel free to test this player.
project and vgm lib added in rar format.

Regards Gtr

Vgm Player Credits
=======
This program was written by Valley Bell.

- Special thanks to ctr for major contributions in general.
- almost all software emulators are from MAME (http://mamedev.org)
- EMU2413 and Gens YM2612 were ported from Maxim's in_vgm
- the YMF278B core was ported from openMSX
- zlib compression by Jean-loup Gailly and Mark Adler is used
- all custom OPL Mappers were written using MAME software emulators and the OPL2/3 programming guides by Jeffrey S. Lee and Vladimir Arnost
- one YM2413 OPL Mapper was ported from MEKA.
- the RF5C164 and PWM cores were ported from Gens/GS
- the MAME YM2612 core was fixed with the help of Blargg's MAME YM2612 fix and Genesis Plus GX' YM2612 core
- AdLibEmu (OPL2 and OPL3 core) was ported from DOSBox
- The default HuC6280 core is from Ootake.
- EMU2149, the alternative NES APU core and the NES FDS core were ported from rainwarrior's NSFPlay.
- the WonderSwan core was ported from in_wsr
- Virtual Boy VSU core was ported from vbjin and originates from mednafen
- Thanks to grauw for patches that make it work properly on Mac OS X.
- ctr for writing the new C352 sound core.

Main unit :
Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs,StdCtrls, ExtCtrls,
  9.   vgm_lib, mmsystem, windows;
  10.  
  11. const
  12.  
  13.   Channels = 2;
  14.   BitsPerSample = 16;
  15.   SampleRate = 44100; // number of samples per second
  16.   BufSize = 8192 ; //   multiple of 2
  17.   BufferCount = 2;
  18.  
  19. type
  20.  
  21.   { TForm1 }
  22.  
  23.   TForm1 = class(TForm)
  24.     Label1: TLabel;
  25.     Memo1: TMemo;
  26.     Timer1: TTimer;
  27.     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  28.     procedure FormCreate(Sender: TObject);
  29.     procedure FormShow(Sender: TObject);
  30.     procedure Timer1Timer(Sender: TObject);
  31.   private
  32.  
  33.      buffers: array[0..BufferCount-1] of array[0..BufSize-1] of SmallInt;
  34.      waveHeaders: array[0..BufferCount-1] of TWaveHdr;
  35.      currentBuffer: Integer;
  36.   public
  37.  
  38.   end;
  39.  
  40. var
  41.   Form1: TForm1;
  42.   waveOut: HWAVEOUT;
  43.   waveHeader: TWaveHdr;
  44.   ok_flag : boolean = false;
  45.   // vgm
  46.   vgm_mus : boolean;
  47.   vgm_hdr : PVGM_HEADER;
  48.   vgm_tg  : VGM_TAG;
  49.   vgm_f      : integer;
  50.   tr_name :  PChar;
  51.   FileName: string;
  52.   rt : integer;
  53.  
  54. implementation
  55.  
  56. {$R *.lfm}
  57.  
  58. /// audio init et le reste !!
  59. procedure HandleError(const Str: PAnsiChar);
  60. begin
  61.   if Str <> nil then
  62.   begin
  63.     ShowMessage('Error: Wrong Format ? '+ Str);
  64.  
  65.     Halt(1);
  66.   end;
  67. end;
  68.  
  69. procedure FillBuff(bufferIndex: Integer);
  70. var
  71.   GenSmp, NumSmp: Integer;
  72. begin
  73.   if ok_flag then
  74.   begin
  75.  
  76.     bufferIndex := Form1.currentBuffer;
  77.     NumSmp := BufSize div (Channels * (BitsPerSample div 16));
  78.     GenSmp := FillBuffer(@Form1.buffers[bufferIndex][0],NumSmp);
  79.  
  80.   end;
  81. end;
  82.  
  83. function WaveOutCallback(hwo: HWAVEOUT; uMsg: UINT; dwInstance, dwParam1, dwParam2: DWORD_PTR): DWORD; stdcall;
  84. begin
  85.   if uMsg = WOM_DONE then
  86.   begin
  87.     FillBuff(Form1.currentBuffer);
  88.     waveOutWrite(hwo, @Form1.waveHeaders[Form1.currentBuffer], SizeOf(TWaveHdr));
  89.     Form1.currentBuffer := (Form1.currentBuffer + 1) mod BufferCount;
  90.   end;
  91.   Result := 0;
  92. end;
  93.  
  94. procedure InitAudio;
  95. var
  96.   wFormat: TWaveFormatEx;
  97.   i: Integer;
  98. begin
  99.  
  100.   SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_LOWEST);
  101.  
  102.   with wFormat do
  103.   begin
  104.     wFormatTag := WAVE_FORMAT_PCM;
  105.     nChannels := Channels;
  106.     nSamplesPerSec := SampleRate;
  107.     wBitsPerSample := BitsPerSample;
  108.     nBlockAlign := (wBitsPerSample * nChannels) div 8;
  109.     nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
  110.     cbSize := 0;
  111.   end;
  112.  
  113.   if waveOutOpen(@waveOut, WAVE_MAPPER, @wFormat, QWORD(@WaveOutCallback), 0, CALLBACK_FUNCTION) <> MMSYSERR_NOERROR then
  114.     raise Exception.Create('Erreur ouverture periph audio');
  115.  
  116.   // buffers
  117.   for i := 0 to BufferCount - 1 do
  118.   begin
  119.     ZeroMemory(@Form1.waveHeaders[i], SizeOf(TWaveHdr));
  120.      with Form1.waveHeaders[i] do
  121.     begin
  122.       lpData := @Form1.buffers[i][0];
  123.       dwBufferLength := BufSize * SizeOf(SmallInt);
  124.       dwFlags := 0;
  125.     end;
  126.     waveOutPrepareHeader(waveOut, @Form1.waveHeaders[i], SizeOf(TWaveHdr));
  127.   end;
  128.   Form1.currentBuffer := 0;
  129.    for i := 0 to BufferCount - 1 do
  130.       begin
  131.         FillBuff(i);
  132.         waveOutWrite(waveOut, @Form1.waveHeaders[i], SizeOf(TWaveHdr));
  133.       end;
  134.  
  135. end;
  136.  
  137.  
  138. { TForm1 }
  139.  
  140. procedure TForm1.FormCreate(Sender: TObject);
  141.  
  142. begin
  143.  
  144.   FileName := 'songs/02 Challenger (Opening Theme).vgz';
  145.  
  146.   VGMPlay_Init;
  147.   VGMPlay_Init2;
  148.   vgm_mus := OpenVGMFile(Pchar(Filename));
  149.  
  150. end;
  151.  
  152. procedure TForm1.FormShow(Sender: TObject);
  153. begin
  154.  InitAudio;
  155.  ok_flag := true;
  156.  PlayVGM;   // start player
  157.  
  158.  rt := GetVGMFileInfo(PChar(FileName),vgm_hdr,vgm_tg);
  159.  
  160.   Memo1.Lines.Add(vgm_tg.strTrackNameE);
  161.   Memo1.Lines.Add(vgm_tg.strTrackNameJ);
  162.   Memo1.Lines.Add(vgm_tg.strGameNameE);
  163.   Memo1.Lines.Add(vgm_tg.strGameNameJ);
  164.   Memo1.Lines.Add(vgm_tg.strSystemNameE);
  165.   Memo1.Lines.Add(vgm_tg.strSystemNameJ);
  166.   Memo1.Lines.Add(vgm_tg.strAuthorNameE);
  167.   Memo1.Lines.Add(vgm_tg.strAuthorNameJ);
  168.   Memo1.Lines.Add(vgm_tg.strReleaseDate);
  169.   Memo1.Lines.Add(vgm_tg.strCreator);
  170.   Memo1.Lines.Add(vgm_tg.strNotes);
  171. end;
  172.  
  173.  
  174. procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  175. var
  176.   i: Integer;
  177. begin
  178.  
  179.    for i := 0 to BufferCount - 1 do
  180.    waveOutUnprepareHeader(waveOut, @waveHeaders[i], SizeOf(TWaveHdr));
  181.    waveOutClose(waveOut);
  182.  
  183. end;
  184.  
  185. procedure TForm1.Timer1Timer(Sender: TObject);
  186. begin
  187. end;
  188.  
  189. end.
  190.  

vgmlib unit

Code: Pascal  [Select][+][-]
  1. unit vgm_lib;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.  SysUtils;
  9.  
  10. const
  11. FCC_VGM = $206D6756; // 'Vgm '
  12. FCC_GD3 = $20336447; // 'Gd3 '
  13.  
  14. VGMLIB = 'VGMPlay.dll';
  15.  
  16. type
  17.  
  18.   VGM_TAG = record
  19.       fccGD3: UINT32;
  20.       lngVersion: UINT32;
  21.       lngTagLength: UINT32;
  22.       strTrackNameE: PWideChar;
  23.       strTrackNameJ: PWideChar;
  24.       strGameNameE: PWideChar;
  25.       strGameNameJ: PWideChar;
  26.       strSystemNameE: PWideChar;
  27.       strSystemNameJ: PWideChar;
  28.       strAuthorNameE: PWideChar;
  29.       strAuthorNameJ: PWideChar;
  30.       strReleaseDate: PWideChar;
  31.       strCreator: PWideChar;
  32.       strNotes: PWideChar;
  33.     end;
  34.  
  35.  
  36.   VGM_HEADER =  record
  37.     fccVGM: Cardinal;
  38.     lngEOFOffset: Cardinal;
  39.     lngVersion: Cardinal;
  40.     lngHzPSG: Cardinal;
  41.     lngHzYM2413: Cardinal;
  42.     lngGD3Offset: Cardinal;
  43.     lngTotalSamples: Cardinal;
  44.     lngLoopOffset: Cardinal;
  45.     lngLoopSamples: Cardinal;
  46.     lngRate: Cardinal;
  47.     shtPSG_Feedback: Word;
  48.     bytPSG_SRWidth: Byte;
  49.     bytPSG_Flags: Byte;
  50.     lngHzYM2612: Cardinal;
  51.     lngHzYM2151: Cardinal;
  52.     lngDataOffset: Cardinal;
  53.     lngHzSPCM: Cardinal;
  54.     lngSPCMIntf: Cardinal;
  55.     lngHzRF5C68: Cardinal;
  56.     lngHzYM2203: Cardinal;
  57.     lngHzYM2608: Cardinal;
  58.     lngHzYM2610: Cardinal;
  59.     lngHzYM3812: Cardinal;
  60.     lngHzYM3526: Cardinal;
  61.     lngHzY8950: Cardinal;
  62.     lngHzYMF262: Cardinal;
  63.     lngHzYMF278B: Cardinal;
  64.     lngHzYMF271: Cardinal;
  65.     lngHzYMZ280B: Cardinal;
  66.     lngHzRF5C164: Cardinal;
  67.     lngHzPWM: Cardinal;
  68.     lngHzAY8910: Cardinal;
  69.     bytAYType: Byte;
  70.     bytAYFlag: Byte;
  71.     bytAYFlagYM2203: Byte;
  72.     bytAYFlagYM2608: Byte;
  73.     bytVolumeModifier: Byte;
  74.     bytReserved2: Byte;
  75.     bytLoopBase: ShortInt;
  76.     bytLoopModifier: Byte;
  77.     lngHzGBDMG: Cardinal;
  78.     lngHzNESAPU: Cardinal;
  79.     lngHzMultiPCM: Cardinal;
  80.     lngHzUPD7759: Cardinal;
  81.     lngHzOKIM6258: Cardinal;
  82.     bytOKI6258Flags: Byte;
  83.     bytK054539Flags: Byte;
  84.     bytC140Type: Byte;
  85.     bytReservedFlags: Byte;
  86.     lngHzOKIM6295: Cardinal;
  87.     lngHzK051649: Cardinal;
  88.     lngHzK054539: Cardinal;
  89.     lngHzHuC6280: Cardinal;
  90.     lngHzC140: Cardinal;
  91.     lngHzK053260: Cardinal;
  92.     lngHzPokey: Cardinal;
  93.     lngHzQSound: Cardinal;
  94.     lngHzSCSP: Cardinal;
  95.     // lngHzOKIM6376: Cardinal; // Uncomment if necessary
  96.     // bytReserved: array[0..3] of Byte; // Uncomment if necessary
  97.     lngExtraOffset: Cardinal;
  98.     lngHzWSwan: Cardinal;
  99.     lngHzVSU: Cardinal;
  100.     lngHzSAA1099: Cardinal;
  101.     lngHzES5503: Cardinal;
  102.     lngHzES5506: Cardinal;
  103.     bytES5503Chns: Byte;
  104.     bytES5506Chns: Byte;
  105.     bytC352ClkDiv: Byte;
  106.     bytESReserved: Byte;
  107.     lngHzX1_010: Cardinal;
  108.     lngHzC352: Cardinal;
  109.     lngHzGA20: Cardinal;
  110.   end;
  111.  
  112.   VGM_HDR_EXTRA = record
  113.     DataSize: UINT32;
  114.     Chp2ClkOffset: UINT32;
  115.     ChpVolOffset: UINT32;
  116.   end;
  117.  
  118.   VGMX_CHIP_DATA32 = record
  119.     Type_: UINT8;
  120.     Data: UINT32;
  121.   end;
  122.  
  123.   VGMX_CHIP_DATA16 = record
  124.     Type_: UINT8;
  125.     Flags: UINT8;
  126.     Data: UINT16;
  127.   end;
  128.  
  129.   VGMX_CHP_EXTRA32 = record
  130.     ChipCnt: UINT8;
  131.     CCData: ^VGMX_CHIP_DATA32;
  132.   end;
  133.  
  134.  
  135.   VGMX_CHP_EXTRA16 = record
  136.     ChipCnt: UINT8;
  137.     CCData: ^VGMX_CHIP_DATA16;
  138.   end;
  139.  
  140.   VGM_EXTRA = record
  141.     Clocks: VGMX_CHP_EXTRA32;
  142.     Volumes: VGMX_CHP_EXTRA16;
  143.   end;
  144.  
  145.   VGM_PCM_DATA = record
  146.     DataSize: UINT32;
  147.     Data: PByte;
  148.     DataStart: UINT32;
  149.   end;
  150.  
  151.   VGM_PCM_BANK = record
  152.     BankCount: UINT32;
  153.     Bank: ^VGM_PCM_DATA;
  154.     DataSize: UINT32;
  155.     Data: PByte;
  156.     DataPos: UINT32;
  157.     BnkPos: UINT32;
  158.   end;
  159.  
  160.  
  161.   PVGM_HEADER = ^VGM_HEADER;
  162.   PGD3_TAG = ^VGM_TAG;
  163.  
  164.  
  165. // vgm lib functions
  166. procedure VGMPlay_Init; cdecl; external VGMLIB ;
  167. procedure VGMPlay_Init2;cdecl; external VGMLIB ;
  168. procedure StopVGM; cdecl; external VGMLIB;
  169. procedure RestartVGM; cdecl; external VGMLIB ;
  170. procedure PauseVGM(Pause: Boolean); cdecl; external VGMLIB;
  171. procedure PlayVGM;cdecl; external VGMLIB ;
  172.  
  173. function  OpenVGMFile(fname: Pchar):Boolean;cdecl; external VGMLIB ;
  174. procedure CloseVGMFile; cdecl; external VGMLIB;
  175. function  FillBuffer(buff : Pointer;buffsize : integer):integer; cdecl; external VGMLIB ;
  176.  
  177. procedure VGMPlay_Deinit; cdecl; external VGMLIB;
  178. function FindFile(const FileName: PChar): PChar; cdecl; external VGMLIB;
  179. function FindFile_List(const FileNameList: PPChar): PChar; cdecl; external VGMLIB;
  180.  
  181. procedure SeekVGM(Relative: Boolean; PlayBkSamples: Int32); cdecl; external VGMLIB;
  182. procedure RefreshMuting; cdecl; external VGMLIB;
  183. procedure RefreshPanning; cdecl; external VGMLIB;
  184. procedure RefreshPlaybackOptions; cdecl; external VGMLIB;
  185.  
  186. function GetGZFileLength(const FileName: PChar): UInt32; cdecl; external VGMLIB;
  187.  
  188. procedure FreeGD3Tag(TagData: Pointer); cdecl; external VGMLIB ;
  189. function CalcSampleMSec(Value: UInt64; Mode: UInt8): UInt32; cdecl; external VGMLIB;
  190. function CalcSampleMSecExt(Value: UInt64; Mode: UInt8; FileHead: Pointer): UInt32; cdecl; external VGMLIB;
  191. function GetChipName(ChipID: UInt8): PChar; cdecl; external VGMLIB;
  192. function GetAccurateChipName(ChipID: UInt8; SubType: UInt8): PChar; cdecl; external VGMLIB;
  193. function GetChipClock(FileHead: Pointer; ChipID: UInt8; RetSubType: PUInt8): UInt32; cdecl; external VGMLIB;
  194.  
  195. function GetGZFileLengthW(const FileName: PWideChar): UInt32; cdecl; external VGMLIB;
  196. function OpenVGMFileW(const FileName: PWideChar): Boolean; cdecl; external VGMLIB;
  197.  
  198. function GetVGMFileInfo(const FileName: PChar; RetVGMHead: PVGM_HEADER; RetGD3Tag: VGM_TAG): UInt32; cdecl; external VGMLIB;
  199. function GetVGMFileInfoW(const FileName: PWideChar; RetVGMHead: PVGM_HEADER; RetGD3Tag: VGM_TAG): UInt32; cdecl; external VGMLIB;
  200.  
  201. function SampleVGM2Playback(SampleVal: Int32): Int32; cdecl; external VGMLIB;
  202. function SamplePlayback2VGM(SampleVal: Int32): Int32; cdecl; external VGMLIB;
  203.  
  204. function ReadGD3Tag( FileName: PChar; GD3Offset: UINT32;  RetGD3Tag: VGM_TAG):Integer; cdecl; external VGMLIB;
  205. procedure ReadVGMHeader( FileName: PChar; var RetVGMHead: VGM_HEADER); cdecl; external VGMLIB;
  206. procedure ReadChipExtraData32(StartOffset: UINT32; var ChpExtra: VGMX_CHP_EXTRA32); cdecl; external VGMLIB;
  207. procedure ReadChipExtraData16(StartOffset: UINT32; var ChpExtra: VGMX_CHP_EXTRA16); cdecl; external VGMLIB;
  208.  
  209. procedure ChangeChipSampleRate(DataPtr: Pointer; NewSmplRate: UINT32); cdecl; external VGMLIB;
  210. procedure GeneralChipLists; cdecl; external VGMLIB;
  211. procedure ShowVGMTag; cdecl; external VGMLIB;
  212.  
  213. implementation
  214.  
  215. end.
  216.  

 

TinyPortal © 2005-2018