более быстрое обновление peakpowerforchannel

#iphone #microphone

#iPhone #микрофон

Вопрос:

Я использую NSTimer для обновления пиковой мощности с iphone. Судя по мониторингу, он обновляется не очень быстро. Мне нужна высокая частота обновления пиковой мощности, порядка 100 микросекунд (100 мкс). Я также пытаюсь с помощью usleep (100) обновлять каждые 100us. Все еще очень медленно. Может ли кто-нибудь помочь мне указать, как этого добиться? Я думаю, мне нужно использовать этот код для измерения расстояния. Спасибо.

Ответ №1:

вы записываете аудио (запись, ввод или файл), получаете доступ к его сэмплам из потока pcm cbr (несжатый, с фиксированной частотой дискретизации) и считываете сэмплы интересующего вас диапазона. учитывая высокую частоту, вам нужно будет проанализировать лишь небольшое количество выборок (2-5, в зависимости от частоты дискретизации). возможно, вам потребуется выполнить интерполяцию для повышения точности при таком небольшом количестве выборок.

Комментарии:

1. Спасибо. Чтобы иметь возможность читать из потока pcm cbr, о котором вы упомянули, означает ли это, что я должен изучить «Буфер аудио очередей и AudioQueueLevelMeterState», чтобы получить более быструю выборку?

2. Аудиокабель — один из возможных подходов. чтобы прочитать входные образцы, вы получаете к ним доступ из mAudioData поля AudioQueueBufferRef переданной вашей AudioQueueInputCallback функции. состояние измерителя уровня вряд ли обеспечит требуемую степень детализации. итак, вы просто читаете интересующие вас входные образцы из mAudioData поля. чтобы приблизить расстояние на основе частоты, вам нужно знать частоту дискретизации входных выборок, иметь некоторую привязку к синхронизации и определить задержку ввода-вывода iostreams. очереди аудио требуют высокой задержки (продолжение)

3. (продолжение) поэтому вам может потребоваться перейти на более низкий уровень CoreAudio apis для достижения ввода-вывода с наименьшей задержкой — если это вызывает беспокойство.

4. Я буду иметь это в виду и попытаюсь выяснить, как это сделать. Еще раз спасибо.

5. всегда пожалуйста. наивная реализация просто сканировала бы максимальное абсолютное значение выборок в диапазоне. в течение таких коротких периодов у вас может возникнуть ошибка «слишком много», если вы не интерполируете там, где это необходимо. В AudioQueue должен быть некоторый пример кода, с которым вы можете начать.