Загрузка аудиоданных

Существует несколько способов инициализировать 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..."];
}