какао играет mp3 - PullRequest
       32

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

13 голосов
/ 18 июля 2010

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

Ответы [ 5 ]

40 голосов
/ 12 апреля 2012

ВОСКРЕСЕНИЕ В ПРОГРЕССЕ:

Зачем воскрешать этот вопрос? потому что гуглить "какао играет 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];
}

Наконец, кредит этого парня .

5 голосов
/ 18 июля 2010

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

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

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

1 голос
/ 18 сентября 2015
#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>

@interface SoundPlayer : NSObject {
  NSSound *sound;
  IBOutlet NSWindow *window;
  IBOutlet NSSlider *progress;
  BOOL loop;
}
- (IBAction)open: (id)sender;
- (IBAction)setLoop: (id)sender;
- (IBAction)play: (id)sender;
- (IBAction)stop: (id)sender;
- (IBAction)takeCurrentTimeFrom: (id)sender;
@end

#import "SoundPlayer.h"

@implementation SoundPlayer
- (IBAction)open: (id)sender
{
    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
    [openPanel runModalForTypes: [NSArray arrayWithObjects: @"aiff", @"mp3", @"m4a", nil]];
    [sound release];
    sound = [[QTMovie movieWithFile: [openPanel filename]
                              error: NULL] retain];
    [sound setAttribute: [NSNumber numberWithBool: loop]
                 forKey: QTMovieLoopsAttribute];
    [window setTitle: [[openPanel filename] lastPathComponent]];
}
- (IBAction)setLoop: (id)sender
{
    loop = ([sender state] == NSOnState);
    [sound setAttribute: [NSNumber numberWithBool: loop]
                 forKey: QTMovieLoopsAttribute];
}
- (IBAction)play: (id)sender
{
    NSTimeInterval duration;
    QTGetTimeInterval([sound duration], &duration);
    [progress setMaxValue: duration];
    [NSTimer scheduledTimerWithTimeInterval: 0.1
                                     target: self
                                   selector: @selector(updateIndicator:)
                                   userInfo: sound
                                    repeats: YES];
    [sound play];
}
- (void)updateIndicator: (NSTimer*)aTimer
{
    QTMovie *playingSound = [aTimer userInfo];
    if (!(sound == playingSound && ([sound rate] != 0)))
    {
        [aTimer invalidate];
        return;
    }
    NSTimeInterval currentTime;
    QTGetTimeInterval([sound currentTime], &currentTime);
    [progress setDoubleValue: currentTime];
}
- (IBAction)stop: (id)sender
{
    [sound stop];
}
- (IBAction)takeCurrentTimeFrom: (id)sender
{
    [sound setCurrentTime: QTMakeTimeWithTimeInterval([sender doubleValue])];
}
@end
1 голос
/ 18 июля 2010

Использование NSSound .

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

0 голосов
/ 18 июля 2010

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

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

...