Форум: "Media";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Внизвывод синуса,звука на выход звуковой карты Найти похожие ветки
← →
Василич (2003-12-23 11:14) [0]Как вывести синус, т.е. звук определЁнной частоты на выход звуковой карты?
Помогите, Пожалуйста!!!!!!
← →
Digitman © (2003-12-23 12:28) [1]см. хэлп "Microsoft Multimedia Programmer"s Reference", топик - "WaveOut"
← →
Evgeny V © (2003-12-23 14:28) [2]Простой черновой пример
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h>
#include <mmsystem.h>
//---------------------------------------------------------------------------
#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);
//Загрузка синуса 400 Гц
for (i=0;i<3;i++)
{
for (j=0;j<4000;j++)
{
k=sin(2.0*M_PI*(double)j*400.0/8000.0);
l=(int)(k*32000.0);
buff[i][j]=(short int)l;
}
hdr[i].lpData = (char *)buff[i];
hdr[i].dwFlags = 0;
hdr[i].dwUser = i; // Save the identity
hdr[i].dwBufferLength = 8000;
hdr[i].dwBytesRecorded = 0;
hdr[i].dwLoops = 0;
waveOutPrepareHeader(sound_out_handle,&hdr[i],sizeof(WAVEHDR));
waveOutWrite(sound_out_handle,&hdr[i],sizeof(WAVEHDR));
}
st=true;
ends=false;
waveOutRestart(sound_out_handle);
Button1->Enabled=false;
}
//---------------------------------------------------------------------------
void CALLBACK modem_callback(DWORD hw, UINT uMsg, DWORD dwinstance, DWORD dwParam1, DWORD dwParam2)
{
//TODO: Add your source code here
WAVEHDR *phdr;
phdr = (WAVEHDR *)dwParam1;
switch(uMsg)
{
case WOM_OPEN:
break;
case WOM_DONE:
if(phdr != NULL)
{
// Signal ready
waveOutUnprepareHeader (sound_out_handle, phdr, sizeof(WAVEHDR));
}
if(st==false)
{
ends=true;
break;
}
else
{
waveOutPrepareHeader(sound_out_handle,phdr,sizeof(WAVEHDR));
waveOutWrite(sound_out_handle,phdr,sizeof(WAVEHDR));
}
break;
default:
break;
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
st=false;
while (!ends)
Application->ProcessMessages();
Sleep(1500);// разрешаю закончить проигрыш текущих буферов,
// в рабочей проге лучше не так делать
waveOutReset(sound_out_handle);
waveOutClose(sound_out_handle);
Button1->Enabled=true;
}
← →
Василич (2003-12-25 00:54) [3]Ура! нашел исходники! Генератор и осциллограф звука на delphi, Winapi.
Кому надо, пишите на мыло From_my@mail.ru
Всем Спасибо!!!!!!!!!!!!!!!!!!!!!
← →
shluz © (2003-12-26 10:13) [4]Удалено модератором
Примечание: Личная переписка
← →
RusLand (2003-12-26 15:31) [5]2 Василич
А ссылочку, можно было бы здесь разместить.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c