Техническое примечание TN2283

AUSampler - Загрузка инструментов

Аудиоустройство Сэмплера (AUSampler) является инструментом аудиоустройства, доступным с OS X Lion и iOS 5.0 или более новыми системами. Это техническое примечание обсуждает, как загрузить инструментальные предварительные установки в аудиоустройство AUSampler.

Введение
Загрузка инструмента от Предварительно установленного Файла AUSampler
Загрузка инструмента от банка звуков DLS2 или Файла SoundFont
Создание пользовательской предварительной установки от отдельных аудиофайлов
Ссылка на внешние аудиофайлы
Инструментальные Файлы EXS24 (iOS 6 или позже и OS X 10.8 или позже)
История версии документа

Введение

Инструменты находятся наверху любого ответвления графика аудиоустройства и генерируют аудиовыход в ответ на команды, отправленные в него через MusicDevice APIs, например, MIDI отмечает на, примечание MIDI прочь, настройки громкости и т.д. Посмотрите MusicDevice.h, какая часть платформы AudioUnit для получения дополнительной информации.

Сэмплеры являются типом инструмента, которые организуют ряд звуковых записей (или «выборки») в conherent играемый инструмент. Например, Вы могли загрузиться в наборе выборок, представляющих ударную установку, акустическое фортепьяно или даже некоторый произвольный набор звуковых эффектов и т.д.

Для всестороннего введения в AUSampler и как работать с аудиоустройствами, см. Сеанс 2011 года WWDC № 411 - Музыка в iOS и Mac OS X.

Загрузка инструмента от Предварительно установленного Файла AUSampler

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

Перечисление 1 представляет методику для загрузки предварительно установленного файла AUSampler (.aupreset) создаваемое и сохраненное использование AULab использование kAUSamplerProperty_LoadInstrument свойство. AULab является Средством разработки Аудио Apple, установленным с XCode и расположенным в Developer/Applications/Audio папка.

  Загрузка перечисления 1 .aupreset файл.

// this method assumes the class has a member called mySamplerUnit
// which is an instance of an AUSampler
-(OSStatus) loadFromPresetURL: (NSURL *)presetURL {
 
    OSStatus result = noErr;
 
    AUSamplerInstrumentData auPreset = {0};
 
    auPreset.fileURL = (CFURLRef) presetURL;
    auPreset.instrumentType = kInstrumentType_AUPreset;
 
    result = AudioUnitSetProperty(self.mySamplerUnit,
                              kAUSamplerProperty_LoadInstrument,
                              kAudioUnitScope_Global,
                              0,
                              &auPreset,
                              sizeof(auPreset));
 
    return result;
}

Загрузка инструмента от банка звуков DLS2 или Файла SoundFont

AUSampler имеет возможность перевести DLS и предварительно установленные форматы SoundFont2 в ее собственный собственный внутренний формат, эффективно использующий большое количество существующих ранее инструментов.

AUSampler использует AUSamplerInstrumentDataструктура для описания предварительной установки для загрузки. Три числа необходимы для идентификации определенного инструмента в DLS или банке SoundFont2 - два числа описывают изменение банка, и одно число используется для предварительно установленного числа. Для выбора определенного инструмента следующее описание использовалось бы: старший значащий и младший значащий байт (MSB и LSB) для банка, плюс предварительно установленное число. Все три числа должны быть между 0 и 127.

Для большей части существующего Общего MIDI и Общих Стандартных совместимых банков, bankMSB элемент должен быть установлен в kAUSampler_DefaultMelodicBankMSB загрузить мелодичные инструменты, и kAUSampler_DefaultPercussionBankMSB для ударных инструментов. bankLSB элемент может быть установлен в kAUSampler_DefaultBankLSB загружаться от изменения банка по умолчанию (изменение 0). Если Вы знаете, что банк содержит другие изменения, можно использовать те значения.

instrumentType элемент может быть kInstrumentType_DLSPreset или kInstrumentType_SF2Preset как требуется, однако, обратите внимание на то, что оба перечисления определяются как то же значение.

