![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Доброго времени суток всем.
Вот решил звуковой генератор замастрячить. Все вродебы получилось, но есть одно но. Я использую вот такой код (взято с DRKB):
так вод, как бы мне сделать так, чтобы можно было одной кнопкой включать, а другой выключать сигнал, а то звучит по заданному времени и в это время форма и все, что на ней не реагируют на клики мышкой. Ну надеюсь понятно описал. С пасибо, буду весьма признателен за помощь. С уважением RN3QGA77. ![]() |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Вынеси воспроизведение звука в отдельный поток + продолжительность одного "эпизода" сделай порядка 100 мс.
Это касательно как изменить. А касательно как лучше: либо использовать DirectSound, либо найти компонент TAudio (есть на торри) в таком случае реализация будет более правильная. Для генерирования ваве последовательности стоит использовать обратное FFT, возможности генератора несказанно возрастут. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
Переделал на асинхронность, но теперь не функция, а класс.
Использование:
P.S. создавать SoundMaker не нужно - он сам создаётся и уничтожается. |
||||
|
|||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Доброго времени суток.
Snowy это то, что мне нужно, но я честно говоря не совсем разобрался как мне это воплотить на форме с двумя кнопками, нельзя ли поподробней мне бестолковому, или рабочий пример кинуть? С уважением RN3QGA77. ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
Я ж всё написал.
Первый код сохрани в файл SndMaker.pas Положи его в свою папку. В uses пропиши SndMaker. Далее. Создай OnClick для первой кнопки. пропиши в нем SoundMaker.Play(200, 60); // 200 - частота в герцах, 60 - громкость 0-127 Создай OnClick для второй кнопки. Пропиши в нем SoundMaker.Stop; Всё. Проще некуда. |
|||
|
||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Доброго времени всем.
Ну вот, что значит хорошая "тормозная система", ну тупим иногда, что ж... Все работает ОК. Огромное спасибо тебе Snowy . С уважением RN3QGA77. ![]() |
|||
|
||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Опять привет.
Значидца доделал я генератор, но заметил одну неприятную вещь, качество сигнала оставляет быть лучшим. Глянул по осцилографу, присутствует непонятная бурчащая составляющая. Начал разбираться и пришел к выводу, что дело в соотношении частоты с дискретизацией. В прошлом варианте я задавал переменную дискретизации присваивал ей значение выбранной частоты и умножал её на 3, получалось качество отличное, попробывал в варианте по Snowy, что то не могу задать я переменную (SamplRate см. код в 3 топике от Snowy) либо не правильно это делаю, хотя стандартно . Провел пару эксперементов и выяснил, что наивысшее качество получается когда частота дискретизации больше выбранной частоты в 3-3,3 раза. Подскажите как же мне её задать то ? Ну думаю описал проблему понятно ? Заранее благодарен, с уважением RN3QGA77. ![]() |
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
До воспроизведения установи
Можно прямо в конструкторе заменить значение по умолчанию
|
||||
|
|||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Доброй ночи.
Да Snowy, то, что в конструкторе менять можно дискрет, то я так и делал, я не дотюмкал что можно присваивать до начала воспроизведения. Теперь почти все ОК. Создаю переменную умножаю на 3 и получаю чистейший тон (сигнал), но опять одно но ... Интересная штука чистый сигнал получается через определенные промежутки, а точнее - для примера в Гц'ах: (200-333, 400-433, 500 - 533 ну и т.д с этой закономерностью), если ставлю дискрет (8000 и т.д. ) то то же самое, но с другой последовательностью, вот интересно как же сделать, чтоб по всей частоте от 0 до 20000 (мне больше не надо) был чистый сигнал может поможешь разобраться? Очень благодарен. С уважением RN3QGA77. ![]() |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Если хочеш могу на мыло тебе компонент скинуть. работает нормально глюков с воспроизведением не замечено.
кинь пример. интересно посмотреть за счет чего глюк. (если код не секретный) -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
День добрый.
Ну ежели можно drKot то скинь, буду примного благодарен.([email protected]) А на счет примера нет никаких проблем он весь выше в топике от Snowy. Просто у меня на форме регулятор типа ползунка его значения от 0 до 20000 Гц, я присваиваю его значение умноженное на 3 в переменную SamplRate(Дискретизация), да собственно и все, но получается такое интересное действо, а если прописать вручную SamplRate, то тоже самое получается, но в других областях частот. Если может чего непонятно то дополню. С уважением RN3QGA77. |
|||
|
||||
RN3QGA77 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2006 Репутация: нет Всего: нет |
Все, вопрос решен спасибо всем за помощь!
|
|||
|
||||
aalor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
я конечна в звуке болванчик, по просьбе прогу делаю, вот объяснте- зачем дискредитация, и клиенту нана частота изменения частоты не к герцах а в сотых герца это реально?? |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
Замени Freq: dword на Freq: double
Но вот сможет ли это звуковуха воспроизвести - вопрос другой... |
|||
|
||||
aalor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
спасибо, у мя возспроизвело, завтра поволоку заказчику |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |