![]() |
Как в Delphi заставить звуковую карту генерировать звук определенной частоты?
Господа, подскажите пожалуйста, как в Delphi заставить звуковую карту генерировать звук определенной частоты?
Просьба в Гугл не отсылать - уже искал - не помогло. Это необходимо для написания программы, которая будет генерировать постепенно плавно изменяющиеся частотные колебания скажем от 20 до 20000 Гц (для науки нужно :) ). Заранее благодарю! P.S. Или можно для Visual Studio |
Звуковую карту или динамик-beeper?
Про системный динамик я знаю :] |
Написано
Цитата:
Нужно, чтобы из колонок (наушников) слышался звук определенной частоты. |
Предположим, вы умеете воспроизводить звук, т.е. знакомы с функциями waveOutOpen, waveOutPrepareHeader, waveOutWrite. Тогда для воспроизведения синусоидальной волны частотой omega при частоте дискретизации nu нужно заполнить буффер следующим образом:
Код:
vector<short> buffer; // mono 16-bit |
В предыдущем постере заменить знак > на <;
Заметил слово "делфи"; исправляю: var buffer : array of short; // mono 16-bit phase : double; const pi2 : double = 2.0*3.14...; var dphase : double; phase := 0; dphase := pi2*omega/nu; ... procedure nextBuffer var i : integer; begin // fill buffer at time for i:=0 to high(buffer) do begin phase := phase + dphase; buffer[i] := Amp*sin(phase); end; // avoid phase overhead - аналога в паскале не знаю // phase = fmod(phase, pi2); end; |
Небольшие исправления:
1) нет типа short в паскале, есть shortint - знаковое целое в 1 байт; 2) phase = fmod(phase, pi2) в принципе можно заменить на phase := phase - int(phase/pi2)*phase , либо делать порт fmod'a |
Sorry... "smallint" Совсем уже забыл паскаль
|
имхо
1) можно тип "byte" попробовать, тогда амплитуду (соответсвенно точность) можно вдвое увеличить 2) мож я ошибаюсь, но "phase := phase - int(phase/pi2)*pi2" fmod это ведь вроде модуль от деления (остаток)? |
aESThete
Цитата:
|
Благодарю, буду пробовать
|
Цитата:
|
прошлый пост писал по памяти (давно паскалем не занимался), а сейчас проверил:
Цитата:
|
Язык Делфи (имеется ввиду компилятор) меняется с каждым новым компилятором. Например, в паскале нет понятия "интерфейс". Посмотри типы данных хотя бы в делфи 3 и увидишь много незнакомого. Обратная совместимость обычно имеется.
|
Время: 18:30. |
Время: 18:30.
© OSzone.net 2001-