Какие значения использовать для размера пакета и кадра с AudioUnit - PullRequest
4 голосов
/ 06 апреля 2011

Я знакомлюсь с тем, как использовать AudioUnit для воспроизведения звуков, и меня смущают представления о пакетах и ​​кадрах.Я хотел бы знать:

  • что такое определение пакета и фрейма в контексте AudioUnit

  • для каких сделокиспользование нескольких выборок для пакета и нескольких пакетов в кадре16-битный стереопоток.И mFramesPerPacket обычно равен 1, что делает кадр, пакет и семпл (все это стерео семплы) одинаковыми концепциями.

    Я ожидал, что пакет и / или кадр будут буфером семпловгруппа из 256 или 512 последовательных отсчетов, на которую драйвер может указывать и считывать линейно.Сокращение размера кадра / пакета до одного семпла, по-видимому, создает ненужную нагрузку на драйвер, который будет отвечать за воспроизведение данных.Что мне не хватает?

1 Ответ

7 голосов
/ 06 апреля 2011

Сначала несколько определений:

  • A frame - это одна выборка аудиоданных, которая представляет значение сигнала для одного канала в данный момент времени.
  • A package - это группа кадров, обычно подразумеваемая как набор кадров для всех каналов в данный момент времени.
  • A буфер - это группа кадров, доставленных для обработки.

Не следует путать пакет и кадр, и на самом деле mFramesPerPacket обычно следует установить на 1. Это не означает, что метод визуализации вашего AudioUnit будет получать обратный вызов каждый кадр. Если вы хотите контролировать, как часто это происходит, вам нужно установить для свойства kAudioSessionProperty_PreferredHardwareIOBufferDuration предпочтительный размер буфера. Установка этого свойства не гарантирует вам точный размер буфера, который вы запрашиваете, но система попытается дать вам что-то близкое к этому значению.

...