From 6cf25c8bd82920a8709f20389bf6bf606fa35436 Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Mon, 26 Feb 2007 12:12:22 +0000 Subject: [PATCH] updated soundlib, DOOM, ac97snd git-svn-id: svn://kolibrios.org@376 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/sdk/trunk/sound/include/sound.h | 35 +- programs/develop/sdk/trunk/sound/src/init.asm | 120 ++--- .../develop/sdk/trunk/sound/src/setbuf.asm | 71 ++- .../develop/sdk/trunk/sound/src/sndgetfmt.asm | 38 +- .../develop/sdk/trunk/sound/src/sndgetpan.asm | 38 +- .../develop/sdk/trunk/sound/src/sndgetpos.asm | 37 +- .../sdk/trunk/sound/src/sndgetsize.asm | 37 +- .../develop/sdk/trunk/sound/src/sndout.asm | 35 +- .../develop/sdk/trunk/sound/src/sndreset.asm | 35 +- .../develop/sdk/trunk/sound/src/sndsetfmt.asm | 34 +- .../sdk/trunk/sound/src/sndsetmvol.asm | 34 +- .../develop/sdk/trunk/sound/src/sndsetpan.asm | 35 +- .../develop/sdk/trunk/sound/src/sndsetpos.asm | 35 +- .../develop/sdk/trunk/sound/src/sndsetvol.asm | 34 +- .../develop/sdk/trunk/sound/src/stopbuf.asm | 36 +- programs/games/doom/trunk/i_sound.c | 18 - .../games/doom/trunk/kolibc/include/sound.h | 12 +- programs/games/doom/trunk/s_sound.c | 53 ++- programs/media/ac97snd/trunk/ac97.sln | 13 +- programs/media/ac97snd/trunk/ac97wav.c | 424 ++++++------------ programs/media/ac97snd/trunk/ac97wav.h | 38 -- programs/media/ac97snd/trunk/k_lib.asm | 332 +------------- programs/media/ac97snd/trunk/kolibri.h | 42 +- 23 files changed, 496 insertions(+), 1090 deletions(-) diff --git a/programs/develop/sdk/trunk/sound/include/sound.h b/programs/develop/sdk/trunk/sound/include/sound.h index 416bebaefb..0e9454d3ce 100644 --- a/programs/develop/sdk/trunk/sound/include/sound.h +++ b/programs/develop/sdk/trunk/sound/include/sound.h @@ -76,18 +76,18 @@ extern "C" typedef unsigned int SNDBUF; -int _stdcall InitSound(); +int _stdcall InitSound(int *version); -SNDBUF _stdcall CreateBuffer(unsigned int format,int size); +int _stdcall CreateBuffer(unsigned int format,int size,SNDBUF *buf); int _stdcall DestroyBuffer(SNDBUF hBuff); int _stdcall SetFormat(SNDBUF hBuff, unsigned int format); -int _stdcall GetFormat(SNDBUF hBuff); +int _stdcall GetFormat(SNDBUF hBuff, unsigned int *format); int _stdcall ResetBuffer(SNDBUF hBuff, unsigned int flags); int _stdcall SetBufferPos(SNDBUF hBuff, int offset); -int _stdcall GetBufferPos(SNDBUF hBuff); -int _stdcall GetBufferSize(SNDBUF hBuff); +int _stdcall GetBufferPos(SNDBUF hBuff, int *offset); +int _stdcall GetBufferSize(SNDBUF hBuff, int *size); int _stdcall SetBuffer(SNDBUF hBuff,void* buff, int offs, int size); @@ -98,11 +98,32 @@ int _stdcall StopBuffer(SNDBUF hBuff); int _stdcall SetVolume(SNDBUF hBuff, int left, int right); int _stdcall GetVolume(SNDBUF hBuff, int *left, int *right); int _stdcall SetPan(SNDBUF hBuff, int pan); -int _stdcall GetPan(SNDBUF hBuff); +int _stdcall GetPan(SNDBUF hBuff, int *pan); int _stdcall GetMasterVol(int* vol); int _stdcall SetMasterVol(int vol); + +typedef struct +{ + unsigned int riff_id; + unsigned int riff_size; + unsigned int riff_format; + + unsigned int fmt_id; + unsigned int fmt_size; + + unsigned short int wFormatTag; + unsigned short int nChannels; + unsigned int nSamplesPerSec; + unsigned int nAvgBytesPerSec; + unsigned short int nBlockAlign; + unsigned short int wBitsPerSample; + unsigned int data_id; + unsigned int data_size; +} WAVEHEADER; + + unsigned int _stdcall test_wav(WAVEHEADER *hdr); #ifdef __cplusplus @@ -110,4 +131,4 @@ extern "C" } #endif -#endif //_SOUND_H_ \ No newline at end of file +#endif //_SOUND_H_ diff --git a/programs/develop/sdk/trunk/sound/src/init.asm b/programs/develop/sdk/trunk/sound/src/init.asm index d3f16beba8..da50a2e505 100644 --- a/programs/develop/sdk/trunk/sound/src/init.asm +++ b/programs/develop/sdk/trunk/sound/src/init.asm @@ -5,23 +5,16 @@ include "proc32.inc" section '.text' align 16 code readable executable -public _InitSound@0 -public _CreateBuffer@8 +public _InitSound@4 +public _CreateBuffer@12 public _DestroyBuffer@4 align 4 -proc _InitSound@0 - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_InitSound@4: ;p_ver:dword push ebx push ecx + mov eax, 68 mov ebx, 16 mov ecx, szInfinity @@ -29,102 +22,87 @@ proc _InitSound@0 mov [hSound], eax test eax, eax jz .fail - + mov eax, 68 mov ebx, 16 mov ecx, szSound int 0x40 mov [hrdwSound], eax - - mov eax, [hSound] + + lea eax, [esp+12] ;p_ver xor ebx, ebx - mov [handle], eax - mov [io_code], SRV_GETVERSION - mov [input], ebx - mov [inp_size], ebx - mov [output], ebx - mov [out_size], ebx - + push 4 ;.out_size + push eax ;.output + push ebx ;.inp_size + push ebx ;.input + push SRV_GETVERSION ;.code + push [hSound] ;.handle + mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp ;[handle] int 0x40 -.fail: - -.done: + add esp, 24 pop ecx pop ebx - ret -endp + ret 4 +.fail: + or eax, -1 + pop ecx + pop ebx + ret 4 align 4 -proc _CreateBuffer@8 stdcall, format:dword, size:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_CreateBuffer@12: ;format:dword,size:dword,p_str:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [format] - xor ecx, ecx + lea eax, [esp+20] ;p_str + lea ebx, [esp+12] ;format + + push 4 ;.out_size + push eax ;.output + push 8 ;.inp_size + push ebx ;.input + push SND_CREATE_BUFF;.code + push [hSound] ;.handle - mov [handle], eax - mov [io_code], SND_CREATE_BUFF - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx - mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 ;io_cintrol pop ecx pop ebx - ret -endp + ret 12 align 4 -proc _DestroyBuffer@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_DestroyBuffer@4: ;str:dword push ebx push ecx - - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx - mov [handle], eax - mov [io_code], SND_DESTROY_BUFF - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + xor eax, eax + lea ebx, [esp+12] ;[stream] + + push eax ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_DESTROY_BUFF;.code + push [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp ;[handle] int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 4 + section '.data' align 16 data readable writable diff --git a/programs/develop/sdk/trunk/sound/src/setbuf.asm b/programs/develop/sdk/trunk/sound/src/setbuf.asm index 312875b46d..0b23778b92 100644 --- a/programs/develop/sdk/trunk/sound/src/setbuf.asm +++ b/programs/develop/sdk/trunk/sound/src/setbuf.asm @@ -11,67 +11,52 @@ public _SetBuffer@16 public _PlayBuffer@8 align 4 -proc _SetBuffer@16 stdcall,str:dword, src:dword, offs:dword, size:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_SetBuffer@16: ;str:dword, src:dword, offs:dword, size:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_SETBUFF - mov [input], ebx - mov [inp_size], 16 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 16 ;.inp_size + push ebx ;.input + push SND_SETBUFF ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp - + ret 16 + align 4 -proc _PlayBuffer@8 stdcall, str:dword,flags:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_PlayBuffer@8: ;str:dword,flags:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx - mov [handle], eax - mov [io_code], SND_PLAY - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + xor eax, eax + lea ebx, [esp+12] ;[stream] + + push eax ;.out_size + push eax ;.output + push 8 ;.inp_size + push ebx ;.input + push SND_PLAY ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndgetfmt.asm b/programs/develop/sdk/trunk/sound/src/sndgetfmt.asm index 2ad1453687..8854ea2af6 100644 --- a/programs/develop/sdk/trunk/sound/src/sndgetfmt.asm +++ b/programs/develop/sdk/trunk/sound/src/sndgetfmt.asm @@ -7,37 +7,29 @@ section '.text' align 16 code readable executable extrn hSound -public _GetFormat@4 +public _GetFormat@8 align 4 -proc _GetFormat@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - +_GetFormat@8: ;str:dword, p_fmt:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + lea eax, [esp+16] ;p_fmt + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_GETFORMAT - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + push 4 ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_GETFORMAT ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndgetpan.asm b/programs/develop/sdk/trunk/sound/src/sndgetpan.asm index ef473389b2..32b0e4d5ed 100644 --- a/programs/develop/sdk/trunk/sound/src/sndgetpan.asm +++ b/programs/develop/sdk/trunk/sound/src/sndgetpan.asm @@ -5,39 +5,31 @@ include "proc32.inc" section '.text' align 16 code readable executable -public _GetPan@4 +public _GetPan@8 extrn hSound align 4 -proc _GetPan@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - +_GetPan@8: ;str:dword, p_pan:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + lea eax, [esp+16] + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_GETPAN - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + push 4 ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_GETPAN ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndgetpos.asm b/programs/develop/sdk/trunk/sound/src/sndgetpos.asm index 4912740c68..15a96dcccc 100644 --- a/programs/develop/sdk/trunk/sound/src/sndgetpos.asm +++ b/programs/develop/sdk/trunk/sound/src/sndgetpos.asm @@ -7,37 +7,30 @@ section '.text' align 16 code readable executable extrn hSound -public _GetBufferPos@4 +public _GetBufferPos@8 align 4 -proc _GetBufferPos@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_GetBufferPos@8: ;str:dword, p_pos:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + lea eax, [esp+16] + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_GETPOS - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + push 4 ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_GETPOS ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndgetsize.asm b/programs/develop/sdk/trunk/sound/src/sndgetsize.asm index dd9e8df9db..4864c54a6e 100644 --- a/programs/develop/sdk/trunk/sound/src/sndgetsize.asm +++ b/programs/develop/sdk/trunk/sound/src/sndgetsize.asm @@ -5,39 +5,32 @@ include "proc32.inc" section '.text' align 16 code readable executable -public _GetBufferSize@4 +public _GetBufferSize@8 extrn hSound align 4 -proc _GetBufferSize@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_GetBufferSize@8: ;str:dword, p_size:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + lea eax, [esp+16] + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_GETBUFFSIZE - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + push 4 ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_GETBUFFSIZE;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndout.asm b/programs/develop/sdk/trunk/sound/src/sndout.asm index 8fa0e4e21a..9f3f3216cb 100644 --- a/programs/develop/sdk/trunk/sound/src/sndout.asm +++ b/programs/develop/sdk/trunk/sound/src/sndout.asm @@ -10,34 +10,25 @@ extrn hSound public _WaveOut@12 align 4 -proc _WaveOut@12 stdcall,str:dword, src:dword, size:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - +_WaveOut@12: ;str:dword, src:dword, size:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_OUT - mov [input], ebx - mov [inp_size], 12 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 12 ;.inp_size + push ebx ;.input + push SND_OUT ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp \ No newline at end of file + ret 12 diff --git a/programs/develop/sdk/trunk/sound/src/sndreset.asm b/programs/develop/sdk/trunk/sound/src/sndreset.asm index ddc1dc3563..03b127c0ce 100644 --- a/programs/develop/sdk/trunk/sound/src/sndreset.asm +++ b/programs/develop/sdk/trunk/sound/src/sndreset.asm @@ -10,34 +10,27 @@ extrn hSound public _ResetBuffer@8 align 4 -proc _ResetBuffer@8 stdcall, str:dword, flags:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_ResetBuffer@8: ;str:dword, flags:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_RESET - mov [input], ebx - mov [inp_size], 8 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 12 ;.inp_size + push ebx ;.input + push SND_RESET ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndsetfmt.asm b/programs/develop/sdk/trunk/sound/src/sndsetfmt.asm index 157b3c13db..7df233ba0a 100644 --- a/programs/develop/sdk/trunk/sound/src/sndsetfmt.asm +++ b/programs/develop/sdk/trunk/sound/src/sndsetfmt.asm @@ -10,34 +10,26 @@ extrn hSound public _SetFormat@8 align 4 -proc _SetFormat@8 stdcall, str:dword, fmt:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_SetFormat@8: ;str:dword, fmt:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_SETFORMAT - mov [input], ebx - mov [inp_size], 8 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 8 ;.inp_size + push ebx ;.input + push SND_SETFORMAT ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 diff --git a/programs/develop/sdk/trunk/sound/src/sndsetmvol.asm b/programs/develop/sdk/trunk/sound/src/sndsetmvol.asm index c1d4ea1d2d..f78dcc530e 100644 --- a/programs/develop/sdk/trunk/sound/src/sndsetmvol.asm +++ b/programs/develop/sdk/trunk/sound/src/sndsetmvol.asm @@ -10,35 +10,27 @@ public _SetMasterVol@4 extrn hrdwSound align 4 -proc _SetMasterVol@4 stdcall,vol:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_SetMasterVol@4: ;vol:dword push ebx push ecx - mov eax, [hrdwSound] - lea ebx, [vol] - xor ecx, ecx - mov [handle], eax - mov [io_code], DEV_SET_MASTERVOL - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + xor eax, eax + lea ebx, [esp+12] ;[stream] + + push eax ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push DEV_SET_MASTERVOL ;.code + push dword [hrdwSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 4 diff --git a/programs/develop/sdk/trunk/sound/src/sndsetpan.asm b/programs/develop/sdk/trunk/sound/src/sndsetpan.asm index 6024fa918c..b7358bbf8b 100644 --- a/programs/develop/sdk/trunk/sound/src/sndsetpan.asm +++ b/programs/develop/sdk/trunk/sound/src/sndsetpan.asm @@ -10,34 +10,25 @@ public _SetPan@8 extrn hSound align 4 -proc _SetPan@8 stdcall, str:dword, pan:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - +_SetPan@8: ;str:dword, pan:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_SETPAN - mov [input], ebx - mov [inp_size], 8 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 12 ;.inp_size + push ebx ;.input + push SND_SETPAN ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 diff --git a/programs/develop/sdk/trunk/sound/src/sndsetpos.asm b/programs/develop/sdk/trunk/sound/src/sndsetpos.asm index d34762ba58..a93c3085a2 100644 --- a/programs/develop/sdk/trunk/sound/src/sndsetpos.asm +++ b/programs/develop/sdk/trunk/sound/src/sndsetpos.asm @@ -10,34 +10,27 @@ extrn hSound public _SetBufferPos@8 align 4 -proc _SetBufferPos@8 stdcall, str:dword, offs:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_SetBufferPos@8: ;str:dword, offs:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_SETPOS - mov [input], ebx - mov [inp_size], 8 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 8 ;.inp_size + push ebx ;.input + push SND_SETPOS ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 8 + diff --git a/programs/develop/sdk/trunk/sound/src/sndsetvol.asm b/programs/develop/sdk/trunk/sound/src/sndsetvol.asm index a84847811d..8eb4a4191f 100644 --- a/programs/develop/sdk/trunk/sound/src/sndsetvol.asm +++ b/programs/develop/sdk/trunk/sound/src/sndsetvol.asm @@ -10,35 +10,27 @@ public _SetVolume@12 extrn hSound align 4 -proc _SetVolume@12 stdcall, str:dword, lvol:dword,rvol:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_SetVolume@12: ;str:dword, lvol:dword,rvol:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx + + xor eax, eax + lea ebx, [esp+12] ;[stream] - mov [handle], eax - mov [io_code], SND_SETVOLUME - mov [input], ebx - mov [inp_size], 12 - mov [output], ecx - mov [out_size], ecx + push eax ;.out_size + push eax ;.output + push 12 ;.inp_size + push ebx ;.input + push SND_SETVOLUME ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 12 diff --git a/programs/develop/sdk/trunk/sound/src/stopbuf.asm b/programs/develop/sdk/trunk/sound/src/stopbuf.asm index f5f406d27f..063ff5f3b1 100644 --- a/programs/develop/sdk/trunk/sound/src/stopbuf.asm +++ b/programs/develop/sdk/trunk/sound/src/stopbuf.asm @@ -10,34 +10,28 @@ extrn hSound public _StopBuffer@4 align 4 -proc _StopBuffer@4 stdcall, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl +_StopBuffer@4: ;str:dword push ebx push ecx - mov eax, [hSound] - lea ebx, [str] - xor ecx, ecx - mov [handle], eax - mov [io_code], SND_STOP - mov [input], ebx - mov [inp_size], 4 - mov [output], ecx - mov [out_size], ecx + xor eax, eax + lea ebx, [esp+12] ;[stream] + + push eax ;.out_size + push eax ;.output + push 4 ;.inp_size + push ebx ;.input + push SND_STOP ;.code + push dword [hSound] ;.handle mov eax, 68 mov ebx, 17 - lea ecx, [handle] + mov ecx, esp int 0x40 + add esp, 24 pop ecx pop ebx - ret -endp + ret 4 + + \ No newline at end of file diff --git a/programs/games/doom/trunk/i_sound.c b/programs/games/doom/trunk/i_sound.c index 2325a3fbe1..72efa89cb7 100644 --- a/programs/games/doom/trunk/i_sound.c +++ b/programs/games/doom/trunk/i_sound.c @@ -456,8 +456,6 @@ void I_UpdateSound( void ) // Mixing channel index. int chan; int i; - int flags; - int size = 0; // Left and right channel // are in global mixbuffer, alternating. @@ -481,15 +479,12 @@ void I_UpdateSound( void ) // Love thy L2 chache - made this a loop. // Now more channels could be set at compile time // as well. Thus loop those channels. - // flags=0; for ( chan = 0; chan < NUM_CHANNELS; chan++ ) { // Check channel, if active. if (channels[ chan ]) { - // flags=1; - // Get the raw data from the channel. sample = *channels[ chan ]; // Add left and right part @@ -535,22 +530,9 @@ void I_UpdateSound( void ) // Increment current pointers in mixbuffer. leftout += step; rightout += step; -// if (flags) -// size+=4; } SetBuffer(hMixBuff,mixbuffer,mix_offset,mix_size); - - - // WaveOut(hMixBuff,(char*)&mixbuffer[0],4096); - -// if(size) -// { -// WaveOut(hMixBuff,(char*)&mixbuffer[0],size); -// SetBufferPos(hMixBuff, 0); -// SetBuffer(hMixBuff,(char*)&mixbuffer[0],mix_offset,4096); -// PlayBuffer(hMixBuff, PCM_SYNC); -// }; } diff --git a/programs/games/doom/trunk/kolibc/include/sound.h b/programs/games/doom/trunk/kolibc/include/sound.h index 58eb041ba1..0e9454d3ce 100644 --- a/programs/games/doom/trunk/kolibc/include/sound.h +++ b/programs/games/doom/trunk/kolibc/include/sound.h @@ -76,18 +76,18 @@ extern "C" typedef unsigned int SNDBUF; -int _stdcall InitSound(); +int _stdcall InitSound(int *version); -SNDBUF _stdcall CreateBuffer(unsigned int format,int size); +int _stdcall CreateBuffer(unsigned int format,int size,SNDBUF *buf); int _stdcall DestroyBuffer(SNDBUF hBuff); int _stdcall SetFormat(SNDBUF hBuff, unsigned int format); -int _stdcall GetFormat(SNDBUF hBuff); +int _stdcall GetFormat(SNDBUF hBuff, unsigned int *format); int _stdcall ResetBuffer(SNDBUF hBuff, unsigned int flags); int _stdcall SetBufferPos(SNDBUF hBuff, int offset); -int _stdcall GetBufferPos(SNDBUF hBuff); -int _stdcall GetBufferSize(SNDBUF hBuff); +int _stdcall GetBufferPos(SNDBUF hBuff, int *offset); +int _stdcall GetBufferSize(SNDBUF hBuff, int *size); int _stdcall SetBuffer(SNDBUF hBuff,void* buff, int offs, int size); @@ -98,7 +98,7 @@ int _stdcall StopBuffer(SNDBUF hBuff); int _stdcall SetVolume(SNDBUF hBuff, int left, int right); int _stdcall GetVolume(SNDBUF hBuff, int *left, int *right); int _stdcall SetPan(SNDBUF hBuff, int pan); -int _stdcall GetPan(SNDBUF hBuff, int pan); +int _stdcall GetPan(SNDBUF hBuff, int *pan); int _stdcall GetMasterVol(int* vol); int _stdcall SetMasterVol(int vol); diff --git a/programs/games/doom/trunk/s_sound.c b/programs/games/doom/trunk/s_sound.c index aacc9f2864..d6473818ce 100644 --- a/programs/games/doom/trunk/s_sound.c +++ b/programs/games/doom/trunk/s_sound.c @@ -178,7 +178,6 @@ void S_Init { int i; char *thread_stack; - int ver; numChannels = NUM_CHANNELS; @@ -243,34 +242,70 @@ extern signed short *mixbuffer; void sound_proc(void) { int ver; + int err; SND_EVENT evnt; int i; + + if(err = InitSound(&ver)) + { + printf("Error %x Sound service not installed\n\r", err); + _asm + { + mov eax, -1 + int 0x40 + }; + } + - if((ver = InitSound())< SOUND_VERSION ) + if(ver< SOUND_VERSION) { printf("Sound service version mismatch\n\r"); printf("Installed version: %d, required version %d\n\r", ver, SOUND_VERSION); + _asm + { + mov eax, -1 + int 0x40 + }; }; - hMixBuff=CreateBuffer(PCM_2_16_11|PCM_RING,0); - - if(!hMixBuff) + if (err = CreateBuffer(PCM_2_16_11|PCM_RING,0, &hMixBuff)) { - printf("sound not available\n\r"); + printf("Error %x sound not available\n\r", err); + printf("handle = %x\n\r", hMixBuff); + _asm + { + mov eax, -1 + int 0x40 + }; + } + + if(err = GetBufferSize(hMixBuff, &mix_size)) + { + printf("Error %x get buffer size\n\r", err); + printf("size = %x\n\r", mix_size); _asm { mov eax, -1 int 0x40 }; }; - - mix_size=GetBufferSize(hMixBuff)/2; + mix_size= mix_size/2; + printf("mixer size %d\n\r", mix_size); + if(err=PlayBuffer(hMixBuff, 0)) + { + printf("Error %x play buffer\n\r", err); + _asm + { + mov eax, -1 + int 0x40 + }; + } + mixbuffer = malloc(mix_size); - PlayBuffer(hMixBuff, 0); while(sound_state) { GetNotify(&evnt); diff --git a/programs/media/ac97snd/trunk/ac97.sln b/programs/media/ac97snd/trunk/ac97.sln index 42b490dc6e..31c51b4fd4 100644 --- a/programs/media/ac97snd/trunk/ac97.sln +++ b/programs/media/ac97snd/trunk/ac97.sln @@ -10,10 +10,13 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ac97", "ac97\ac97.vcproj", "{1C94A897-DA4F-45B2-B8A6-B97AD837828E}" ProjectSection(ProjectDependencies) = postProject {CF807B93-2860-41DF-A4D2-5B92B52DFD96} = {CF807B93-2860-41DF-A4D2-5B92B52DFD96} + {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1} = {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpg", "mpg\mpg.vcproj", "{CF807B93-2860-41DF-A4D2-5B92B52DFD96}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sound", "sound\sound.vcproj", "{C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -23,23 +26,21 @@ Global {50E3FB09-4E3A-4998-A824-6830405193AE}.Debug|Win32.ActiveCfg = Debug|Win32 {50E3FB09-4E3A-4998-A824-6830405193AE}.Debug|Win32.Build.0 = Debug|Win32 {50E3FB09-4E3A-4998-A824-6830405193AE}.Release|Win32.ActiveCfg = Release|Win32 - {50E3FB09-4E3A-4998-A824-6830405193AE}.Release|Win32.Build.0 = Release|Win32 {97BF69A3-826A-47D6-94E4-05FDD8CFF1FC}.Debug|Win32.ActiveCfg = Debug|Win32 - {97BF69A3-826A-47D6-94E4-05FDD8CFF1FC}.Debug|Win32.Build.0 = Debug|Win32 {97BF69A3-826A-47D6-94E4-05FDD8CFF1FC}.Release|Win32.ActiveCfg = Release|Win32 {97BF69A3-826A-47D6-94E4-05FDD8CFF1FC}.Release|Win32.Build.0 = Release|Win32 {9FE40739-2ADC-4241-8182-20E1B3C661A7}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FE40739-2ADC-4241-8182-20E1B3C661A7}.Debug|Win32.Build.0 = Debug|Win32 {9FE40739-2ADC-4241-8182-20E1B3C661A7}.Release|Win32.ActiveCfg = Release|Win32 - {9FE40739-2ADC-4241-8182-20E1B3C661A7}.Release|Win32.Build.0 = Release|Win32 {1C94A897-DA4F-45B2-B8A6-B97AD837828E}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C94A897-DA4F-45B2-B8A6-B97AD837828E}.Debug|Win32.Build.0 = Debug|Win32 {1C94A897-DA4F-45B2-B8A6-B97AD837828E}.Release|Win32.ActiveCfg = Release|Win32 {1C94A897-DA4F-45B2-B8A6-B97AD837828E}.Release|Win32.Build.0 = Release|Win32 {CF807B93-2860-41DF-A4D2-5B92B52DFD96}.Debug|Win32.ActiveCfg = Debug|Win32 - {CF807B93-2860-41DF-A4D2-5B92B52DFD96}.Debug|Win32.Build.0 = Debug|Win32 {CF807B93-2860-41DF-A4D2-5B92B52DFD96}.Release|Win32.ActiveCfg = Release|Win32 {CF807B93-2860-41DF-A4D2-5B92B52DFD96}.Release|Win32.Build.0 = Release|Win32 + {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1}.Debug|Win32.Build.0 = Debug|Win32 + {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1}.Release|Win32.ActiveCfg = Release|Win32 + {C8D44F9A-B5DF-4A94-AA92-47D9945FD4F1}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/programs/media/ac97snd/trunk/ac97wav.c b/programs/media/ac97snd/trunk/ac97wav.c index dc74bb4a56..68c3df44dc 100644 --- a/programs/media/ac97snd/trunk/ac97wav.c +++ b/programs/media/ac97snd/trunk/ac97wav.c @@ -14,12 +14,12 @@ // GNU General Public License for more details. #include "kolibri.h" -//#include "stdio.h" #include "string.h" #include "ac97wav.h" #include "mpg/mpg123.h" +#include "sound.h" -#define MP3_ERROR_OUT_OF_BUFFER 5 +#define MP3_ERROR_OUT_OF_BUFFER 5 int m_last_error; void thread_proc(); @@ -29,37 +29,22 @@ int stream_read_raw(struct reader *rd,unsigned char *buf, int size); char *fname; -//extern char __path; - -/***** for debug output only -char formats[37][12] = -{ "PCM_ALL", - "PCM_2_16_48","PCM_1_16_48","PCM_2_16_44","PCM_1_16_44", - "PCM_2_16_32","PCM_1_16_32","PCM_2_16_24","PCM_1_16_24", - "PCM_2_16_22","PCM_1_16_22","PCM_2_16_16","PCM_1_16_16", - "PCM_2_16_12","PCM_1_16_12","PCM_2_16_11","PCM_1_16_11", - "PCM_2_16_8","PCM_1_16_8","PCM_2_8_48","PCM_1_8_48", - "PCM_2_8_44","PCM_1_8_44","PCM_2_8_32","PCM_1_8_32", - "PCM_2_8_24","PCM_1_8_24","PCM_2_8_22","PCM_1_8_22", - "PCM_2_8_16","PCM_1_8_16","PCM_2_8_12","PCM_1_8_12", - "PCM_2_8_11","PCM_1_8_11","PCM_2_8_8","PCM_1_8_8" -}; -*******/ -//int freqs[9] = {44100,48000,32000,22050,24000,16000 ,11025 ,12000 ,8000}; - struct reader rd; struct frame fr; DWORD hDrv; DWORD hSound; -DWORD hBuff; -DWORD event[2]; +SNDBUF hBuff; CTRL_INFO info; FILEINFO fileinfo; int m_vol; +int l_vol=-500; +int r_vol=-500; +int pan =0; + DWORD status; DWORD offset; DWORD first_sync; @@ -74,9 +59,7 @@ int outsize; int outremain; int totalout; int done; - -char srv_name[] = "INFINITY"; -char srv_intel[] = "SOUND"; + char header[] = "AC97 MP3 player"; char buttons_text[]=" Play Stop << >> Vol- Vol+"; @@ -111,10 +94,10 @@ void draw_window() void draw_progress_bar() { DWORD x; - x = 286.0f * (float)(rd.filepos-rd.strremain)/(float)fileinfo.size; + x = 287.0f * (float)(rd.filepos-rd.strremain)/(float)fileinfo.size; if(x==0) return; draw_bar(7,41,x,11,0xA0A0A0); - draw_bar(x+7,41,286-x,11,0x404040); + draw_bar(x+7,41,287-x,11,0x404040); }; void debug_out_str(char* str) @@ -131,7 +114,9 @@ int main(int argc, char *argv[]) //int argc, char *argv[]) char *thread_stack; DWORD r_bytes; int retval; - + int err; + int ver; + fname = argv[1]; //debug_out_str(fname); @@ -139,20 +124,19 @@ int main(int argc, char *argv[]) //int argc, char *argv[]) if(get_fileinfo(fname, &fileinfo)==FILE_NOT_FOUND) return 0; - if((hDrv=GetService(srv_intel))==0) - return 0; - - if ((hSound=GetService(srv_name))==0) + + if(err = InitSound(&ver)) + { + debug_out_str("Sound service not installed\n\r"); return 0; - - GetDevInfo(hDrv, &info); - - m_vol = GetMasterVol(hDrv,&m_vol); - if (m_vol > 85) - { m_vol = 85; - SetMasterVol(hDrv,m_vol); - }; - + } + + if( ver != SOUND_VERSION) + { + debug_out_str("Sound service version mismatch\n\r"); + return 0; + } + testbuff = UserAlloc(4096); get_fileinfo(fname, &fileinfo); offset = 0; @@ -174,23 +158,28 @@ int main(int argc, char *argv[]) //int argc, char *argv[]) touch(outbuf, 32768); } else - { fmt = test_mp3(testbuff); - if(fmt ==0) return 0; - snd_play = &play_mp3; - - outremain = 0x40000 ; - outbuf = UserAlloc(outremain); - touch(outbuf, outremain); - make_decode_tables(32767); - init_layer2(); - init_layer3(32); - fr.single = -1; + { fmt = test_mp3(testbuff); + if(fmt ==0) return 0; + snd_play = &play_mp3; + + outremain = 0x40000 ; + outbuf = UserAlloc(outremain); + touch(outbuf, outremain); + make_decode_tables(32767); + init_layer2(); + init_layer3(32); + fr.single = -1; }; status = ST_PLAY; - hBuff = CreateBuffer(hSound,fmt); - if (hBuff == 0) return 0; + if (err = CreateBuffer(fmt,0, &hBuff)) + { + debug_out_str("create buffer return error\n\r"); + return 0; + } + + SetVolume(hBuff,l_vol,r_vol); thread_stack = UserAlloc(4096); thread_stack+=4092; @@ -204,13 +193,13 @@ int main(int argc, char *argv[]) //int argc, char *argv[]) continue; case ST_STOP: - StopBuffer(hSound, hBuff); + StopBuffer(hBuff); status = ST_DONE; continue; case ST_EXIT: - StopBuffer(hSound, hBuff); - DestroyBuffer(hSound, hBuff); + StopBuffer(hBuff); + DestroyBuffer(hBuff); return 0; }; }; @@ -254,12 +243,6 @@ DWORD test_mp3(char *buf) return test_wav(&whdr); }; -void wave_out(char* buff) -{ DWORD ev[6]; - - GetNotify(&ev[0]); - SetBuffer(hSound,hBuff,buff,ev[1],0x8000); -} void play_mp3() { char *outPtr; @@ -277,11 +260,7 @@ void play_mp3() outremain=0x40000; memset(outbuf,0,0x40000); - set_reader(&rd, 0); //;first_sync); - SetBuffer(hSound,hBuff,outbuf,0,0x8000); - SetBuffer(hSound,hBuff,outbuf,0x8000,0x8000); - PlayBuffer(hSound, hBuff); while(1) { if(status!=ST_PLAY) @@ -302,13 +281,14 @@ void play_mp3() }; if(done) - { if(totalout < 32768) - { memset(outPtr,0,32768-totalout); - totalout = 32768; + { if(totalout < 4096) + { memset(outPtr,0,4096-totalout); + totalout = 4096; }; - }; - if(totalout < 32768) - continue; + } + else + if(totalout < 8192) + continue; /* _asm { push edx @@ -321,13 +301,22 @@ void play_mp3() }; */ outPtr = outbuf; - while (totalout > 32768) - { wave_out(outPtr); - totalout-=0x8000; - outPtr+=0x8000; - outremain+=0x8000; + while (totalout >= 4096) + { + + WaveOut(hBuff,outPtr,4096); + if(status!=ST_PLAY) + { if(status != ST_EXIT) + status = ST_STOP; + return; + }; + totalout-=4096; + outPtr+=4096; + outremain+=4096; }; - if(done) break; + if(done) + break; + memmove(outbuf,outPtr, totalout); outPtr = outbuf+totalout; } @@ -337,23 +326,9 @@ void play_mp3() }; void play_wave() -{ DWORD ev[6]; - int retval; - int remain; - int i; +{ int retval; -// offset = 44; - -// read_file (fname,outbuf,offset,32*1024,0); -// offset+=32*1024; set_reader(&rd,44); - stream_read_raw(&rd,outbuf,32768); - SetBuffer(hSound,hBuff,outbuf,0,0x8000); - stream_read_raw(&rd,outbuf,32768); - SetBuffer(hSound,hBuff,outbuf,0x8000,0x8000); - - PlayBuffer(hSound, hBuff); - retval = 0; while(1) { @@ -364,7 +339,7 @@ void play_wave() { done = 1; break; }; - wave_out(outbuf); + WaveOut(hBuff,outbuf,32768); }; if(status != ST_EXIT) @@ -373,7 +348,7 @@ void play_wave() void snd_stop() { - StopBuffer(hSound, hBuff); + StopBuffer(hBuff); }; void thread_proc() @@ -381,17 +356,21 @@ void thread_proc() int pos; int key; - _asm { fninit }; - + _asm + { + mov eax, 66 + mov ebx, 1 + mov ecx, 1 + int 0x40 + }; draw_window(); while(1) { if(status==ST_PLAY) - { draw_progress_bar(); - evnt = wait_for_event(80); - // debug_out_str("BIG ERROR...\x0D\x0A\x00"); - } + { draw_progress_bar(); + evnt = wait_for_event(80); + } else evnt = wait_for_event_infinite(); @@ -402,24 +381,50 @@ void thread_proc() break; case EV_KEY: - key = get_key(); - if(key==27) - { status = ST_EXIT; - exit(); - }; - if((key==45)||key==54) - { if(m_vol > 0) - { m_vol--; - SetMasterVol(hDrv,m_vol); - }; - break; - }; - if((key==61)||key==56) - { if(m_vol < 90) - { m_vol++; - SetMasterVol(hDrv,m_vol); - }; - }; + if(!get_key(&key)) + { + + switch(key) + { case 0xE0: + case 0xE1: + break; + default: + switch (key) + { + case 0x01: //Esc + status = ST_EXIT; + exit(); + break; + + case 0x47: //Home + if(l_vol < 0) + { l_vol+=100; + r_vol+=100; + SetVolume(hBuff,l_vol,r_vol); + }; + break; + case 0x4F: //End + if(l_vol > -10000) + { l_vol-=100; + r_vol-=100; + SetVolume(hBuff,l_vol,r_vol); + }; + break; + case 0x53: + if(pan > -10000) + { pan -=100; + SetPan(hBuff,pan); + }; + break; + case 0x51: + if(pan < 10000) + { pan +=100; + SetPan(hBuff,pan); + }; + break; + } + }; + }; break; case EV_BUTTON: @@ -439,24 +444,25 @@ void thread_proc() // case 0x12: // case 0x13: case 0x14: - if(m_vol > 0) - { m_vol--; - SetMasterVol(hDrv,m_vol); - }; - break; + if(l_vol > -10000) + { + l_vol-=100; + r_vol-=100; + SetVolume(hBuff,l_vol,r_vol); + }; + break; case 0x15: - if(m_vol < 90) - { m_vol++; - SetMasterVol(hDrv,m_vol); - }; - break; + if(l_vol < 0) + { l_vol+=100; + r_vol+=100; + SetVolume(hBuff,l_vol,r_vol); + }; + break; case 0x30: if(status==ST_DONE) break; -// if(snd_play == play_mp3) -// continue; pos = (GetMousePos(REL_WINDOW)>>16)-7; offset = ((fileinfo.size-44)/286*pos+44)&0xFFFFFFFC; set_reader(&rd, offset); @@ -467,157 +473,6 @@ void thread_proc() }; }; -DWORD test_wav(WAVEHEADER *hdr) -{ - if(hdr->riff_id != 0x46464952) - return 0; - - if(hdr->riff_format != 0x45564157) - return 0; - - if (hdr->wFormatTag != 0x01) - return 0; - - switch(hdr->nSamplesPerSec) - { case 48000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_48; - else - return PCM_1_8_48; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_48; - else - return PCM_2_8_48; - }; - - case 44100: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_44; - else - return PCM_1_8_44; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_44; - else - return PCM_2_8_44; - }; - - case 32000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_32; - else - return PCM_1_8_32; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_32; - else - return PCM_2_8_32; - }; - - case 24000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_24; - else - return PCM_1_8_24; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_24; - else - return PCM_2_8_24; - }; - - case 22050: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_22; - else - return PCM_1_8_22; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_22; - else - return PCM_2_8_22; - }; - - case 16000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_16; - else - return PCM_1_8_16; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_16; - else - return PCM_2_8_16; - }; - - case 12000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_12; - else - return PCM_1_8_12; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_12; - else - return PCM_2_8_12; - }; - - case 11025: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_11; - else - return PCM_1_8_11; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_11; - else - return PCM_2_8_11; - }; - - case 8000: - switch (hdr->nChannels) - { case 1: - if(hdr->wBitsPerSample == 16) - return PCM_1_16_8; - else - return PCM_1_8_8; - - case 2: - if(hdr->wBitsPerSample == 16) - return PCM_2_16_8; - else - return PCM_2_8_8; - }; - default: - return 0; - }; -}; - void delay (int val) { _asm @@ -639,8 +494,7 @@ int wait_for_event(int time) }; int wait_for_event_infinite() -{ void *a; - int retval; +{ int retval; _asm { mov eax,10 int 0x40 diff --git a/programs/media/ac97snd/trunk/ac97wav.h b/programs/media/ac97snd/trunk/ac97wav.h index 2e179815ca..2d4379c4ce 100644 --- a/programs/media/ac97snd/trunk/ac97wav.h +++ b/programs/media/ac97snd/trunk/ac97wav.h @@ -14,43 +14,6 @@ // GNU General Public License for more details. -#define PCM_2_16_48 1 -#define PCM_1_16_48 2 -#define PCM_2_16_44 3 -#define PCM_1_16_44 4 -#define PCM_2_16_32 5 -#define PCM_1_16_32 6 -#define PCM_2_16_24 7 -#define PCM_1_16_24 8 -#define PCM_2_16_22 9 -#define PCM_1_16_22 10 -#define PCM_2_16_16 11 -#define PCM_1_16_16 12 -#define PCM_2_16_12 13 -#define PCM_1_16_12 14 -#define PCM_2_16_11 15 -#define PCM_1_16_11 16 -#define PCM_2_16_8 17 -#define PCM_1_16_8 18 -#define PCM_2_8_48 19 -#define PCM_1_8_48 20 -#define PCM_2_8_44 21 -#define PCM_1_8_44 22 -#define PCM_2_8_32 23 -#define PCM_1_8_32 24 -#define PCM_2_8_24 25 -#define PCM_1_8_24 26 -#define PCM_2_8_22 27 -#define PCM_1_8_22 28 -#define PCM_2_8_16 29 -#define PCM_1_8_16 30 -#define PCM_2_8_12 31 -#define PCM_1_8_12 32 -#define PCM_2_8_11 33 -#define PCM_1_8_11 34 -#define PCM_2_8_8 35 -#define PCM_1_8_8 36 - #define ST_DONE 0x0 #define ST_PLAY 0x1 #define ST_EXIT 0x2 @@ -74,7 +37,6 @@ typedef struct DWORD data_size; } WAVEHEADER; -DWORD test_wav(WAVEHEADER *hdr); DWORD test_mp3(char *buf); //void (*snd_play)(); diff --git a/programs/media/ac97snd/trunk/k_lib.asm b/programs/media/ac97snd/trunk/k_lib.asm index 1decdc6e55..6e12be0897 100644 --- a/programs/media/ac97snd/trunk/k_lib.asm +++ b/programs/media/ac97snd/trunk/k_lib.asm @@ -4,24 +4,13 @@ include "proc32.inc" section '.text' code readable executable -public _GetService@4 -public _GetDevInfo@8 -public _GetMasterVol@8 -public _SetMasterVol@8 -public _CreateBuffer@8 -public _DestroyBuffer@8 -public _SetBuffer@20 -public _PlayBuffer@8 -public _StopBuffer@8 - public _InitHeap@4 public _UserAlloc@4 -public _GetNotify@4 public _CreateThread@8 public _GetMousePos@4 public _get_fileinfo@8 public _read_file@20 -public _get_key +public _get_key@4 public _get_button_id public _DrawWindow@36 public _make_button@24 @@ -42,34 +31,6 @@ struc FILEIO .name dd ? }; -struc CTRL_INFO -{ .pci_cmd dd ? - .irq dd ? - .glob_cntrl dd ? - .glob_sta dd ? - .codec_io_base dd ? - .ctrl_io_base dd ? - .codec_mem_base dd ? - .ctrl_mem_base dd ? - .codec_id dd ? -} -CTRL_INFO_SIZE equ 9*4 - - -SND_CREATE_DEV equ 1 -SND_CREATE_BUFF equ 2 -SND_PLAY equ 3 -SND_STOP equ 4 -SND_SETBUFF equ 5 -SND_DESTROY_BUFF equ 6 - -DEV_SET_BUFF equ 4 -DEV_NOTIFY equ 5 -DEV_SET_MASTERVOL equ 6 -DEV_GET_MASTERVOL equ 7 -DEV_GET_INFO equ 8 - - align 4 proc _get_button_id mov eax,17 @@ -145,13 +106,22 @@ proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\ endp align 4 -proc _get_key +proc _get_key@4 stdcall, key:dword + push ebx + push ecx mov eax, 2 int 0x40 - shr eax, 8 + mov ebx, [key] + mov ecx, eax + shr ecx, 8 + mov [ebx], ecx + movzx eax, al + pop ecx + pop ebx ret endp + align 4 proc _InitHeap@4 stdcall, heap_size:dword push ebx @@ -174,28 +144,6 @@ proc _UserAlloc@4 stdcall, alloc_size:dword ret endp -;align 4 -;proc _GetNotify@4 stdcall, p_ev:dword -; push ebx -; mov eax, 68 -; mov ebx, 14 -; mov ecx, [p_ev] -; int 0x40 -; pop ebx -; ret -;endp - -align 4 -proc _GetNotify@4 stdcall, p_ev:dword - push ebx - mov eax, 68 - mov ebx, 14 - mov ecx, [p_ev] - int 0x40 - pop ebx - ret -endp - align 4 proc _CreateThread@8 stdcall, fn:dword, p_stack:dword push ebx @@ -213,264 +161,12 @@ proc _GetMousePos@4 stdcall,rel_type:dword push ebx mov eax, 37 mov ebx, [rel_type] - int 0x40 - pop ebx - ret -endp - -align 4 -proc CallServiceEx stdcall, ioctl:dword - push ebx - mov eax, 68 - mov ebx, 17 - mov ecx, [ioctl] - int 0x40 - pop ebx - ret -endp - -align 4 -proc _GetService@4 stdcall, name:dword - push ebx - mov eax, 68 - mov ebx, 16 - mov ecx, [name] - int 0x40 - pop ebx - ret -endp - -align 4 -proc _GetDevInfo@8 stdcall, hSrv:dword, p_info:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSrv] - xor ebx, ebx - mov ecx, [p_info] - - mov [handle], eax - mov [io_code], DEV_GET_INFO - mov [input], ebx - mov [inp_size], ebx - mov [output], ecx - mov [out_size], CTRL_INFO_SIZE - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _GetMasterVol@8 stdcall, hSrv:dword,pvol:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSrv] - mov ecx, [pvol] - xor ebx, ebx - mov [handle], eax - mov [io_code], DEV_GET_MASTERVOL - mov [input], ebx - mov [inp_size], ebx - mov [output], ecx - mov [out_size], 4 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _SetMasterVol@8 stdcall,hSrv:dword,vol:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSrv] - lea ecx, [vol] - xor ebx, ebx - - mov [handle], eax - mov [io_code], DEV_SET_MASTERVOL - mov [input], ecx - mov [inp_size], 4 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _CreateBuffer@8 stdcall, hSound:dword,format:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSound] - lea ecx, [format] - xor ebx, ebx - - mov [handle], eax - mov [io_code], SND_CREATE_BUFF - mov [input], ecx - mov [inp_size], 4 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _DestroyBuffer@8 stdcall, hSound:dword, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSound] - lea ecx, [str] - xor ebx, ebx - - mov [handle], eax - mov [io_code], SND_DESTROY_BUFF - mov [input], ecx - mov [inp_size], 4 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _SetBuffer@20 stdcall,hSound:dword, str:dword, src:dword, offs:dword, size:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSound] - lea ecx, [str] - xor ebx, ebx - - mov [handle], eax - mov [io_code], SND_SETBUFF - mov [input], ecx - mov [inp_size], 16 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _PlayBuffer@8 stdcall, hSound:dword, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSound] - lea ecx, [str] - xor ebx, ebx - - mov [handle], eax - mov [io_code], SND_PLAY - mov [input], ecx - mov [inp_size], 4 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax - pop ebx - ret -endp - -align 4 -proc _StopBuffer@8 stdcall, hSound:dword, str:dword - locals - handle dd ? - io_code dd ? - input dd ? - inp_size dd ? - output dd ? - out_size dd ? - endl - - push ebx - mov eax, [hSound] - lea ecx, [str] - xor ebx, ebx - - mov [handle], eax - mov [io_code], SND_STOP - mov [input], ecx - mov [inp_size], 4 - mov [output], ebx - mov [out_size], 0 - - lea eax, [handle] - stdcall CallServiceEx, eax + int 0x40 pop ebx ret endp + align 4 proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\ workcolor:dword, style:dword, captioncolor:dword,\ diff --git a/programs/media/ac97snd/trunk/kolibri.h b/programs/media/ac97snd/trunk/kolibri.h index 6f28bbe2a6..4685d26c3d 100644 --- a/programs/media/ac97snd/trunk/kolibri.h +++ b/programs/media/ac97snd/trunk/kolibri.h @@ -1,17 +1,8 @@ -// -// This file is part of the AC97 mp3 player. -// (C) copyright Serge 2006 -// email: infinity_sound@mail.ru -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. + +#ifdef __cplusplus +extern "C" +{ +#endif #define FONT0 0x00000000 #define FONT1 0x10000000 @@ -31,9 +22,9 @@ #define FILE_NOT_FOUND 5 #define FILE_EOF 6 - typedef unsigned int DWORD; typedef unsigned short int WORD; +typedef unsigned int size_t; typedef struct { DWORD pci_cmd; @@ -70,22 +61,11 @@ typedef struct DWORD size_high; } FILEINFO; -void _stdcall InitHeap(int heap_size); -void* _stdcall UserAlloc(int size); -void _stdcall GetNotify(DWORD *event); +void _stdcall InitHeap(size_t heap_size); +void* _stdcall UserAlloc(size_t size); void _stdcall CreateThread(void *fn, char *p_stack); DWORD _stdcall GetMousePos(DWORD rel_type); -int _stdcall GetService(char *srv_name); -void _stdcall GetDevInfo(DWORD hSrv,CTRL_INFO *pInfo); -int _stdcall GetMasterVol(DWORD hSrv,int* vol); -int _stdcall SetMasterVol(DWORD hSrv, int vol); -DWORD _stdcall CreateBuffer(DWORD hSrv, DWORD format); -int _stdcall DestroyBuffer(DWORD hSrv, DWORD hBuff); -int _stdcall SetBuffer(DWORD hSrv, DWORD hBuff,char* buff, - DWORD offs, int size); -int _stdcall PlayBuffer(DWORD hSrv, DWORD hBuff); -int _stdcall StopBuffer(DWORD hSrv, DWORD hBuff); void _stdcall debug_out_hex(DWORD val); void debug_out_str(char* str); @@ -94,7 +74,7 @@ int _stdcall get_fileinfo(char *name,FILEINFO* pinfo); int _stdcall read_file (char *name,char*buff,int offset,int count,int *reads); void exit(); -int _cdecl get_key(void); +int _stdcall get_key(int *key); int _cdecl get_button_id(); void delay(int val); int wait_for_event(int time); @@ -108,3 +88,7 @@ void _stdcall make_button(int x, int y, int xsize, int ysize, int id, int color) void _stdcall draw_bar(int x, int y, int xsize, int ysize, int color); void _stdcall write_text(int x,int y,int color,char* text,int len); +#ifdef __cplusplus +extern "C" +} +#endif