Можно ли проверить, насколько заполнен аудиобуфер?

Можно ли проверить, насколько заполнен аудиобуфер? У меня есть работающее приложение, которое может рисовать звуковые буферы на экране, например, осциллятор, но когда я касаюсь экрана, я хочу остановить захват и нарисовать текущий буфер. Итак, мне нужно узнать, насколько заполнен буфер, и нарисовать его. Мой текущий размер буфера - 256.

Можно ли добиться этого с помощью аудиобуфера в iOS?

Спасибо.


person Roskvist    schedule 15.03.2013    source источник


Ответы (1)


Когда вы вызываете AudioUnitRender, он передает вам полный буфер.

При размере буфера 256 кадров, предполагая, что вы работаете со скоростью 44100 кадров в секунду (или даже 11025), маловероятно, что будет практическая разница в полном буфере или нет, поскольку мы говорим о такая невероятно малая доля секунды.

Я не уверен, что это за приложение, но вы можете в любом случае рассмотреть возможность хранения большего количества данных и рендеринга более одной длины буфера, чтобы в любом случае получить пригодные для использования данные. Например, нота A с частотой 220 Гц будет иметь лишь немного больше одного периода формы волны с частотой 44,1 Кбайт в буфере из 256 кадров.

person jnpdx    schedule 15.03.2013
comment
Я пытаюсь сделать что-то вроде этого: youtube.com/watch?v=-oN96cucBr4 Я начинаю пытаться просто слышать звук при касании, и когда происходит событие касания, сеанс должен прекратить запись и отображать частоты касания на экране. - person Roskvist; 17.03.2013
comment
Да, для этого вам определенно понадобится больше, чем объем данных в буфере. Не должно быть никаких практических причин не использовать обычную систему вызова AudioUnitRender для заполнения ваших буферов для этого приложения. - person jnpdx; 17.03.2013
comment
Хорошо .. Спасибо за ответ. Есть ли у вас предложения по хранению буфера (ов)? В настоящее время я изучаю memcpy. - person Roskvist; 17.03.2013
comment
Да, вы, вероятно, захотите сохранить его в массиве вашего собственного творчества, который вы сможете проанализировать позже. Поскольку вы получаете такой небольшой объем данных, также может быть целесообразно скопировать данные в NSMutableData. В зависимости от длины записи вы также можете захотеть записать данные в файл. - person jnpdx; 17.03.2013
comment
Но следует ли копировать полные аудиобуферы или данные в них? Что можно +? - person Roskvist; 18.03.2013
comment
Вам просто нужны данные в них - например, я в своем приложении вызываю OSStatus status = AudioUnitRender(inputAudioUnit, ioActionFlags, inTimeStamp, kInputBus, inNumberFrames, inputBufferList);, а затем копирую данные из inputBufferList->mBuffers[i].mData, где i - номер буфера. - person jnpdx; 18.03.2013
comment
Вы также можете посмотреть пример кода AurioTouch2 - он, вероятно, дает ответы на многие ваши вопросы: developer.apple.com/library/ios/#samplecode/aurioTouch2/ - person jnpdx; 18.03.2013
comment
Спасибо :) Вы сохраняете в нормальном массиве NSMutablearray? или NSData? - person Roskvist; 18.03.2013
comment
Ни то, ни другое, потому что мне нужно сохранять гораздо больше данных. Я кэширую некоторые данные в примитивном массиве, а остальные записываю на диск. - person jnpdx; 18.03.2013
comment
позвольте нам продолжить обсуждение в чате - person Roskvist; 18.03.2013