Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты?

Ответить
Настройки темы
Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты?

Аватара для Alexander_Grig

Личность многогранная :)


Сообщения: 929
Благодарности: 90


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Господа, подскажите пожалуйста, как в Delphi заставить звуковую карту генерировать звук определенной частоты?
Просьба в Гугл не отсылать - уже искал - не помогло.
Это необходимо для написания программы, которая будет генерировать постепенно плавно изменяющиеся частотные колебания скажем от 20 до 20000 Гц (для науки нужно ).

Заранее благодарю!

P.S. Или можно для Visual Studio

Отправлено: 19:39, 29-04-2005

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Звуковую карту или динамик-beeper?
Про системный динамик я знаю :]

Отправлено: 15:44, 30-04-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Alexander_Grig

Личность многогранная :)


Сообщения: 929
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Написано
Цитата:
заставить звуковую карту генерировать звук определенной частоты

Нужно, чтобы из колонок (наушников) слышался звук определенной частоты.

Отправлено: 21:35, 30-04-2005 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Небольшие исправления:
1) нет типа short в паскале, есть shortint - знаковое целое в 1 байт;
2) phase = fmod(phase, pi2) в принципе можно заменить на phase := phase - int(phase/pi2)*phase , либо делать порт fmod'a

Отправлено: 13:59, 04-05-2005 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Sorry... "smallint" Совсем уже забыл паскаль

Отправлено: 14:08, 04-05-2005 | #7


Старожил


Сообщения: 401
Благодарности: 10

Профиль | Отправить PM | Цитировать


имхо
1) можно тип "byte" попробовать, тогда амплитуду (соответсвенно точность) можно вдвое увеличить
2) мож я ошибаюсь, но "phase := phase - int(phase/pi2)*pi2"
fmod это ведь вроде модуль от деления (остаток)?

-------
Успехов.


Последний раз редактировалось aESThete, 04-05-2005 в 14:33.


Отправлено: 14:28, 04-05-2005 | #8


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


aESThete
Цитата:
phase := phase - int(phase/pi2)*pi2
угу, очепятка.

Отправлено: 14:32, 04-05-2005 | #9


Аватара для Alexander_Grig

Личность многогранная :)


Сообщения: 929
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Благодарю, буду пробовать

Отправлено: 16:38, 08-05-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как в Delphi заставить звуковую карту генерировать звук определенной частоты?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Как удалённо отключить звуковую карту через реестр?! 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




 
Переход