Название: Работа с буфером, типы данных. Отправлено: Hoksmur от Июнь 21, 2013, 10:51 В продолжение этого: http://www.prog.org.ru/topic_25057_0.html (http://www.prog.org.ru/topic_25057_0.html)
С буфером разобрался. Уважаемые, появились вопросы другого плана. 1) Как читать из буфера в нужном мне формате? То есть QAudioInput пишет туда 16 битные знаковые значения по двум каналам, как мне их по переменным распихать для работы? 1а) Как в коде подстраиваться под тип данных? На входе я их знаю, но.. разные функции (методы) писать? 2) Как контролировать заполненность буфера? То есть - не допустить его переполнения и опустошения. Вырабатывает ли он какие-нибудь сигналы, по которым можно запустить обработку? Если я сделаю его фиксированного размера, могу ли я при заполнении успеть "поймать" предыдущие (затираемые?) данные без потерь? Название: Re: Работа с буфером, типы данных. Отправлено: Странник от Июнь 21, 2013, 11:27 В продолжение этого: http://www.prog.org.ru/topic_25057_0.html (http://www.prog.org.ru/topic_25057_0.html) 1) не понял вопроса. из какого буфера? в каком формате? по каким переменным для какой работы?С буфером разобрался. Уважаемые, появились вопросы другого плана. 1) Как читать из буфера в нужном мне формате? То есть QAudioInput пишет туда 16 битные знаковые значения по двум каналам, как мне их по переменным распихать для работы? 1а) Как в коде подстраиваться под тип данных? На входе я их знаю, но.. разные функции (методы) писать? 2) Как контролировать заполненность буфера? То есть - не допустить его переполнения и опустошения. Вырабатывает ли он какие-нибудь сигналы, по которым можно запустить обработку? Если я сделаю его фиксированного размера, могу ли я при заполнении успеть "поймать" предыдущие (затираемые?) данные без потерь? 1а) если алгоритм обработки зависит от типа входных данных, пишите разные функции. если не зависит - можете использовать наиболее общий тип данных или шаблонные функции. 2) чтобы не допустить переполнения, вам советовали использовать циклический буфер. чтобы избежать опустошения, вам нужно правильно подобрать его размер (он должен вмещать интересующий вас объем данных с некоторым запасом). Название: Re: Работа с буфером, типы данных. Отправлено: Igors от Июнь 21, 2013, 11:51 Отчетливо заметно стремление "обязательно использовать Qt класс", впрочем не у Вас одного :). Однако QBuffer сам по себе не циклический, т.е. он будет непрерывно расти. Возможно стоит перекрыть readData/writeData напр так
Код Тогда чтение из буфера будет выглядеть так Код Значения dataPos и dataSize должны храниться в др месте (напр в QList), Вы сами отслеживаете и заносите туда. Также при каждом занесении нужно проверять что оказалось перетерто в кольцевом буфере и отрезать начало QList Название: Re: Работа с буфером, типы данных. Отправлено: Hoksmur от Июнь 21, 2013, 11:55 1) Как читать из буфера в нужном мне формате? То есть QAudioInput пишет туда 16 битные знаковые значения по двум каналам, как мне их по переменным распихать для работы? 1) не понял вопроса. из какого буфера? в каком формате? по каким переменным для какой работы?Я собираюсь так решать - из одного буфера перекладываю в другой, попутно анализирую данные. Как только поймал событие - начинаю с выхода второго буфера писать N отсчётов. Но: в это время надо лишние отсчёты со второго буфера выбрасывать, чтобы не переполнился, но и не допускать его уменьшения меньше X секунд. Смотрю в сторону QDataStream, но что-то даже примеры пока не добавили понимания. Сигналы какие-нить генерируются QBuffer или QByteArray - кто-нибудь знает? Название: Re: Работа с буфером, типы данных. Отправлено: Igors от Июнь 21, 2013, 12:01 Смотрю в сторону QDataStream, но что-то даже примеры пока не добавили понимания. Обычно ругают за то что не читает букварь, а тут наоборот - зарылись с головой. ищете то что и не нужно :) Сигналы какие-нить генерируются QBuffer или QByteArray - кто-нибудь знает? Название: Re: Работа с буфером, типы данных. Отправлено: Hoksmur от Июнь 21, 2013, 12:10 Отчетливо заметно стремление "обязательно использовать Qt класс", впрочем не у Вас одного :). Однако QBuffer сам по себе не циклический, т.е. он будет непрерывно расти. Возможно стоит перекрыть readData/writeData напр так Ну да, есть такое. Проверяю то на персоналке, а работать будет на embedded linux. Да и документация в одном месте.... А если перехватить это http://qt-project.org/doc/qt-5.0/qtcore/qiodevice.html#bytesWritten (http://qt-project.org/doc/qt-5.0/qtcore/qiodevice.html#bytesWritten)? Вроде проще, и во внутренние механизмы не лезем. Только как ловить не все события, а только от нужного буфера? И вот ещё нашёл по другому пункту: http://doc.qt.digia.com/4.7/datastreamformat.html (http://doc.qt.digia.com/4.7/datastreamformat.html) А в C++ есть union ? То есть объявляем в одном месте памяти char[2] и int, пишем побайтно а читаем целые значения? Вроде не встречал упоминаний. 2 Igors Кольцевой буфер отложил пока - не совсем представляю, как реализовывать. Знания языка не хватает-c... Название: Re: Работа с буфером, типы данных. Отправлено: Igors от Июнь 21, 2013, 12:40 2 Igors А я Вам уже написал реализацию, writeData сделаете по образцуКольцевой буфер отложил пока - не совсем представляю, как реализовывать. Знания языка не хватает-c... Когда читаете вход - Вам известно какой это канал и сколько байт. Ну и складываете это в QList напр Код
Название: Re: Работа с буфером, типы данных. Отправлено: Hoksmur от Июль 01, 2013, 11:56 На неделю выпал, мои извинения.
Подскажите, как работает буфер? Если я правильно понял - размер ограничен 0xFFFF. То есть, если пишем в файл с использованием буфера - оно пишет, но не сразу. Файлы могут быть на порядки больше буфера. Как и когда уменьшается его размер? В чём вопрос: как читается начало буфера и уменьшается его размер? И как прочитать из того же буфера в тип short ? Название: Re: Работа с буфером, типы данных. Отправлено: Hoksmur от Июль 05, 2013, 05:01 Нет ответов, закрываю. Если что - лучше новый топик заведу. ???
|