updated soundlib, DOOM, ac97snd

git-svn-id: svn://kolibrios.org@376 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2007-02-26 12:12:22 +00:00
parent b07dfce332
commit 6cf25c8bd8
23 changed files with 496 additions and 1090 deletions

View File

@ -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_
#endif //_SOUND_H_

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
ret 12

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
// };
}

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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)();

View File

@ -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,\

View File

@ -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