Простой способ воспроизведения звукового файла (.aif) - PullRequest
12 голосов
/ 17 мая 2011

Я делаю приложение для Mac OS X, используя XCode, и я хочу, чтобы оно воспроизводило звук оповещения, когда что-то происходит.

Какой самый простой код для воспроизведения звука в Objective-C / Cocoa?Обратите внимание, что мой звуковой файл - .aif.

Кроме того, где я могу поместить звуковой файл в свой проект?

Спасибо.

Ответы [ 4 ]

26 голосов
/ 17 мая 2011

Для воспроизведения звука на Mac вы можете использовать NSSound для основных действий или более надежную структуру CoreAudio для более сложных задач.


Если бы вы использовали NSSound для достижения этой цели, ваш код выглядел бы примерно так:

NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"replace-with-file-name" ofType:@"aif"];
NSSound *sound = [[NSSound alloc] initWithContentsOfFile:resourcePath byReference:YES];
// Do something with sound, like [sound play] and release.

OR

NSSound *sound = [NSSound soundNamed:@"replace-with-file-name-without-the-extension"];
// Do something with sound, like [sound play], but don't release (it's autoreleased).

Если бы вы использовали второй фрагмент, вам нужно было бы убедиться, что расширение звукового файла aiff, а не просто aif, поскольку +soundNamed: ищет очень специфические расширения файлов; Я не думаю, что aif находится в этом списке.

Использование CoreAudio более сложно, поэтому, если вы просто хотите поиграть в него и поиграться с очень простыми настройками, просто используйте NSSound

10 голосов
/ 17 мая 2011

Базовое воспроизведение звука довольно просто.

Вы можете использовать класс NSSound для загрузки файла несколькими различными способами, например, по имени:

NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];

Это необходимо сохранить, если вы хотите сохранить его.

в этом случае класс будет искать в определенных каталогах, включая ваш пакет приложений, звуковой файл с таким именем. Одним из важных примечаний является то, что файл должен иметь расширение .aifftwo f's), чтобы его можно было найти этим методом. *

Возможно, вы бы сохранили звуковой файл в папке Resources вашего проекта; вот где обычно хранятся «медиа» файлы.

Тогда вы можете играть в нее очень просто, возможно, нажав кнопку:

- (IBAction)playTheSound:(id)sender {
    NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
    [myAwesomeSound play];
}

Также возможно выполнить некоторые основные функции управления транспортировкой: приостановка, остановка, проверка завершения звука и т. Д. Подробности см. В Руководстве по темам программирования звука .


* Конечно, можно использовать и другие форматы.

1 голос
/ 17 мая 2011

Например, добавьте платформу AudioToolbox, добавьте звуковой файл в ваши ресурсы / проект, а затем добавьте следующее в ваш .h:

#import <AudioToolbox/AudioToolbox.h>

А потом: (после @interface {blah} в вашем .h)

- (IBAction) playSound;

Добавьте следующее в ваш .m: (замените 'Ping' и 'wav' на соответствующее имя и тип файла)

- (IBAction) playSound
{
    SystemSoundID soundID;
    NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"];
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
    AudioServicesPlaySystemSound(soundID); 
    [soundFile release];
}
0 голосов
/ 17 мая 2011

Вы можете скопировать и добавить свои файлы .aif в свой проект в XCode следующим образом:

  1. Ctrl + клик по папке Classes (изнутри xCode)
  2. Выберите Добавить>Существующие файлы
  3. Перейдите в каталог, содержащий ваш .aif и выберите его (их).Нажмите Добавить.(необязательно: установите флажок «Копировать элементы» и нажмите «Добавить».)

См. примеры Apple и полезная информация: здесь & здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...