Название: QAudioInput. Непонятки. Отправлено: sibmail от Май 25, 2012, 07:00 На винде. Пишу в коде setSampleType(QAudioFormat::UnSignedInt) записываю pcm. Открываю pcm в SoundForge и оказывается она записана SignedInt.
В линуксе если указываю QAudioFormat::UnSignedInt то оно так и будет. Проблема возникла при передачи звука с линукса на винду. на винде звук тарахтел. что за фигня такая? Название: Re: QAudioInput. Непонятки. Отправлено: sibmail от Май 25, 2012, 07:28 причем проблема наблюдается если setSampleSize(16)
QAudioFormat format; format.setFrequency(8000); format.setChannels(1); format.setSampleSize(16); format.setCodec("audio/pcm"); Название: Re: QAudioInput. Непонятки. Отправлено: LisandreL от Май 25, 2012, 10:24 Открываю pcm в SoundForge и оказывается она записана SignedInt. А заголовок составляете сами? Или без него?Просто заголовок-то QAudioInput не формирует, только raw данные. А по raw данным формат SF может только угадывать. Если не совпало только SampleType, то это просто чудо. Название: Re: QAudioInput. Непонятки. Отправлено: sibmail от Май 26, 2012, 05:38 никаких заголовков. чистый pcm.
Название: Re: QAudioInput. Непонятки. Отправлено: LisandreL от Май 26, 2012, 12:35 Ну а тогда SoundForge-у просто неоткуда узнать, что это за формат.
Это уже вы должны ему сказать при открытии или после (где не подскажу - программой не пользуюсь). Название: Re: QAudioInput. Непонятки. Отправлено: xokc от Май 27, 2012, 01:08 С трудом себе представляю 16 битный unsigned звук в Windows. С ещё бОльшим трудом представляю такое с QAudioInput и Windows. Если так уж нужно писать именно 16 битный unsigned, нужно воспользоваться сторонними библиотеками, ну или, просто добавить по 32767 к значению каждого из отсчётов после получения их от звуковой платы.
Название: Re: QAudioInput. Непонятки. Отправлено: sibmail от Май 27, 2012, 22:30 С трудом себе представляю 16 битный unsigned звук в Windows. С ещё бОльшим трудом представляю такое с QAudioInput и Windows. Если так уж нужно писать именно 16 битный unsigned, нужно воспользоваться сторонними библиотеками, ну или, просто добавить по 32767 к значению каждого из отсчётов после получения их от звуковой платы. так в чем фишка? расскажите Название: Re: QAudioInput. Непонятки. Отправлено: xokc от Май 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. Но, не зная того, что Вы делаете с этим звуком дальше, ничего более рассказать не могу. Если ещё что-то непонятно - спрашивайте конкретнее.Название: Re: QAudioInput. Непонятки. Отправлено: sibmail от Май 30, 2012, 08:45 понятно. спасибо. ну в книжках же не пишут что для винды 16 бит только signed.
задача стоит в пересылке звука на другие компы (устройства). устройства понимают только 8000 16 моно uLaw. а ресемплинг сделать делать сложно? где вообще можно почитать как преобразовать например wav в pcm. а то сейчас наткнулся на эту проблему. Название: Re: QAudioInput. Непонятки. Отправлено: xokc от Май 30, 2012, 15:39 Если коротко, то качественный ресемплинг делать сложно. Но нужен ли Вам качественный? Если оконечные устройства звук просто воспроизводят - то не нужен, если нужна какая-то цифровая обработка сигналов (демодуляция и т.п.), то - нужен. В интернете полно готовых библиотек ресемплеров, они легко находятся гуглом. Я пользовался libsamplerate - отличная штука, но там GPL. Если это не критично - рекомендую. По поводу WAV и PCM вроде в соседней теме уже ответили.
|