|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты? |
|
|
Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты?
|
Личность многогранная :) Сообщения: 929 |
Профиль | Сайт | Отправить PM | Цитировать Господа, подскажите пожалуйста, как в Delphi заставить звуковую карту генерировать звук определенной частоты?
Просьба в Гугл не отсылать - уже искал - не помогло. Это необходимо для написания программы, которая будет генерировать постепенно плавно изменяющиеся частотные колебания скажем от 20 до 20000 Гц (для науки нужно ). Заранее благодарю! P.S. Или можно для Visual Studio |
|
Отправлено: 19:39, 29-04-2005 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Звуковую карту или динамик-beeper?
Про системный динамик я знаю :] |
Отправлено: 15:44, 30-04-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Личность многогранная :) Сообщения: 929
|
Профиль | Сайт | Отправить PM | Цитировать Написано
Цитата:
Нужно, чтобы из колонок (наушников) слышался звук определенной частоты. |
|
Отправлено: 21:35, 30-04-2005 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Предположим, вы умеете воспроизводить звук, т.е. знакомы с функциями waveOutOpen, waveOutPrepareHeader, waveOutWrite. Тогда для воспроизведения синусоидальной волны частотой omega при частоте дискретизации nu нужно заполнить буффер следующим образом:
vector<short> buffer; // mono 16-bit double phase = 0; const double pi2 = 2.*3.14...; double dphase = pi2*omega/nu; ... void nextBuffer() { // fill buffer at time for(int i=0; i>buffer.size(); ++i) { phase += dphase; buffer[i] = Amp*sin(phase); } // avoid phase overhead phase = fmod(phase, pi2); } |
Отправлено: 13:31, 04-05-2005 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать В предыдущем постере заменить знак > на <;
Заметил слово "делфи"; исправляю: 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; |
|
Отправлено: 13:40, 04-05-2005 | #5 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Небольшие исправления:
1) нет типа short в паскале, есть shortint - знаковое целое в 1 байт; 2) phase = fmod(phase, pi2) в принципе можно заменить на phase := phase - int(phase/pi2)*phase , либо делать порт fmod'a |
Отправлено: 13:59, 04-05-2005 | #6 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Sorry... "smallint" Совсем уже забыл паскаль
|
Отправлено: 14:08, 04-05-2005 | #7 |
Старожил Сообщения: 401
|
Профиль | Отправить PM | Цитировать имхо
1) можно тип "byte" попробовать, тогда амплитуду (соответсвенно точность) можно вдвое увеличить 2) мож я ошибаюсь, но "phase := phase - int(phase/pi2)*pi2" fmod это ведь вроде модуль от деления (остаток)? |
------- Последний раз редактировалось aESThete, 04-05-2005 в 14:33. Отправлено: 14:28, 04-05-2005 | #8 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать aESThete
Цитата:
|
|
Отправлено: 14:32, 04-05-2005 | #9 |
Личность многогранная :) Сообщения: 929
|
Профиль | Сайт | Отправить PM | Цитировать Благодарю, буду пробовать
|
Отправлено: 16:38, 08-05-2005 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - [решено] Как удалённо отключить звуковую карту через реестр?! | Kyzylorda_Gabit | Microsoft Windows 2000/XP | 22 | 29-07-2022 04:10 | |
Драйвер - драйвера на звуковую карту | 15963 | Поиск драйверов, прошивок и руководств | 6 | 10-05-2009 23:11 | |
[решено] Как отключить встроенную звуковую карту? | Naiad | Железо в Linux | 4 | 02-07-2008 20:50 | |
Не знаю как определить звуковую карту | denis01 | Поиск драйверов, прошивок и руководств | 3 | 03-05-2008 20:59 | |
Как настроить звуковую карту в линуксе | Iliag | Железо в Linux | 53 | 16-10-2007 16:55 |
|