Загрузка аудиоданных
Существует несколько способов инициализировать NSSound экземпляр с аудиоданными. Обратите внимание на то, что NSSound объекты являются неизменными поэтому, как только Вы создали экземпляр с одним из init... методы, Вы не можете изменить экземпляр или связать различные аудиоданные с ним.
Загрузка звуков по имени
Самый простой способ создать NSSound экземпляр использует soundNamed: метод класса. Названные звуки являются экземплярами NSSound этому дали имя с помощью setName: метод. NSSound класс сохраняет список именованных экземпляров создаваемым Вашим приложением, а также именованная система звучит предоставленной Набором Приложения. Системные звуки (расположенный в /System/Library/Sounds) были названы Набором Приложения с помощью их имен файлов без расширения файла. Следующий листинг кода показывает Вам, как загрузить системный звук по имени:
NSSound *mySound = [NSSound soundNamed:@"Temple"]; |
soundNamed: метод сначала ищет существующий звуковой файл с именем, которое Вы указали, и если Вы найдены, это возвращается Вам. Так как этот пример относится к стандартному системному звуку, нет никакой потребности искать далее.
Следующий листинг кода показывает Вам, как загрузить звуковой файл из дискового использования soundNamed:.
NSSound *airplaneSound = [NSSound soundNamed:@"Airplane_44KStereo"]; |
Если нет никакого известного звука с именем, Вы указали, soundNamed: ищет основной пакет Вашего приложения, и затем /Library/Sounds и ~/Library/Sounds каталоги для звуковых файлов с указанным именем. Если никакие данные не могут быть найдены для имени, никакой объект не создается и nil возвращается.
Обратите внимание на то, что еще раз расширение файла не используется при загрузке звуковых файлов с помощью soundNamed: метод. Также обратите внимание на то, что файлы AIFF должны использовать .aiff расширение файла (нет .aif) чтобы быть расположенным soundNamed:.
Загрузка звуков путем
Если Вы хотите загрузить звуковые файлы из где-нибудь в файловой системе кроме пакета Вашего приложения, можно использовать метод initWithContentsOfFile:byReference:. Как Вы ожидали бы, этот метод пытается инициализировать недавно выделенный NSSound экземпляр с аудиоданными в указанном файле. Если byReference: параметр YES, только имя звука сохранено NSSound экземпляр, когда заархивировано с помощью encodeWithCoder:, иначе аудиоданные архивируются вместе с экземпляром. Следующий листинг кода показывает Вам, как создать NSSound экземпляр и инициализирует его со звуковым файлом, данным путь файлу.
sound = [[NSSound alloc] initWithContentsOfFile:@"/Volumes/Audio/Truck.aiff" |
byReference:YES]; |
Загрузка звуков URL
Загрузка звука от URL очень подобна использованию пути, как продемонстрировано в разделе Loading Sounds By Pathname. Листинг кода ниже шоу, как использовать URL вместо пути. Обратите внимание на то, что только файловая система URLs в настоящее время поддерживается.
NSURL *soundfileURL = [NSURL fileURLWithPath:@"/Volumes/Audio/Truck.aiff"]; |
NSSound *sound = [[NSSound alloc] initWithContentsOfURL:soundfileURL |
byReference:NO]; |
Загрузка звуков Используя открытое диалоговое окно
Перечисление 1 показывает, как загрузить звуковой файл с помощью NSOpenPanel объект.
Перечисление 1 , Загружающееся звуковой файл с помощью открытого диалогового окна
- (IBAction)loadSoundOpenPanel:(id)sender |
{ |
int result; |
NSOpenPanel *oPanel = [NSOpenPanel openPanel]; |
NSArray *filesToOpen; |
NSString *theFileName; |
NSMutableArray *fileTypes = [NSSound soundUnfilteredTypes]; |
// All file types NSSound understands |
[oPanel setAllowsMultipleSelection:NO]; |
result = [oPanel runModalForDirectory:NSHomeDirectory() file:nil |
types:fileTypes]; |
if (result == NSOKButton) { |
filesToOpen = [oPanel filenames]; |
theFileName = [filesToOpen objectAtIndex:0]; |
NSLog(@"Open Panel Returned: %@.\n", theFileName); |
[self _loadSoundFromPath:theFileName]; |
} else |
[infoTextField setStringValue:@"Sound failed to load..."]; |
} |