какао играет в mp3

Есть ли простой способ загрузить, воспроизвести и управлять mp3-файлом из какао? Пытался погуглить, но, как и все, что связано с Apple, я получаю беспорядочные результаты и понятия не имею, с чего начать. Я так понимаю, есть и NSSound, но у него куча ограничений, а еще есть CoreAudio, но он очень сложный. Так может ли кто-нибудь указать мне правильное направление с этим? Спасибо.


person Marius    schedule 18.07.2010    source источник
comment
Извините, вы разрабатываете для iOS или Mac?   -  person shosti    schedule 18.07.2010
comment
Да, извините, забыл уточнить: AVAudioPlayer не будет работать: я разрабатываю для OSX   -  person Marius    schedule 18.07.2010
comment
Начиная с Mac OS X 10.7 Lion (возможно, даже 10.6.8?) AVFoundation работает! Следовательно, AVAudioPlayer.. См. ответ ниже..   -  person Mazyod    schedule 12.04.2012


Ответы (4)


ИДЕТ ВОСКРЕСЕНИЕ:

Почему возникает этот вопрос? потому что гугление «какао играет в mp3» приводит меня сюда, а потрясающего ответа 2012 года нет. Итак, вот потрясающий ответ 2012 года ;)

Используйте AVFoundation! Согласно Apple, он был интегрирован с Mac OS X Lion (я думаю), так что .. Вот как безболезненно проигрывать mp3:

1- связать AVFoundation Framework.

2- импортируйте его туда, где вы хотите воспроизвести свой потрясающий mp3

#import <AVFoundation/AVFoundation.h>

3- Добавьте переменную экземпляра audioPlayer для воспроизведения звука (по крайней мере, мне нравится это делать)

@interface WCMainWindow : ... {
    ...
    AVAudioPlayer* audioPlayer;
}

4- В вашей инициализации убедитесь, что вы инициализировали свой audioPlayer:

NSString* path = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"mp3"];
NSURL* file = [NSURL fileURLWithPath:path];
// thanks @gebirgsbaerbel

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
[audioPlayer prepareToPlay];

5- Включи свой потрясающий MP3!!

if ([audioPlayer isPlaying]) {
    [audioPlayer pause];
} else {
    [audioPlayer play];
}

Наконец, заслуга принадлежит этому парню .

person Mazyod    schedule 12.04.2012
comment
Как вы проверяете, можете ли вы это использовать? - person ; 09.07.2012
comment
Что ты имеешь в виду? Выполните описанные шаги и убедитесь, что вы добавили файл MP3 в свои ресурсы. Затем добавьте кнопку (действие), которая будет вызывать [audioPlayer play] - person Mazyod; 09.07.2012
comment
Метод URLWithString всегда возвращал мне ноль. Использование вместо этого [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"mp3"]]; устранило проблему. - person gebirgsbärbel; 14.06.2013

Я написал структуру на C++, которая может помочь: http://github.com/sbooth/SFBAudioEngine

Он поддерживает несколько аудиоформатов, имеет довольно удобный API и поставляется с образцом Cocoa.

Если вас не интересуют сторонние фреймворки, вам, вероятно, стоит использовать AudioQueue для управления воспроизведением. Для этого вы, вероятно, использовали бы AudioFile для декодирования MP3 и AudioQueue для воспроизведения. У Apple есть пример на http://developer.apple.com/mac/library/samplecode/AudioQueueTools/Introduction/Intro.html

person sbooth    schedule 18.07.2010

Используйте NSSound.

Вы не указали, что вы подразумеваете под «множеством ограничений», поэтому я не знаю, почему это не сработает для вас. Обратите внимание, что по сравнению с Leopard у него гораздо меньше ограничений; например, теперь вы можете играть на любом устройстве.

person Peter Hosey    schedule 18.07.2010

Помимо NSSound, вы могли бы рассмотреть QTMovieView. Звучит странно, но вы можете иметь скрытый QTMovieView в своем окне и использовать его для воспроизведения MP3.

Добавлено: QTMovieView устарело, начиная с OS 10.9. Поэтому, если вам не нужна поддержка версий ОС до 10.7 (когда AVFoundation появился на Mac), вам, вероятно, не следует использовать это.

person JWWalker    schedule 18.07.2010
comment
Я также видел примеры с QTKit без каких-либо представлений, но я не уверен, что это хороший способ сделать это, так как я не нашел, как искать файл или, возможно, даже добавить некоторые эффекты позже. - person Marius; 18.07.2010
comment
Я не уверен, что вы подразумеваете под поиском файла. - person JWWalker; 18.07.2010
comment
Ну, проще говоря, перейдите на какую-то конкретную позицию и продолжайте играть оттуда. - person Marius; 18.07.2010
comment
О, хорошо... при использовании QTMovieView вы можете использовать методы QTMovie, такие как setCurrentTime:, в связанном QTMovie. - person JWWalker; 19.07.2010
comment
Спасибо. Можно ли будет позже добавить некоторые звуковые эффекты в QTMovie? Как реверберация, эквалайзер и т.д.? Или это возможно только для CoreAudio? - person Marius; 19.07.2010
comment
Я не могу поклясться, что это невозможно сделать, но я не помню, чтобы видел что-то об использовании звуковых эффектов в QTMovie. - person JWWalker; 19.07.2010
comment
@JWWalker, я знаю, что вы написали свой ответ еще в 2010 году, но теперь, в 2016 году, я считаю, что QTMoviewView устарел. - person Kaydell; 29.08.2016