Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

Как вывести потоковый звук? 


IgorBIK   (2001-12-09 19:28) [0]

Когда вывожу звук наблюдаются щелчки даже при низкой загрузке процессора (10%). Я делаю так:
function CPCMWav(Frec,Bit,Can:integer):TWAVEFORMATEX;
begin
result.wFormatTag:=WAVE_FORMAT_PCM;
result.cbSize:=0;
result.nChannels:=Can;
result.wBitsPerSample:=Bit;
result.nSamplesPerSec:=Frec;
result.nBlockAlign:=(bit div 8)*can;
result.nAvgBytesPerSec:=result.nBlockAlign*Frec;
end;

procedure WOutProc(h:HWAVEOUT;Msg:UINT;Inst,par1,par2:Dword);stdcall;
var pp:^WAVEHDR;
i:integer;
o:Pwordarray;
begin
if (msg=WOM_DONE) and (not Close) then
begin
bn:=abs(bn-1);
if bn=0 then waveOutWrite(Devout,@bf1,sizeof(bf1)) else waveOutWrite(Devout,@bf2,sizeof(bf2));
readd:=True;
//Здесь был кусок кода записывающий звук в буфер
end;
end;

procedure DeWave;//Закрытие звукового устройства
begin
close:=True;
waveOutReset(DevOut);
waveOutUnprepareHeader(DevOut,@bf1,sizeof(bf1));
waveOutUnprepareHeader(DevOut,@bf2,sizeof(bf2));
waveOutClose(DevOut);
end;

procedure Err(i:integer);
var r:array[0..MAXERRORLENGTH-1]of char;
p:PChar;
begin
p:=@r;
waveOutGetErrorText(i,p,MAXERRORLENGTH-1);
debugev(p);
end;

//Инициализация звука
function CreateWOut(Frec,Bit,Can:integer):HWAVEOUT;
var res:HWAVEOUT;
WF:TWAVEFORMATEX;
ff:DWord;
len,i:integer;
begin
readd:=False;
Close:=False;
Wf:=CPCMWav(Frec,Bit,Can);
len:=wf.nAvgBytesPerSec div 8;
ff:=CALLBACK_FUNCTION;
Err(waveOutOpen(@res,WAVE_MAPPER,@Wf,integer(@WOutProc),0,ff));
DevOut:=res;
result:=res;
bf1.lpData:=@buf1;
bf1.dwFlags:=0;
bf1.dwBufferLength:=len;
Err(waveOutPrepareHeader(res,@bf1,sizeof(bf1)));
bf1.dwFlags:=(bf1.dwFlags or WHDR_BEGINLOOP)-(bf1.dwFlags and WHDR_ENDLOOP);
bf1.dwLoops:=0;
waveOutWrite(res,@bf1,sizeof(bf1));
bf2.lpData:=@buf2;
bf2.dwFlags:=0;
bf2.dwBufferLength:=len;
Err(waveOutPrepareHeader(res,@bf2,sizeof(bf2)));
bf2.dwFlags:=(bf2.dwFlags or WHDR_ENDLOOP)-(bf2.dwFlags and WHDR_BEGINLOOP);
waveOutWrite(res,@bf2,sizeof(bf2));
bn:=1;
end;

Что я делаю не так или как делать по другому?



MJH   (2001-12-10 09:55) [1]

//Здесь был кусок кода записывающий звук в буфер
вот здесь и происходит щелчок.
кста, не хочешь потренироваться с директ саундом? :)
или давай по мылу соединимся, а то тоже есть похожая траблса, только чуть-чуть в другом. мож и решим её вместе. а?




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.014 c
1-18860           Анонимщик             2002-01-21 12:01  2002.02.07  
Один дюйм - это точно 2,54 сантиметра или нет?


1-18872           AndrewK               2002-01-23 09:54  2002.02.07  
Как правильно создать и уничтожить форму


6-18946           ReY                   2001-11-13 11:17  2002.02.07  
Как программно расшарить диск.... и обратно.


6-18931           krimer                2001-11-10 17:52  2002.02.07  
pomoghite gde tut oshibka


6-18929           Aleksey2001           2001-11-16 09:17  2002.02.07  
Интересует работа в delphi с сетями