Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли в DELPHI создать генератор звука [D5]


pupsik ©   (2003-11-25 15:39:00) 

Можно ли в DELPHI создать генератор звука с выводом его на колонки,через звуковую карту.
Просьба хотя бы ссылочку на образец кода!
Например частота-1000 гц, громкость (-10 дб) и т.п.
Спасибо.


Evgeny V   (2003-11-26 05:48:00) [1]

#include
#pragma hdrstop

#include "Unit1.h"
#include
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWAVEOUT sound_out_handle;
WAVEHDR   hdr[3];
WAVEFORMATEX wfx;
short int buff[3][4000];
bool st,ends;
void  CALLBACK modem_callback(DWORD hw, UINT uMsg, DWORD dwinstance, DWORD dwParam1, DWORD dwParam2);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
st=false;
ends=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int i,j,l;
double k;
MMRESULT p;
       wfx.wFormatTag  = WAVE_FORMAT_PCM;
wfx.nChannels  = 1;
wfx.nSamplesPerSec = 8000;
wfx.wBitsPerSample = 16;
wfx.nBlockAlign  = 2;
       wfx.nAvgBytesPerSec = 8000*2;
wfx.cbSize   = 0;

p=waveOutOpen((LPHWAVEOUT)&sound_out_handle,WAVE_MAPPER,(LPWAVEFORMATEX)&wfx.wFormatTag,(DWORD)&modem_callback,0,CALLBAC K_FUNCTION);
// делаю три буфера по пол секунды, которые заполняю сигналом
for (i=0;iProcessMessages();
Sleep(1500);// разрешаю закончить проигрыш текущих
//буферов, делал по другому, но лень, точнее работы много,
//для примера пойдет и так, на самом деле для
//последнего буфера в dwUser можно положить признак того,
// что он последний, и по этому признаку в WOM_DONE
//делать Reset и закрывать устройство, или слать PostMessage
waveOutReset(sound_out_handle);
waveOutClose(sound_out_handle);
Button1->Enabled=true;
}


Crocodile   (2003-11-25 17:09:00) [2]

For me to, if you please


S@shka   (2003-11-25 15:57:00) [3]

Можно :)
ПО факту ссылки на мыло отправлю исходники


Наверх

Титульная страница Поиск, карта сайта Написать письмо