Конференция "Media" » Вывод генерированного звука (mmsystem) [D7, WinXP]
 
  • grigor (18.11.10 23:51) [0]
    Есть у кого пример генератора звука из заданной частоты?
  • Jeer © (19.11.10 09:40) [1]
    Т.е. есть частота, а из нее надо сделать генератор звука ? :)
  • clickmaker © (19.11.10 14:10) [2]
    Beep()
  • Сергей М. © (19.11.10 15:32) [3]
  • grigor (19.11.10 16:26) [4]
    2Сергей М.
    Спасибо!
  • ~AQUARIUS~ (24.11.10 21:28) [5]

    > http://raxp.radioliga.com/cnt/s.php?p=v1.pdf


    Там есть откровенный ляп - в waveInProc2 идет обращение к форме; это может привести (а у меня поначалу и приводило, причем немедленно после запуска моих приложений-экспериментов) к дэдлоку. В функции обратного вызова WaveInProc можно обращатся только к очень ограниченному набору функций EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, и timeSetEvent ( http://msdn.microsoft.com/en-us/library/dd743869(VS.85).aspx ) Кроме того, форма получаемых сигналов  оставляет желать лучшего. Как на виртуальный генератор - двойка с минусом, как пример работы со звуком - тройка
  • Сергей М. © (30.11.10 20:25) [6]

    > ~AQUARIUS~   (24.11.10 21:28) [5]


    > откровенный ляп - в waveInProc2 идет обращение к форме


    Эта хрень там никакого отношения к собственно генератору не имеет.
  • Eraser © (02.12.10 01:37) [7]
    > [5] ~AQUARIUS~   (24.11.10 21:28)

    перечисленные функции - это вообще устаревшая технология если что )
  • raxp2 (23.11.12 17:32) [8]
    Это не ляп, это специально так. Что касаемо формы отображаемого сигнала, то аудиокарты у всех разные, у кого больше наводок, у кого меньше :)
  • han_malign (28.11.12 12:41) [9]

    > перечисленные функции - это вообще устаревшая технология если что )

    - ну да:

    DirectSoundEnumerate(...);// ==> deviceGuid
    DirectSoundCreate(deviceGuid, pintfDS{:IDirectSound}, nil);
    pintfDS.SetCooperativeLevel(__mainWindowHandle, DSSCL_NORMAL);//вот без этого работать не будет
    pintfDS.CreateSoundBuffer(DSBUFFERDESC{...,dwBufferBytes=__oneWaveSize(),...}, pintfDSB{:IDirectSoundBuffer}, nil);
    pintfDSB.Lock(0,0,p1,@cb1,p2,@cb2,DSBLOCK_ENTIREBUFFER);
    __makeOneWave(p1,cb1,p2,cb2);
    pintfDSB.Unlock(p1,cb1,p2,cb2);
    pintfDSB.Play(0, 0, DSBPLAY_LOOPING);
    while not Terminated do sleep(17);
    pintfDSB.Stop;


    - и всё...
    (ну ессессно это схема - обработка ошибок и т.д. не помешает)
  • Ваще имя (28.11.12 15:18) [10]
    Вот здесь есть генерация синусоиды: http://wiki.winamp.com/wiki/SDK_Contents
    Нужный пример называется in_tone
    Оно на сишечке, но предельно просто.
 
Конференция "Media" » Вывод генерированного звука (mmsystem) [D7, WinXP]
Есть новые Нет новых   [134427   +37][b:0][p:0.001]