Перечисление 2 представляет методику для загрузки банка SoundFont или DLS.

  Загрузка перечисления 2 DLS или банк SoundFont.

// this method assumes the class has a member called mySamplerUnit
// which is an instance of an AUSampler
-(OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber {
 
    OSStatus result = noErr;
 
    // fill out a instrument data structure
    AUSamplerInstrumentData instdata;
    instdata.bankURL  = (CFURLRef) bankURL;
    instdata.instrumentType = kInstrumentType_DLSPreset;
    instdata.bankMSB  = kAUSampler_DefaultMelodicBankMSB;
    instdata.bankLSB  = kAUSampler_DefaultBankLSB;
    instdata.presetID = (UInt8) presetNumber;
 
    // set the kAUSamplerProperty_LoadPresetFromBank property
    result = AudioUnitSetProperty(self.mySamplerUnit,
                                  kAUSamplerProperty_LoadInstrument,
                                  kAudioUnitScope_Global,
                                  0,
                                  &instdata,
                                  sizeof(instdata));
 
    // check for errors
    NSCAssert (result == noErr,
               @"Unable to set the preset property on the Sampler. Error code:%d '%.4s'",
               (int) result,
               (const char *)&result);
 
    return result;
}

Создание пользовательской предварительной установки от отдельных аудиофайлов

AUSampler также позволяет Вам загружать пользовательскую предварительную установку, создаваемую из ряда отдельных файлов аудиосэмпла.

Успешно создать пользовательскую предварительную установку требует некоторой подготовки каждого из используемых аудиофайлов. Каждый аудиофайл должен был быть отредактирован соответственно для содержания инструментальных данных (например, диапазон ключей, скоростной диапазон, корневой ключ) и информация о цикличном выполнении (если аудио должно быть циклично выполнено). AUSampler будет считывать эти информации из файлов и использовать их для размещения каждого файла в новой инструментальной предварительной установке.

Перечисление 3 представляет методику для создания предварительной установки из массива отдельных путей аудиофайла. urlArray должен быть массив NSURLs к аудиофайлам, которые Вы хотите использовать.

Перечисление 3  , создающее предварительную установку из отдельных аудиофайлов.

// this method assumes the class has a member called mySamplerUnit
// which is an instance of an AUSampler
-(OSStatus) createPresetFromSamples: (NSArray *)urlArray {
 
    CFArrayRef urlArrayRef = (CFArrayRef)urlArray;
 
    return result = AudioUnitSetProperty(self.mySamplerUnit,
                                         kAUSamplerProperty_LoadAudioFiles,
                                         kAudioUnitScope_Global,
                                         0,
                                         &urlArrayRef,
                                         sizeof(urlArrayRef));
}

Инструментальный блок kCAF_InstrumentChunkID часть Музыкальных Блоков Метаданных. Посмотрите CAFInstrumentChunk структура в CAFile.h. Аудиофайл AudioFileSetUserData API может использоваться для установки этих данных.

Цикличное выполнение указано с помощью свойства Region List (kAudioFilePropertyRegionList) описание сегмента циклично выполненных аудиоданных и может быть установлено с AudioFileSetProperty API.

Посмотрите AudioFile.h для получения дополнительной информации.

Ссылка на внешние аудиофайлы

Когда AUSampler попытается загрузить аудиофайлы через пути, предоставленные во внешнем файле refs часть .aupreset файла или ряда отдельного файла URLs, это будет использовать соблюдающие правила для разрешения каждого пути:

  1. Bundle Directory

  2. NSLibraryDirectory

  3. NSDocumentDirectory

  4. NSDownloadsDirectory

Например, в приложении для iOS, если первоначальный тракт был /Users/geddy/Library/Audio/Sounds/MyFavoriteHeadacheSound.caf и этот путь не был найден, AUSampler будет тогда искать аудиофайл в следующих четырех местах:

<Bundle_Directory>/Sounds/MyFavoriteHeadacheSound.caf
<NSLibraryDirectory>/Sounds/MyFavoriteHeadacheSound.caf
<NSDocumentDirectory>/Sounds/MyFavoriteHeadacheSound.caf
<NSDownloadsDirectory>/Sounds/MyFavoriteHeadacheSound.caf

Поэтому с помощью вышеупомянутого примера при перемещении предварительной установки, создаваемой в Рабочий стол к приложению для iOS необходимо поместить файл MyFavoriteHeadacheSound.caf в папку под названием Soundswithin комплект приложений и AUSampler сочтут аудиофайл ссылаемым предварительной установкой.

Инструментальные Файлы EXS24 (iOS 6 или позже и OS X 10.8 или позже)

Инструментальные файлы EXS24 содержат внутренний список файлов аудиосэмпла, которые должны быть загружены для каждого инструмента. Этот внутренний список использует полные пути для каждого файла примера, например инструментальные пути Гаражной группы, с которых все запускают /Library/Application Support/GarageBand/Instrument Library/Sampler/Sampler Files/....

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

Используя инструмент EXS24, читавший файлы аудиосэмпла из:

/Library/Application Support/Logic/EXS Factory Samples/10 Legacy Instruments/02 Guitars/Steel String Acoustic 2/...

Потребовал бы размещения тех тех же аудиофайлов в инструменте определенное дерево каталогов в Вашем пакете приложений, который похож на это:

EXS Factory Samples/10 Legacy Instruments/02 Guitars/Steel String Acoustic 2/...

Например, в приложении для iOS, если исходный настольный путь для инструмента был /Library/Application Support/Logic/EXS Factory Samples/10 Legacy Instruments/02 Guitars/Steel String Acoustic 2/, AUSampler повторно отобразит то, что он находит в инструментальных списках EXS24, пока путь выглядит одинаково от EXS Factory Samples/ на вниз.

<Bundle_Directory>/EXS Factory Samples/10 Legacy Instruments/02 Guitars/Steel String Acoustic 2/...

Это - истина для инструментов GarageBand также (те, которые установлены в каталоге GarageBand а не каталоге Logic). В случае GarageBand инструмент определенная часть пути указана деревом каталогов начиная с Файлов Сэмплера вместо Выборок Фабрики EXS.

<Bundle_Directory>/Sampler Files/Pop Brass Section/...

Когда AUSampler не может поддерживать определенную функцию, негативно влияющую на инструментальное использование, пытание загрузить инструмент возвратит a kAudioUnitErr_FormatNotSupported -10868 ошибка.

Однако, не все версии AUSampler возвратят ошибку формата для файлов, анализирующих правильно, даже если AUSampler не может обработать функцию/параметр. Единственная индикация относительно проблемы является предупреждающим сообщением к системному журналу как синтаксические анализы AUSampler и попытки выполнить инструмент лучшее, это может.

Инструментальная поддержка AUSampler:

- Все Логические инструменты Pro 9 фабрики

- Большое количество файлов Pro X EXS24 Логики фабрики, однако некоторые сложные инструменты могут не работать.

- Любой инструмент EXS24, создаваемый в Логическом Pro 9 или Логике Pro X не использование новых функций/параметров.

Вышеупомянутое не должно неблагоприятно влиять на разработчиков, использующих AUSampler для игры исходного содержания, создаваемого в Логике Pro X или Логическом Pro 9.



История версии документа


ДатаПримечания
25.03.2015

Обновленное перечисление 1 для использования kAUSamplerProperty_LoadInstrument, перечисление 2 для использования AUSamplerInstrumentData и добавленной информации относительно Логической инструментальной Pro X EXS24 совместимости.

06.05.2014

Передовая статья

05.12.2012

Добавленный раздел EXS24 для iOS 6.0 и OS X 10.8 +

09.09.2011

Новый документ, обсуждающий и демонстрирующий, как загрузить инструментальные предварительные установки в аудиоустройство AUSampler.