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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAudioInput. Непонятки.  (Прочитано 7300 раз)
sibmail
Гость
« : Май 25, 2012, 07:00 »

На винде. Пишу в коде setSampleType(QAudioFormat::UnSignedInt) записываю pcm. Открываю pcm в SoundForge и оказывается она записана SignedInt.
В линуксе если указываю QAudioFormat::UnSignedInt то оно так и будет.
Проблема возникла при передачи звука с линукса на винду. на винде звук тарахтел.

что за фигня такая?
Записан
sibmail
Гость
« Ответ #1 : Май 25, 2012, 07:28 »

причем проблема наблюдается если setSampleSize(16)
QAudioFormat format;
format.setFrequency(8000);
format.setChannels(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Май 25, 2012, 10:24 »

Открываю pcm в SoundForge и оказывается она записана SignedInt.
А заголовок составляете сами? Или без него?
Просто заголовок-то QAudioInput не формирует, только raw данные.
А по raw данным формат SF может только угадывать. Если не совпало только SampleType, то это просто чудо.
Записан
sibmail
Гость
« Ответ #3 : Май 26, 2012, 05:38 »

никаких заголовков. чистый pcm.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Май 26, 2012, 12:35 »

Ну а тогда SoundForge-у просто неоткуда узнать, что это за формат.
Это уже вы должны ему сказать при открытии или после (где не подскажу - программой не пользуюсь).
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #5 : Май 27, 2012, 01:08 »

С трудом себе представляю 16 битный unsigned звук в Windows. С ещё бОльшим трудом представляю такое с QAudioInput и Windows. Если так уж нужно писать именно 16 битный unsigned, нужно воспользоваться сторонними библиотеками, ну или, просто добавить по 32767 к значению каждого из отсчётов после получения их от звуковой платы.
Записан
sibmail
Гость
« Ответ #6 : Май 27, 2012, 22:30 »

С трудом себе представляю 16 битный unsigned звук в Windows. С ещё бОльшим трудом представляю такое с QAudioInput и Windows. Если так уж нужно писать именно 16 битный unsigned, нужно воспользоваться сторонними библиотеками, ну или, просто добавить по 32767 к значению каждого из отсчётов после получения их от звуковой платы.

так в чем фишка? расскажите
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #7 : Май 29, 2012, 20:37 »

так в чем фишка? расскажите
Я ж вроде всё рассказал. Для звуковой подсистемы Windows, с которой работает QAudioInput (mmsystem), "navtive" 16 битным форматом является знаковый целый. Если нужен другой формат - работайте с Windows звуком через другие API (DirectX, ASIO, WDMKS, WASAPI), но не факт, что драйвер Вашей звуковой платы будет эти API корректно поддерживать. Либо используйте более "продвинутые" и высокоуровневые чем QAudioInput audio движки (portaudio, RtAudio и т.п. - они прекрасно работают совместно с Qt). Самый простой для Вас выход - после получения данных от звуковой платы в signed формате к каждому отсчёту добавить 32767 - получите unsigned. Самый "правильный" - получение данных в наиболее "естественном" для текущей комбинации ОС + звуковая плата + драйвер формате (обычно для современных плат это 32 битный нормализованный float + 192 (96) кГц) и самостоятельный ресемплинг в 8 кГц плюс самостоятельное же преобразование в 16 бит unsigned. Но, не зная того, что Вы делаете с этим звуком дальше, ничего более рассказать не могу. Если ещё что-то непонятно - спрашивайте конкретнее.
« Последнее редактирование: Май 29, 2012, 20:44 от xokc » Записан
sibmail
Гость
« Ответ #8 : Май 30, 2012, 08:45 »

понятно. спасибо. ну в книжках же не пишут что для винды 16 бит только signed.
задача стоит в пересылке звука на другие компы (устройства). устройства понимают только 8000 16 моно uLaw.
а ресемплинг сделать делать сложно? где вообще можно почитать как преобразовать например wav в pcm. а то сейчас наткнулся на эту проблему.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #9 : Май 30, 2012, 15:39 »

Если коротко, то качественный ресемплинг делать сложно. Но нужен ли Вам качественный? Если оконечные устройства звук просто воспроизводят - то не нужен, если нужна какая-то цифровая обработка сигналов (демодуляция и т.п.), то - нужен. В интернете полно готовых библиотек ресемплеров, они легко находятся гуглом. Я пользовался libsamplerate - отличная штука, но там GPL. Если это не критично - рекомендую. По поводу WAV и PCM вроде в соседней теме уже ответили.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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