Название: буфер Отправлено: Hoksmur от Июль 02, 2013, 08:14 Hi, All!
Как работает буферирование? QAudioInput пишет в буфер, а QFile читает - это очевидно. Если я буду с этим же буфером работать, получив QByteArray через .add() и seek(0) потом .remove() - возможны ли какие-нибудь коллизии? По исходникам пытался посмотреть - "ниасилил". Название: Re: буфер Отправлено: xokc от Июль 02, 2013, 22:56 Если я буду с этим же буфером работать, получив QByteArray через .add() и seek(0) потом .remove() - возможны ли какие-нибудь коллизии? По исходникам пытался посмотреть - "ниасилил". Пытался понять о чём пост - "ниасилил". Название: Re: буфер Отправлено: Hoksmur от Июль 03, 2013, 10:21 Хорошо. Попробую по другому объяснить. Есть такой код:
Код
Могу я без коллизий сделать так: Код ? PS: Вообще-то задача прочитать данные из звуковой карты, переваривая и 8 бит, и 16 бит. Может через QDataStream ? Название: Re: буфер Отправлено: Hoksmur от Июль 03, 2013, 11:58 Сделал так:
Код
Может так, на словах, посоветуете? Принимать в буфер - принимаю, каким классом воспользоваться, чтобы буфер по прочтении данных корректно удалял прочитанные данные, и по какому сигналу (или по таймеру?) проверять наполненность буфера? Название: Re: буфер Отправлено: Hoksmur от Июль 03, 2013, 12:45 Как вот этот код контролирует размер буфера?
Код
Как буфер не переполняется? Могу я подать на вход QDataStream данные с QAudioInput, а читать по 8 бит или по 16 бит, в зависимости от настроек? Название: Re: буфер Отправлено: Hoksmur от Июль 03, 2013, 12:59 Ниже код, который читает (по 2 раза) как надо, но что бы такое запихать в тело цикла, чтобы прочитанные значения выкидвались, то есть buffer1 и buffer2 по идее должны выдавать разный размер буфера. Или это больше к QByteArray ?
Код
Название: Re: буфер Отправлено: Igors от Июль 03, 2013, 14:34 Принимать в буфер - принимаю, каким классом воспользоваться, чтобы буфер по прочтении данных корректно удалял прочитанные данные, и по какому сигналу (или по таймеру?) проверять наполненность буфера? Для потока IO нет понятий удаление/вставка, это надо реализовывать самому. Популярный, простой и хороший способ - кольцевой буфер, который Вам неск раз рекомендовали (но Вы почему-то отбрыкивались :)). Можно и по-другому, напр писать "чанками". В любом случае в буфере максимум столько данных какой размер буфера - Вы же не хотите чтобы он неограниченно рос. То есть "наполненность" известна, надо только иметь ввиду что это "последние" данныеНазвание: Re: буфер Отправлено: kuzulis от Июль 03, 2013, 14:55 ИМХО, чанками проще. Например, надо иметь два буфера (а можно и больше): пока один заполняется - другой используется.
Например в ASIO спецификации именно так и сделано - там нет никаких кольцевых буферов. UPD: А по теме (http://qt-project.org/doc/qt-5.0/qtmultimedia/qaudioinput.html#start), что собственно непонятно? Что ты хочешь делать с полученными данными? UPD2: И посмотри уже примеры (http://www.trinitydesktop.org/docs/qt4/multimedia-audioinput.html) Название: Re: буфер Отправлено: Hoksmur от Июль 04, 2013, 10:51 Протестировал. Такой код выбирает буфер, то есть убирает использованное.
Код На выходе: Код: buffer: 16000 16000 Буду вещать свой обработчик на сигнал, только на какой - readyRead (http://qt-project.org/doc/qt-5.0/qtcore/qiodevice.html#readyRead) или bytesWritten (http://qt-project.org/doc/qt-5.0/qtcore/qiodevice.html#readyRead) ? Кто из них подразумевается устройством - буфер или звуковуха? Название: Re: буфер Отправлено: Igors от Июль 04, 2013, 15:44 Протестировал. Такой код выбирает буфер, то есть убирает использованное. Убирает, но дорогой ценой, сдвигается весь буфер что может оказаться неприемлемо медленно.Код
|