-
Есть у кого пример генератора звука из заданной частоты?
-
Т.е. есть частота, а из нее надо сделать генератор звука ? :)
-
Beep()
-
-
2Сергей М. Спасибо!
-
> 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 ) Кроме того, форма получаемых сигналов оставляет желать лучшего. Как на виртуальный генератор - двойка с минусом, как пример работы со звуком - тройка
-
> ~AQUARIUS~ (24.11.10 21:28) [5]
> откровенный ляп - в waveInProc2 идет обращение к форме
Эта хрень там никакого отношения к собственно генератору не имеет.
-
> [5] ~AQUARIUS~ (24.11.10 21:28)
перечисленные функции - это вообще устаревшая технология если что )
-
Это не ляп, это специально так. Что касаемо формы отображаемого сигнала, то аудиокарты у всех разные, у кого больше наводок, у кого меньше :)
-
> перечисленные функции - это вообще устаревшая технология если что )
- ну да:
DirectSoundEnumerate(...); DirectSoundCreate(deviceGuid, pintfDS, nil);
pintfDS.SetCooperativeLevel(__mainWindowHandle, DSSCL_NORMAL); pintfDS.CreateSoundBuffer(DSBUFFERDESC, pintfDSB, 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;
- и всё... (ну ессессно это схема - обработка ошибок и т.д. не помешает)
-
|