Russian Qt Forum

Qt => Общие вопросы => Тема начата: mezmay от Февраль 10, 2015, 09:45



Название: Как отследить подключение микрофона?
Отправлено: mezmay от Февраль 10, 2015, 09:45
Можно ли как-то отследить подключение устройства в микрофонный или линейный входы компьютера?
p.s. - в Linux


Название: Re: Как отследить подключение микрофона?
Отправлено: xokc от Февраль 10, 2015, 11:41
На уровне ОС для отдельных типов драйверов есть какие-то сообщения о подключении устройств в эти разъёмы, но говорить об унивесальном интерфейсе к ним не приходится. В принципе, в приложении можно попробовать постоянно мониторить данные, поступающие на линейный вход/микрофон и по характеристикам получаемого сигнала пытаться сделать вывод о наличии "возбудителя", но это всё же не решение исходной задачи в "чистом виде".


Название: Re: Как отследить подключение микрофона?
Отправлено: Пантер от Февраль 10, 2015, 11:42
Придется писать самому для каждой платформы, скорее всего.


Название: Re: Как отследить подключение микрофона?
Отправлено: mezmay от Февраль 10, 2015, 12:03
На уровне ОС для отдельных типов драйверов есть какие-то сообщения о подключении устройств в эти разъёмы, но говорить об унивесальном интерфейсе к ним не приходится. В принципе, в приложении можно попробовать постоянно мониторить данные, поступающие на линейный вход/микрофон и по характеристикам получаемого сигнала пытаться сделать вывод о наличии "возбудителя", но это всё же не решение исходной задачи в "чистом виде".

Пока придумал вот так:
Код:
void cwin::on_timer()
{
    QList<QAudioDeviceInfo> list =
        QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
    
    int n = list.size();
    if (n > m_device_count)
    {
        /* подключено новое входное устройство */
    }
    m_device_count = n;
}
Но здесь приходится крутить таймер и опрашивать доступные устройства. Некрасиво, конечно, но может и не такой уж плохой способ...


Название: Re: Как отследить подключение микрофона?
Отправлено: Пантер от Февраль 10, 2015, 12:08
Вполне годно. :) Только если выполнение availableDevices занимает много времени, можно вынести в отдельный поток.


Название: Re: Как отследить подключение микрофона?
Отправлено: qate от Февраль 10, 2015, 13:07
разве QAudioDeviceInfo::availableDevices не возвращает всегда одно и тоже число ? например линейный вход + микрофонный = 2


Название: Re: Как отследить подключение микрофона?
Отправлено: mezmay от Февраль 10, 2015, 13:15
разве QAudioDeviceInfo::availableDevices не возвращает всегда одно и тоже число ? например линейный вход + микрофонный = 2
нет. Возвращает подключенные (в данном случае - входные) устройства к этим входам.

Еще идеи будут? Может системные функции Linux или alsa API ?


Название: Re: Как отследить подключение микрофона?
Отправлено: qate от Февраль 10, 2015, 14:32
нет. Возвращает подключенные (в данном случае - входные) устройства к этим входам.

странно, в исходниках есть пример "examples/multimedia/audioinput" - всегда возвращает одно и тоже количество устройств вне зависимости от того подключил я микрофон или нет


Название: Re: Как отследить подключение микрофона?
Отправлено: mezmay от Февраль 10, 2015, 15:59
странно, в исходниках есть пример "examples/multimedia/audioinput" - всегда возвращает одно и тоже количество устройств вне зависимости от того подключил я микрофон или нет
Да, это у меня в семерке работало. В линуксе показывает постоянное число, так что вопрос остается открытым.


Название: Re: Как отследить подключение микрофона?
Отправлено: qate от Февраль 10, 2015, 16:07
тогда наверно никак - если в системном журнале нет событий о втыкании микрофона, значит драйвер и не поддерживает данный функционал


Название: Re: Как отследить подключение микрофона?
Отправлено: mezmay от Февраль 10, 2015, 16:54
тогда наверно никак - если в системном журнале нет событий о втыкании микрофона, значит драйвер и не поддерживает данный функционал
но Alsamixer реагирует на подключение микрофона/лин. входа, так что должна быть функция


Название: Re: Как отследить подключение микрофона?
Отправлено: qate от Февраль 11, 2015, 12:29
но Alsamixer реагирует на подключение микрофона/лин. входа, так что должна быть функция

не обращал внимание - текстовый который миксер?

тут еще 2 проблемы вижу
1. не все звуковухи могут такую инфу отдавать
2. кроме алсы есть pulse - как в нем ?