2016-08-09 2 views
0

Я использую PortAudio для записи многоканальных аудиоданных. Я хочу сохранить данные из каждого канала в виде отдельного файла. Поэтому я должен выполнить некоторую работу File IO в программе. Поскольку в документе рекомендуется не выполнять какую-либо работу ввода-вывода в функции обратного вызова, так как они вызываются с высокой частотой.Где я должен выполнять загрузку файла IO в PortAudio, если не в обратных вызовах

Затем, как правильно выполнить работу ввода-вывода? Должен ли я начать другой поток?

Заранее благодарим за чтение моего сообщения!

ответ

0

Это то, что я хотел бы сделать:

1) иметь буфер для каждого канала. Эти буферы будут вашими буферами хранения, а не теми, которые у вас есть в обратном вызове. Я бы предложил declarinng эти буферы в ваших paData структурах. Вы должны будете определить длину буфера в зависимости от того, сколько у вас хранилища или ограничение по времени.

2) Когда вы останавливаете запись, вызовите метод, который выполняет ваш файл IO.

3) Используйте буферы, которые у вас были с шага 1, и напишите в файл.

4) Повтор

+0

Спасибо за ответ. Я нашел то, что разделяет тот же дух, что и вы сказали. Существует структура данных, называемая RingBuffer, которая обрабатывает запись и чтение с несколькими потоками параллельно. В функции обратного вызова я должен записать в кольцевой буфер, используя отдельный поток, чтобы прочитать кольцевой буфер и записать в файл. – Foreverniu

+1

Ах да! круговые буферы - это путь. Я бы читал круговые буферы в массивах ... так что если бы у вас был массив размером 2048, я бы прочитал его каждые 1024 образца или что-то в этом роде. Таким образом, вы не тратите время на чтение/запись каждого образца –

 Смежные вопросы

  • Нет связанных вопросов^_^