crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Audio full duplex, Samlerate 8kHz
Lyrri
  опции профиля:
сообщение 25.11.2011, 12:14
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 25.11.2011
Пользователь №: 3026

Спасибо сказали: 0 раз(а)




Репутация:   0  


Необходимо получить звук с микрофона и завернуть его на динамики с минимальной задержкой. ОС: WinXP
Реализовано следующим образом:

    QAudioFormat m_Aformat;
    QList<QAudioDeviceInfo> m_DevlistIn;
    QList<QAudioDeviceInfo> m_DevlistOut;

    QAudioInput  * m_pAudioIn;
    QAudioOutput * m_pAudioOut;
    QIODevice * m_pBufDev;
    //-----------------------------------------
    m_Aformat.setFrequency(44100);
    m_Aformat.setChannels(1);
    m_Aformat.setSampleSize(16);
    m_Aformat.setCodec("audio/pcm");
    m_Aformat.setByteOrder(QAudioFormat::LittleEndian);
    m_Aformat.setSampleType(QAudioFormat::SignedInt);

    m_DevlistOut = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
    m_DevlistIn = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);

    QAudioDeviceInfo info = m_DevlistIn.at(0);
    QAudioDeviceInfo info = m_DevlistOut.at(0);

    m_pAudioIn = new QAudioInput(info, m_Aformat);
    m_pAudioOut = new QAudioOutput(info, m_Aformat);

    m_pBufDev =  m_pAudioIn->start();
    m_pAudioOut->start(m_pBufDev);


Все отлично работает.
При использовании частоты дискретизации 11025 и 22050 в течении 5-7 секунд звук воспроизводится нормально, потом начинает заикаться. С этим пока тоже можно смирится (предполагаю, что программа просто не успевает писать данные в буфер).
Самое интересное начинается при использовании частоты 8000. Звук воспроизводится - но местами рваный. И самое интересное - спектр звука смещается вверх. В связи с этим возникли вопросы:

1 Минимальная частота дискретизации звуковой карты 44100. Частоты 22050 и 11025 это соответственно 44100/2 и 44100/4.
А вот 8000 это 48000/6. Складывается такое впечатление, что при выводе на 8000 используется частота 41000. А она не кратна 8000. Отсюда рваный звук и смещение спектра.
Можно ли из QT, или используя API винды перевести частоту дискретизации звуковой карты по умолчанию в 48000?


2 Есть ли примеры проектов, к примеру SIP, использующие QT Multimedia для получения и воспроизведения звука?

Тестовый пример в аттаче.

Прикрепленные файлы
Прикрепленный файл  Test_8kHz.zip ( 8.19 килобайт ) Кол-во скачиваний: 158
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.5.2024, 20:41