Russian Qt Forum
Ноябрь 22, 2024, 12:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: проблема с QAudioOutput  (Прочитано 14396 раз)
elijah_olejnik
Гость
« Ответ #15 : Сентябрь 28, 2014, 20:35 »

Большое спасибо, не хотелось бы перестраиваться, но о QAudio действительно очень много негатива везде. Ссылки полезные, даже что-то про ASIO увидел. Вопрос такой, меня помимо воспроизведения интересуют функции автоматического управления громкостью, т.е. fadein, fadeout, crossfade. В QAudioOutput очень неудобно реализовано, поскольку метод отвечающий за громкость QAudioOutput::setVolume(qreal volume) обращается напрямую к драйверу звуковой карты, регулируя громкость виртуального микшера. Мне необходимо делать это внутри программы, не затрагивая системную громкость. Я не успею сейчас, конечно, прочитать документацию по приведённым вами ссылкам, если вы работали с этими библиотеками - вы наверняка знаете, как обстоит дело с контрольными функциями этих библиотек?

Документацию обязательно почитаю, попробую перевести свой проект на одну из этих библиотек, хотя бы, в качестве эксперимента. Спасибо.
Записан
elijah_olejnik
Гость
« Ответ #16 : Сентябрь 28, 2014, 23:08 »

Кстати, успешно поместил каждый QAudioOutput в отдельный QThread, не помогло. Артефакт остался. Более того, посмотрел через отладчик - QAudioOutput::start(QIODevice *device) формирует собственный поток, но к сожалению, по какой-то причине, остановка этого, и любого другого потока влияет на аудиокарту, вызывая чёртов щелчок. Этот щелчок проявляется при вызовах stop, suspend, reset. И ещё: щелчкок пропадает, если вызван фейдаут, т.е., если громкость аудиовыхода 0, но только на том аудиовыходе, где убрана громкость. А на параллельно воспроизводящемся треке на другом аудиовыходе щелчёк остаётся. По-видимому, нельзя создавать более одного объекта QAudioOutput. Можно ли решить проблему унаследовавшись от данного класса? Бред, наврное...
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #17 : Сентябрь 29, 2014, 08:31 »

Ссылки полезные, даже что-то про ASIO увидел.
Обе библиотеки умеют работать со звуком через ASIO, но для этого при их сборке нужно сделать соответствующие define и скачать ASIO SDK.

меня помимо воспроизведения интересуют функции автоматического управления громкостью, т.е. fadein, fadeout, crossfade. В QAudioOutput очень неудобно реализовано, поскольку метод отвечающий за громкость QAudioOutput::setVolume(qreal volume) обращается напрямую к драйверу звуковой карты, регулируя громкость виртуального микшера. Мне необходимо делать это внутри программы, не затрагивая системную громкость.
Вообще говоря, функции управления громкостью звука без использования системного микшера не являются частью этих библиотек. Сделать это на уровне приложения совсем несложно - просто увеличивать/уменьшать значения семплов перед отправкой их на звуковую плату (правда, я не знаю что такое crossfade).

Документацию обязательно почитаю, попробую перевести свой проект на одну из этих библиотек, хотя бы, в качестве эксперимента.
Там всё достаточно просто - смотрите примеры, из них всё понятно. Рекомендую для начала посмотреть на RtAudo там вроде бы попроще концепция, хотя и в portaudio не сильно сложнее.
« Последнее редактирование: Сентябрь 29, 2014, 09:12 от xokc » Записан
elijah_olejnik
Гость
« Ответ #18 : Октябрь 07, 2014, 05:36 »

Проблема решилась. Суть в том, что для корректного использования функций этого класса, класс, использующий экземпляр QAudioOutput необходимо запускать в потоке с помощью класса-контроллера, с которым фактически и придётся работать. Всё соединяется через сигналы и слоты. Тогда работа QAudioOutput не будет конфликтовать с другими процессами, в том числе с другим потоком воспроизведения.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.187 секунд. Запросов: 22.