C'è un modo semplice per caricare, riprodurre e controllare un file mp3 dal cacao? Ho provato a cercarlo su google, ma, come tutte le cose, ho risultati disordinati e non ho idea di dove cominciare. Come ho capito, c'è e NSSound, ma ha un sacco di limitazioni e poi c'è CoreAudio, ma è molto difficile. Quindi qualcuno può indicarmi la giusta direzione con questo? Grazie.cacao che suona un mp3
risposta
RISURREZIONE IN CORSO:
Perché resuscitare questa domanda? perché Googling "cacao che suona mp3" Mi porta qui, e non c'è una fantastica risposta del 2012. Quindi, ecco la fantastica risposta del 2012;)
Utilizzare AVFoundation! Secondo Apple, è stato integrato con Mac OS X Lion (credo), quindi .. Ecco come riprodurre mp3 indolore:
1- collegare il framework AVFoundation.
2- importazione dove si vuole giocare il vostro mp3 impressionante
#import <AVFoundation/AVFoundation.h>
3- Aggiungere una variabile di istanza Audioplayer per riprodurre il suono (che è come mi piace farlo, almeno)
@interface WCMainWindow : ... {
...
AVAudioPlayer* audioPlayer;
}
4- In te init, assicurarsi di inizializzare il vostro 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- Gioca il tuo Mp3 impressionante !!
if ([audioPlayer isPlaying]) {
[audioPlayer pause];
} else {
[audioPlayer play];
}
Infine, il credito va a this guy.
Come testate per sapere se siete in grado di usarlo? – Mark
Cosa intendi? Segui i passaggi illustrati e assicurati di aggiungere un file MP3 alle tue risorse. Quindi, aggiungi un pulsante (azione) che chiamerà '[riproduzione audioPlayer]' – Mazyod
Il metodo URLWithString ha sempre restituito zero per me. Utilizzo '[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: @" myFile "ofType: @" mp3 "]];' risolto invece il problema. –
Ho scritto un quadro in C++ che potrebbe aiutare: http://github.com/sbooth/SFBAudioEngine
Supporta diversi formati audio e dispone di un'API abbastanza benigna e viene fornito con un campione di cacao.
Se non sei interessato a framework di terze parti, la tua scommessa sarebbe probabilmente quella di utilizzare un AudioQueue per occuparti della riproduzione. Per fare ciò, probabilmente userò AudioFile per decodificare MP3 e AudioQueue per la riproduzione. Apple ha un esempio a http://developer.apple.com/mac/library/samplecode/AudioQueueTools/Introduction/Intro.html
Oltre NSSound
, è possibile considerare QTMovieView
. Sembra strano, ma puoi avere un QTMovieView
nascosto nella tua finestra e usarlo per riprodurre un MP3.
Aggiunto: QTMovieView
obsoleto a partire da OS 10.9. Quindi, a meno che non sia necessario supportare le versioni del sistema operativo prima del 10.7 (quando AVFoundation è arrivato sul Mac), probabilmente non dovresti usarlo.
Ho anche visto esempi con QTKit senza alcuna vista, ma non sono sicuro se questo è un buon modo per farlo, dal momento che non ho trovato come cercare un file o forse aggiungere alcuni effetti in seguito. – Marius
Non sono sicuro di cosa intendi con "cerca un file". – JWWalker
Bene, in termini più semplici, vai in una posizione specifica e continua a giocare da lì. – Marius
Utilizzare NSSound.
Non hai specificato cosa intendi per "molte limitazioni", quindi non so perché questo non funzioni per te. Nota che ha molte meno limitazioni da Leopard; puoi ora giocare a qualsiasi dispositivo, per esempio.
#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], ¤tTime);
[progress setDoubleValue: currentTime];
}
- (IBAction)stop: (id)sender
{
[sound stop];
}
- (IBAction)takeCurrentTimeFrom: (id)sender
{
[sound setCurrentTime: QTMakeTimeWithTimeInterval([sender doubleValue])];
}
@end
Mi spiace, stai sviluppando per iOS o Mac? – shosti
Sì, mi dispiace, ho dimenticato di chiarire: AVAudioPlayer non funzionerà: sto sviluppando per OSX – Marius
A partire da Mac OS X 10.7 Lion (possibilmente anche 10.6.8?) AVFoundation funziona! Quindi, AVAudioPlayer .. Vedi risposta sotto .. – Mazyod