Самый простой способ воспроизвести звук CAF на iPhone? - PullRequest
3 голосов
/ 30 ноября 2009

Насколько сложно это сделать? Кто-то сказал мне, что это невероятно трудно воспроизводить звук на iPhone. Не могу в это поверить. Но он сказал, что играть один трудно, но играть два или три одновременно невероятно сложно. Звучало страшно. Что вы, ребята, можете сказать по этому поводу?

Что я хочу сделать: у меня есть около 10 файлов CAF с небольшими звуковыми сигналами и звуками нажатия кнопок. Ничего особенного. Теперь я хочу воспроизводить эти файлы каждый раз, когда что-то происходит. И несколько вещей могут произойти одновременно. Так что может случиться так, что воспроизведения перекрываются.

Может быть, для этого я могу использовать фреймворк?

Ответы [ 4 ]

7 голосов
/ 30 ноября 2009

Воспроизведение небольших всплесков, звуковых сигналов и т. Д. (Звучит менее 30 секунд) на самом деле довольно просто - это именно то, для чего предназначен AudioServices. Вы должны сначала получить идентификатор для каждого звука, используя что-то вроде этого:

SystemSoundID soundID = 0;
CFURLRef soundFileURL = (CFURLRef)[NSURL URLWithString:somePathString];
OSStatus errorCode = AudioServicesCreateSystemSoundID(soundFileURL, &soundID);
if (errorCode != 0) {
  // Handle failure here
}

Затем вы будете удерживать этот идентификатор до тех пор, пока вам не понадобится его использовать, а затем вы сможете воспроизводить звук, просто используя эту строку:

AudioServicesPlaySystemSound(soundID);

Существует также AudioServicesPlayAlertSound(), который будет вести себя немного по-разному в зависимости от возможностей устройства, например вибрации iPhone, если устройство настроено пользователем. Вы должны прочитать заметки Apple в документах для более полного объяснения.

Обратите внимание, что вы имеете минимальный контроль над воспроизведением звуков с помощью AudioServices - вы не можете остановить их, управлять громкостью и т. Д. AudioServices предназначен только для звуков оповещения и других подобных коротких звуковых сигналов и сигналов. Конечно, есть AVAudioPlayer, но он немного тяжелее, чем вам нужно в этом случае. Вероятно, вам лучше придерживаться AudioServices, если одно из ограничений не делает его непригодным для использования.

Вам необходимо связать AudioToolbox.framework, чтобы использовать эти функции.

P.S. Добро пожаловать в переполнение стека! Не забудьте прочитать FAQ и пометить принятые ответы на свои вопросы (если они, конечно, заслуживают хорошего ответа).

2 голосов
/ 30 ноября 2009

Я работаю с IPhone всего несколько недель, и мне очень помогли на этом форуме, поэтому мне доставляет огромное удовольствие отвечать на вопросы.

Вам нужен гаджет AVAudioPlayer, который находится в документации Apple. Я только что закончил небольшое приложение для записи / воспроизведения, в основном используя полезную информацию из Главы 16 книги "Разработка iPhone SDK" (Дадни и Адамсон).

Из четырех книг по программированию для IPhone, в которые я вложил деньги, у него самые реалистичные приложения для работы.

Но, во всяком случае, посмотрите ссылку на класс AVAudioPlayer. Он довольно прост в использовании, и это говорит новичок.

Джон Донер

1 голос
/ 30 ноября 2016

Следующий код работает для меня, чтобы играть файлы .caf

SystemSoundID SoundID;
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"beep" ofType:@"caf"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &SoundID);
AudioServicesPlaySystemSound(SoundID);
0 голосов
/ 01 мая 2012

`# include

SystemSoundID soundID = 0;

CFURLRef soundFileURL = (CFURLRef) [NSURL URLWithString: @ "myfile.caf"];

OSStatus errorCode = AudioServicesCreateSystemSoundID (soundFileURL, & soundID);

AudioServicesPlaySystemSound (soundID);

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