Где в AudioQueueBuffer происходит AudioQueueLevelMeterState? - PullRequest
0 голосов
/ 07 апреля 2011


Я хочу сделать что-то вроде нарезки ударов.

Я могу настроить таймер для периодического получения AudioQueueLevelMeterState.

Однако, похоже, не существует способачтобы связать время запроса AudioQueueLevelMeterState с содержимым AudioQueueBuffer?

Например, допустим, что мой буфер имеет длину 1 секунду.Я запускаю таймер, который запрашивает состояние счетчика 60 раз в секунду.Через 0,5 секунды я получаю желаемый уровень.Следовательно, я хочу взять часть этого аудио-буфера с момента, когда я получу уровень, то есть оставшиеся 0,5 секунды.

Есть идеи?Любые способы сделать все это в буфере, так сказать?

Любой совет высоко ценится.

Большое спасибо, xj

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Получил это отсортировано в конце концов.Я выбрал AudioQueue как способ записи аудио и вместо этого выбрал AudioUnit.AudioQueue было настолько сложным, что в конце концов мне пришлось серьезно задуматься, был ли это правильный API-интерфейс для того, что я хотел сделать.На некоторых форумах люди говорили, что с AudioUnits трудно работать, но, честно говоря, после всего, что я пережил с AudioQueue, AudioUnit был довольно простым.

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

0 голосов
/ 08 апреля 2011

Ознакомьтесь с примером проекта Apple Speak Here.У них есть нечто подобное, что вы, возможно, сможете взломать.

...