Синтез звука

  • Автор темы SteriuM
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

SteriuM

#1
Здравствуйте!
Скажите пожалуйста как заставить зуковую карту издать желаемый звук на аудио выход? Если у вас имеется код - покажите пожалуйста!!!!
Интенсивно благодарю!!! :)
 
Z

zubr

#2
Вот, когда то делал:
Код:
procedure proc_zvyk;
begin
repeat
If flag_zvyk then
break;
if WaitForSingleObject(hev_zvyk, INFINITE)=WAIT_OBJECT_0 then
begin
ResetEvent(hev_zvyk);
waveOutWrite(hzv, @hider, SizeOf(hider));
waveOutWrite(hzv, @hider1, SizeOf(hider1));
end;
until False;
If hzv<>0 then
begin
waveOutReset(hzv);
waveOutUnPrepareHeader(hzv, @hider, SizeOf(hider));
waveOutUnPrepareHeader(hzv, @hider1, SizeOf(hider1));
waveOutClose(hzv);
CloseHandle(hev_zvyk);
hev_zvyk:=0;
hzv:=0;
end;
end;

procedure Initializ_zvyk;
var
res:TResourceStream;
ht, ind:cardinal;
begin
flag_zvyk:=False;
format.wFormatTag:=WAVE_FORMAT_PCM;
format.nChannels:=2;
format.nSamplesPerSec:=44100;
format.nAvgBytesPerSec:=176400;
format.nBlockAlign:=4;
format.wBitsPerSample:=16;
format.cbSize:=0;
hev_zvyk:=CreateEvent(nil, True, False, 'zvyk');
ResetEvent(hev_zvyk);
waveOutOpen(@hzv, WAVE_MAPPER, @format, hev_zvyk, 0, CALLBACK_EVENT);
ResetEvent(hev_zvyk);
res:=TResourceStream.Create(HINSTANCE, 'noise', 'WAWFILE');
res.ReadBuffer(buf, 176400);
res.Free;
hider.lpData:=@buf;
hider.dwBufferLength:=176400;
hider1.lpData:=@buf;
hider1.dwBufferLength:=176400;
waveOutPrepareHeader(hzv, @hider, SizeOf(hider));
waveOutPrepareHeader(hzv, @hider1, SizeOf(hider1));
waveOutPause(hzv);
ht:=CreateThread(nil, 0, @proc_zvyk, nil, 0, ind);
CloseHandle(ht);
SetEvent(hev_zvyk);
end;

procedure Close_zvyk;
begin
If hzv<>0 then
waveOutPause(hzv);
If hev_zvyk<>0 then
SetEvent(hev_zvyk);
flag_zvyk:=True;
end;
 
Статус
Закрыто для дальнейших ответов.