|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты? |
|
|
Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты?
|
Личность многогранная :) Сообщения: 929 |
Господа, подскажите пожалуйста, как в 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 |
|