Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

вывод синуса,звука на выход звуковой карты   Найти похожие ветки 

 
Василич   (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 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
7-1076403469
Тфьу
2004-02-10 11:57
2004.04.18
Как создать свою кнопку в тулбаре виндоуса (Не трее, а тулбаре!)


1-1080505135
Diver
2004-03-29 00:18
2004.04.18
ComboBox


3-1079678179
Max1
2004-03-19 09:36
2004.04.18
Запустить макрос


9-1066132032
Sullivan
2003-10-14 15:47
2004.04.18
Помогите ламеру


3-1079705990
Death
2004-03-19 17:19
2004.04.18
Изменение размера поля в таблице DBF