Как выделить память в расширении аудиоустройства (процесс в реальном времени) для воспроизведения аудиофайла? - PullRequest
1 голос
/ 18 апреля 2020

Я работаю над созданием аудиоустройства v3. Я добился приличного прогресса до этого момента, я сделал главное приложение, которое загружает все мои сторонние плагины. Я создал плагин auv3, который обрабатывает аудио и может быть загружен другими хостами.

Теперь я хочу создать au, который загружает аудиоданные с диска и сканирует данные в произвольных положениях с точностью выборки (временная протяженность, детализация и т. Д. c). Я думал, что это будет отличное дополнение для воспроизведения сэмплов для AudioKit.

Так что это будет что-то делать на уровне AKSampler в платформе AudioKit. Просматривая источник AK, я чувствую, что что-то упустил.

Просматривая github, я попал в такие места, как здесь: https://github.com/AudioKit/AudioKit/tree/118affee65f4c9b8d4780ef1a03a6d03004bbcee/AudioKit/Common/Nodes/Playback/Samplers

, затем я посмотрел здесь: https://github.com/AudioKit/AudioKit/blob/118affee65f4c9b8d4780ef1a03a6d03004bbcee/AudioKit/Common/Nodes/Playback/Samplers/Disk%20Streamer/AKDiskStreamerAudioUnit.mm

, который привел меня сюда: https://github.com/AudioKit/AudioKit/blob/d69dabf090a5e78d4495d938bf6c0aea9f672630/AudioKit/Common/Nodes/Playback/Samplers/Disk%20Streamer/AKDiskStreamerDSPKernel.hpp

и затем в конечном итоге здесь: https://github.com/AudioKit/AudioKit/blob/d69dabf090a5e78d4495d938bf6c0aea9f672630/AudioKit/Core/Soundpipe/modules/wavin.c

Я не ищу информацию об AKSampler, в частности, о том, как в целом загружаются аудиофайлы и как это имеет смысл в реальном времени в процессе расширения au.

Я нигде не мог найти код IPC / XP C, поэтому я предполагаю, что речь не идет о кольцевых буферах, соединяющихся с другими процессами или чем-то еще.

Распределяет ли AudioKit память в процессе реального времени для воспроизведения аудиофайлов? Это может показаться go против всех предупреждений опытных аудиопрограммистов (статьи типа http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing), но я не могу понять, что делается в AudioKit и вообще в iOS ..

что я просто не понимаю или не нахожу? : D

1 Ответ

1 голос
/ 19 апреля 2020

Открытие файлов и выделение памяти для чтения файлов следует выполнять вне контекста аудио в реальном времени, возможно, во время выбора файла пользовательского интерфейса, а не внутри обратного вызова аудиоустройства.

Один из способов получить произвольный доступ к семплам внутри обратным вызовом AU является сопоставление памяти файла (mmap C API), а затем касание каждого семпла в карте памяти до передачи указателя памяти (unsafe raw et c.) и длины файла ( привязанные границы) к аудиоустройству. Затем вы можете выполнять виртуальное чтение файла произвольного доступа внутри обратного вызова с фиксированной задержкой.

Один из способов прикоснуться к каждой выборке в массиве, выполнив контрольную сумму (и, возможно, отбросив результат позже). Это чтение памяти требуется для того, чтобы система виртуальной памяти iOS сменила блоки из файловой виртуальной машины в оперативную память, чтобы чтение системы хранения не происходило в контексте реального времени.

...