AUSampler - Загрузка инструментов
Аудиоустройство Сэмплера (AUSampler) является новым инструментом аудиоустройства, доступным со Львом Mac OS X и iOS 5.0. Это техническое примечание обсуждает, как загрузить инструментальные предварительные установки в аудиоустройство AUSampler.
Введение
Инструменты находятся наверху любого ответвления графика аудиоустройства и генерируют аудиовыход в ответ на команды, отправленные в него через MusicDevice APIs, например, MIDI отмечает на, примечание MIDI прочь, настройки громкости и т.д. Посмотрите MusicDevice.h, какая часть платформы AudioUnit для получения дополнительной информации.
Сэмплеры являются типом инструмента, которые организуют ряд звуковых записей (или «выборки») в conherent играемый инструмент. Например, Вы могли загрузиться в наборе выборок, представляющих ударную установку, акустическое фортепьяно или даже некоторый произвольный набор звуковых эффектов и т.д.
Для всестороннего введения в AUSampler и как работать с аудиоустройствами, см. Сеанс 2011 года WWDC № 411 - Музыка в iOS и Mac OS X.
Загрузка инструмента от Предварительно установленного Файла AUSampler
AUSampler имеет очень легкий собственный предварительно установленный формат списка свойств, сохраненный как текстовый файл (.aupreset), который делает очень простым передать сохраненные инструменты, создаваемые и прослушанные на рабочем столе на другой рабочий стол или приложения для iOS.
Перечисление 1 представляет методику для загрузки предварительно установленного файла AUSampler (.aupreset) создаваемое и сохраненное использование AULab. 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 { |
CFDataRef propertyResourceData = 0; |
Boolean status; |
SInt32 errorCode = 0; |
OSStatus result = noErr; |
// read from an .aupreset file specified in 'presetURL' |
// and convert into a CFData chunk |
status = CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, |
(CFURLRef) presetURL, |
&propertyResourceData, |
NULL, |
NULL, |
&errorCode); |
// check errors |
NSAssert (status == YES && propertyResourceData != 0, |
@"Unable to create data and properties from a preset. Error code:%d '%.4s'", |
(int) errorCode, (const char *)&errorCode); |
// convert the CFData chunk into a property list |
CFPropertyListRef presetPropertyList = 0; |
CFPropertyListFormat dataFormat = 0; |
CFErrorRef errorRef = 0; |
presetPropertyList = CFPropertyListCreateWithData(kCFAllocatorDefault, |
propertyResourceData, |
kCFPropertyListImmutable, |
&dataFormat, |
&errorRef); |
if (presetPropertyList != 0) { |
// set the kAudioUnitProperty_ClassInfo property for the Sampler |
// using the property list as the value |
result = AudioUnitSetProperty(self.mySamplerUnit, |
kAudioUnitProperty_ClassInfo, |
kAudioUnitScope_Global, |
0, |
&presetPropertyList, |
sizeof(CFPropertyListRef)); |
CFRelease(presetPropertyList); |
} else if (errorRef != 0) { |
result = CFErrorGetCode(errorRef); |
} |
// release the errorRef if there was one, and the CFDataRef |
if (errorRef) CFRelease(errorRef); |
CFRelease (propertyResourceData); |
return result; |
} |
Загрузка инструмента от банка звуков DLS2 или Файла SoundFont
AUSampler имеет возможность перевести DLS и предварительно установленные форматы SoundFont2 в ее собственный собственный внутренний формат, эффективно использующий большое количество существующих ранее инструментов.
AUSampler использует AUSamplerBankPresetDataструктура для описания предварительной установки для загрузки. Три числа необходимы для идентификации определенного инструмента в DLS или банке SoundFont2 - два числа описывают изменение банка, и одно число используется для предварительно установленного числа. Для выбора определенного инструмента следующее описание использовалось бы: старший значащий и младший значащий байт (MSB и LSB) для банка, плюс предварительно установленное число. Все три числа должны быть между 0 и 127.
Для большей части существующего Общего MIDI и Общих Стандартных совместимых банков, bankMSB элемент должен быть установлен в kAUSampler_DefaultMelodicBankMSB загрузить мелодичные инструменты, и kAUSampler_DefaultPercussionBankMSB для ударных инструментов. bankLSB элемент может быть установлен в kAUSampler_DefaultBankLSB загружаться от изменения банка по умолчанию (изменение 0). Если Вы знаете, что банк содержит другие изменения, можно использовать те значения.
Перечисление 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 bank preset data structure |
AUSamplerBankPresetData bpdata; |
bpdata.bankURL = (CFURLRef) bankURL; |
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB; |
bpdata.bankLSB = kAUSampler_DefaultBankLSB; |
bpdata.presetID = (UInt8) presetNumber; |
// set the kAUSamplerProperty_LoadPresetFromBank property |
result = AudioUnitSetProperty(self.mySamplerUnit, |
kAUSamplerProperty_LoadPresetFromBank, |
kAudioUnitScope_Global, |
0, |
&bpdata, |
sizeof(bpdata)); |
// 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, это будет использовать соблюдающие правила для разрешения каждого пути:
Если аудиофайл найден в первоначальном тракте, он загружается.
Если аудиофайл НЕ найден, AUSampler надеется видеть, включает ли путь соответствие части»
/Sounds/", "/Sampler Files/«или»/Apple Loops/«в том порядке.Если путь НЕ включает один из перечисленных подпутей, ошибка возвращается.
Если путь, DOES включает один из перечисленных подпутей, часть пути, предшествующего подпути, удален, и следующими константами расположения каталога заменяют в следующем порядке:
Bundle DirectoryNSLibraryDirectoryNSDocumentDirectoryNSDownloadsDirectory
Например, в приложении для 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/... |
История версии документа
| Дата | Примечания |
|---|---|
| 06.05.2014 | Передовая статья |
| 05.12.2012 | Добавленный раздел EXS24 для iOS 6.0 и OS X 10.8 + |
| 09.09.2011 | Новый документ, обсуждающий и демонстрирующий, как загрузить инструментальные предварительные установки в аудиоустройство AUSampler. |