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