1unit asndlib; 2{$mode objfpc} 3{$J+} 4{$INLINE ON} 5{$MACRO ON} 6{$PACKRECORDS C} 7{$ASSERTIONS ON} 8 9interface 10 11uses 12 ctypes, gctypes; 13 14const 15 ASND_LIB = $100; 16 SND_LIB = ( ASND_LIB + 2 ); 17 SND_OK = 0; 18 SND_INVALID = - 1; 19 SND_ISNOTASONGVOICE = - 2; 20 SND_BUSY = 1; 21 SND_UNUSED = 0; (*!< This voice is available for use. *) 22 SND_WORKING = 1; (*!< This voice is currently in progress. *) 23 SND_WAITING = 2; (*!< This voice is currently in progress and waiting to one SND_AddVoice() function (the voice handler is called continuously) *) 24 25 VOICE_MONO_8BIT = 0; 26 VOICE_MONO_16BIT = 1; 27 VOICE_MONO_16BIT_BE = 1; 28 VOICE_STEREO_8BIT = 2; 29 VOICE_STEREO_16BIT = 3; 30 VOICE_STEREO_16BIT_BE = 3; 31 VOICE_MONO_8BIT_U = 4; 32 VOICE_MONO_16BIT_LE = 5; 33 VOICE_STEREO_8BIT_U = 6; 34 VOICE_STEREO_16BIT_LE = 7; 35 36 MIN_VOLUME = 0; 37 MID_VOLUME = 127; 38 MAX_VOLUME = 255; 39 MIN_PITCH = 1; (*!< 1Hz *) 40 F44100HZ_PITCH = 44100; (*!< 44100Hz *) 41 MAX_PITCH = 144000; (*!< 144000Hz (more process time for pitch>48000) *) 42 43 NOTE_DO = 0; 44 NOTE_DOs = 1; 45 NOTE_REb = NOTE_DOs; 46 NOTE_RE = NOTE_REb + 1; 47 NOTE_REs = NOTE_RE + 1; 48 NOTE_MIb = NOTE_REs; 49 NOTE_MI = NOTE_MIb + 1; 50 NOTE_FA = NOTE_MI + 1; 51 NOTE_FAs = NOTE_FA + 1; 52 NOTE_SOLb = NOTE_FAs; 53 NOTE_SOL = NOTE_SOLb + 1; 54 NOTE_SOLs = NOTE_SOL + 1; 55 NOTE_LAb = NOTE_SOLs; 56 NOTE_LA = NOTE_LAb + 1; 57 NOTE_LAs = NOTE_LA + 1; 58 NOTE_SIb = NOTE_LAs; 59 NOTE_SI = NOTE_SIb + 1; 60 61 NOTE_C = 0; 62 NOTE_Cs = 1; 63 NOTE_Db = NOTE_Cs; 64 NOTE_D = NOTE_Db + 1; 65 NOTE_Ds = NOTE_D + 1; 66 NOTE_Eb = NOTE_Ds; 67 NOTE_E = NOTE_Eb + 1; 68 NOTE_F = NOTE_E + 1; 69 NOTE_Fs = NOTE_F + 1; 70 NOTE_Gb = NOTE_Fs; 71 NOTE_G = NOTE_Gb + 1; 72 NOTE_Gs = NOTE_G + 1; 73 NOTE_Ab = NOTE_Gs; 74 NOTE_A = NOTE_Ab + 1; 75 NOTE_As = NOTE_A + 1; 76 NOTE_Bb = NOTE_As; 77 NOTE_B = NOTE_Bb + 1; 78 79 80function _NOTE(note, octave: cint): cint; inline; 81 82{$define Note2Freq := ANote2Freq} 83{$define SND_Init := ASND_Init} 84{$define SND_End := ASND_End} 85{$define SND_Pause := ASND_Pause} 86{$define SND_Is_Paused := ASND_Is_Paused} 87{$define SND_GetTime := ASND_GetTime} 88{$define SND_GetSampleCounter := ASND_GetSampleCounter} 89{$define SND_GetSamplesPerTick := ASND_GetSamplesPerTick} 90{$define SND_SetTime := ASND_SetTime} 91{$define SND_SetCallback := ASND_SetCallback} 92{$define SND_GetAudioRate := ASND_GetAudioRate} 93{$define SND_SetVoice := ASND_SetVoice} 94{$define SND_AddVoice := ASND_AddVoice} 95{$define SND_StopVoice := ASND_StopVoice} 96{$define SND_PauseVoice := ASND_PauseVoice} 97{$define SND_StatusVoice := ASND_StatusVoice} 98{$define SND_GetFirstUnusedVoice := ASND_GetFirstUnusedVoice} 99{$define SND_ChangePitchVoice := ASND_ChangePitchVoice} 100{$define SND_ChangeVolumeVoice := ASND_ChangeVolumeVoice} 101{$define SND_ChangeVolumeVoice := ASND_ChangeVolumeVoice} 102{$define SND_GetTickCounterVoice := ASND_GetTickCounterVoice} 103{$define SND_GetTimerVoice := ASND_GetTimerVoice} 104{$define SND_TestPointer := ASND_TestPointer} 105 106 107 108type 109 ASNDVoiceCallback = procedure(voice: cint32); cdecl; 110 111function ANote2Freq(note, freq_base, note_base: cint): cint; cdecl; external; 112procedure ASND_Init; cdecl; external; 113procedure ASND_End; cdecl; external; 114procedure ASND_Pause(paused: cint32); cdecl; external; 115function ASND_Is_Paused: cint32; cdecl; external; 116function ASND_GetTime: cuint32; cdecl; external; 117function ASND_GetSampleCounter: cuint32; cdecl; external; 118function ASND_GetSamplesPerTick: cuint32; cdecl; external; 119procedure ASND_SetTime(time: cuint32); cdecl; external; 120 121type 122 TAuxCallback0 = procedure; cdecl; 123procedure ASND_SetCallback(callback: TAuxCallback0); cdecl; external; 124function ASND_GetAudioRate: cint32; cdecl; external; 125function ASND_SetVoice(voice, format, pitch, delay: cint32; snd: pointer; size_snd, volume_l, volume_r: cint32; callback: ASNDVoiceCallback): cint32; cdecl; external; 126function ASND_SetInfiniteVoice(voice, format, pitch, delay: cint32; snd: pointer; size_snd, volume_l, volume_r: cint32): cint32; cdecl; external; 127function ASND_AddVoice(voice: cint32; snd: pointer; size_snd: cint32): cint32; cdecl; external; 128function ASND_StopVoice(voice: cint32): cint32; cdecl; external; 129function ASND_PauseVoice(voice, pause: cint32): cint32; cdecl; external; 130function ASND_StatusVoice(voice: cint32): cint32; cdecl; external; 131function ASND_GetFirstUnusedVoice: cint32; cdecl; external; 132function ASND_ChangePitchVoice(voice, pitch: cint32): cint32; cdecl; external; 133function ASND_ChangeVolumeVoice(voice, volume_l, volume_r: cint32): cint32; cdecl; external; 134function ASND_GetTickCounterVoice(voice: cint32): cuint32; cdecl; external; 135function ASND_GetTimerVoice(voice: cint32): cuint32; cdecl; external; 136function ASND_TestPointer(voice: cint32; pointer: pointer): cint32; cdecl; external; 137function ASND_TestVoiceBufferReady(voice: cint32): cint32; cdecl; external; 138function ASND_GetDSP_PercentUse: cuint32; cdecl; external; 139function ASND_GetDSP_ProcessTime: cuint32; cdecl; external; 140 141implementation 142 143function _NOTE(note, octave: cint): cint; inline; 144begin 145 _NOTE := note + (octave shl 3) + (octave shl 2); 146end; 147 148initialization 149 150{$linklib asnd} 151 152end. 153