|
Модераторы: Snowy, Alexeis, MetalFan |
|
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Доброе время суток.
Как воспроизвести звук синусоиды (прямоугольника) определенной частоты и длительности? В случае прямоугольника желательно еще менять длительность меандра. Beep, PlaySound, MessageBeep не подходят Beep - просто пикает MessageBeep - выдает системные звуки PlaySound - воспроизводит звуки из заданного банка инструментов. В стандартных банках нет такого инструмента. |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Это сообщение отредактировал(а) Чучмек - 8.6.2012, 14:59 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Спасибо, вроде работает.
Только как задать длительность? Ну и разобраться надо еще, как это работает... Есть над чем подумать. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Посмотри на
когда она вызывается с параметром Msg = WOM_DONE, то буфер аудио данных отправлен аудио драйверу. Данный код обрабатывая сообщение WOM_DONE засылает очередную порцию сгеренированных данных. Если не реагировать на WOM_DONE, то буфер драйвера опустеет и звук прекратиться. Сколько данных передашь в буфер, столько и будет звучать. 1 секунда в этом формате займет wf.nAvgBytesPerSec байт. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Спасибо, разобрался.
Еще один вопрос: Почему в конце слышен небольшой щелчок? Пытался заполнять буфер так, чтобы синусоида оканчивалась на нуле. Результат тот же :( Стандартная процедура Beep тоже щелкает. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
0 - это смотря в какой системе исчисления. В 16-ти битном звуке 0 - это $8000, а твой 0 - это максимальное отрицальное число, поэтому и щёлкает. |
|||
|
||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
||||
|
||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Попробовал заполнить весь буфер 32768 ($8000). Слышны щелчки.
Заполнение буфера -32767, приведит к тому же результату. Если заполнить буфер 0-м, то полная тишина. Вывод: В 16-ти битном звуке 0 - это НЕ $8000, а $0, он же и в десятичке 0. |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Попробуй, перед выключением, свести плавно к нулю амплитуду.
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Причина ясна. Опытным путем проверил, что если сигнал заканчивается не в нуле, то появляются щенчки. Причем они слышны начиная со значения 100 (ну у кого какой слух). Теперь стоит две задачи:
Первая, практическая. Какой величины (крутизны) должен быть фронт? Какую кривую должен описывать этот фронт? Вторая, математическая. Как описать кривую фронта? Кто-нибудь занимался обработкой сигнала? |
|||
|
||||
ivan219 |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
oleg2s у вас передача сигнала происходит блоками значит начало нового блока должно быть продолжение старого.
И максимальное значение в 16бит звуке = 32767 а минимальное -32768 Так что делайте всегда так что бы ваше максимальное или минимальное значение было равно |32767| Это сообщение отредактировал(а) ivan219 - 25.6.2012, 21:56 |
||||
|
|||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Нет. У меня данные НЕ передаются блоками. У меня всего один блок заполненный синусоидой.
|
|||
|
||||
ivan219 |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Ну правильно. У Вас он один, но вы его постоянно блоками передаёте в звуковую карту и у же в ней, из этих блоков строится не правильная синусоида с разрывами между блоками по этому вы и слышите щелчки. Смотрите ниже красным цветом это не правильная синусоида. Синим та какая должна быть.
Это сообщение отредактировал(а) ivan219 - 3.7.2012, 19:43 |
||||
|
|||||
oleg2s |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 12.5.2012 Репутация: нет Всего: 1 |
Нет. У меня ОДИН БЛОК и я его запускаю ОДИН РАЗ.
Блок длиной 65535, это примерно 1,5 сек при 44100. Этого мне достаточно. Теперь если сигнал заканчивается не на нуле, то слышен щелчек. Пытался завалить фронт по огибающей синусоиде меньшей частоты. Эффект стал меньше, но при определенных частотах все же слышен. Пробовал заваливать фронт по убывающей прямой. Получилось лучше, но все же не так как хотелось бы. По какой кривой и какой длительности надо заваливать фронт? Вот в чем вопрос. |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Попробуй по такой кривой
а=А-k*t^n a - спадающая амплитуда А- амплитуда синусоиды t - время от начала спада n - коэффициент крутизны k=A/(T^n) Т длительность спада от А до нуля Попробуй с различными T и n (n = 0,3 ... 10) -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |