2009-12-29 10 views
13

Quelle est la meilleure façon de lire un fichier musical tel que Mp3 avec pause botton? très très simple un jeu de bouton et un autre bouton pause cette musique .. pouvez-vous écrire ce code!Lecture de fichiers MP3 avec iPhone SDK

Répondre

33

Voici les codes des actions requises, appSoundPlayer est une propriété de AVAudioPlayer déclarée dans le fichier h. Cet exemple joue également une chanson dans le dossier de ressources.

#pragma mark - 
    #pragma mark *play* 
    - (IBAction) playaction { 

     NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"songname" ofType:@"mp3"]; 
     NSURL *newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; 
     self.soundFileURL = newURL; 
     [newURL release]; 
     [[AVAudioSession sharedInstance] setDelegate: self]; 
     [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil]; 

    // Registers the audio route change listener callback function 
    AudioSessionAddPropertyListener (
            kAudioSessionProperty_AudioRouteChange, 
            audioRouteChangeListenerCallback, 
            self 
            ); 

    // Activates the audio session. 

    NSError *activationError = nil; 
    [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; 

    AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error: nil]; 
    self.appSoundPlayer = newPlayer; 
    [newPlayer release]; 
    [appSoundPlayer prepareToPlay]; 
    [appSoundPlayer setVolume: 1.0]; 
    [appSoundPlayer setDelegate: self]; 
    [appSoundPlayer play]; 


    [stopbutton setEnabled:YES]; 
    [playbutton setEnabled: NO]; 
    playbutton.hidden=YES; 
    pausebutton.hidden =NO; 
}//playbutton touch up inside 

#pragma mark - 
#pragma mark *pause* 
-(IBAction)pauseaction { 
    [appSoundPlayer pause]; 
    pausebutton.hidden = YES; 
    resumebutton.hidden = NO; 

}//pausebutton touch up inside 

#pragma mark - 
#pragma mark *resume* 
-(IBAction)resumeaction{ 
    [appSoundPlayer prepareToPlay]; 
    [appSoundPlayer setVolume:1.0]; 
    [appSoundPlayer setDelegate: self]; 
    [appSoundPlayer play]; 
    playbutton.hidden=YES; 
    resumebutton.hidden =YES; 
    pausebutton.hidden = NO; 

}//resumebutton touch up inside 

#pragma mark - 
#pragma mark *stop* 
-(IBAction)stopaction{ 

    [appSoundPlayer stop]; 
    [playbutton setEnabled:YES]; 
    [stopbutton setEnabled:NO]; 
    playbutton.hidden=NO; 
    resumebutton.hidden =YES; 
    pausebutton.hidden = YES; 

}//stopbutton touch up inside 
+0

avez-vous du code d'échantillon de ce tutoriel? – Momi

+1

ces erreurs sont dues à ce que vous ne les avez pas déclarées dans le fichier h. – Nithin

+0

Ce code a-t-il fonctionné pour le NSURL ... en jouant la mise en mémoire tampon audio du serveur? –

7

bien here est un bon tutoriel disponible.

Le thème est

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]]; 

    NSError *error; 
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = -1; 

[audioPlayer play]; 

et quand vous voulez faire une pause;

[audioPlayer pause]; 

espérons que cela aide.

+1

merci beaucoup j'aime http://stackoverflow.com et bien sûr vous: D – Momi

+0

OK, j'ai encore un problème. quand j'appuie sur le bouton de lecture plusieurs fois la musique joue encore et encore ... !! comment peut jouer de la musique 1 fois? et à propos du bouton pause, qui s'en occupe? désolé iam amateur: – Momi

25

Pour des sons courts ou lorsque le MP3 ne joue pas bien sur le code proposé, vous pouvez toujours utiliser:

SystemSoundID soundID; 
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/sound.mp3", [[NSBundle mainBundle] resourcePath]]]; 

AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID); 
AudioServicesPlaySystemSound (soundID); 

Ne pas oublier d'ajouter:

#import <AudioToolbox/AudioToolbox.h> 
+0

merci beaucoup pour cela! – rwarner

+1

Merci, a travaillé pour moi. Avec ARC: AudioServicesCreateSystemSoundID ((__ bridge CFURLRef) url, & soundID); –

0

L'exemple de code oalTouch sur le site Web des développeurs Apple iOS fait ce que vous voulez et est prêt à fonctionner.

Il montre également comment tester si une autre application (par exemple iPod) joue déjà un fichier, ce qui est pratique si vous voulez permettre à vos utilisateurs d'écouter leur propre musique au lieu de la vôtre.

5

Je crains que la réponse non indiquée travaille plus dans iOS 7 et supérieur. Vous devez utiliser le code suivant:

dans le fichier d'en-tête (.h)

Afin de gérer les méthodes de déléguer comme lorsque le jeu de l'audio a terminé audioPlayerDidFinishPlaying :, hériter de AVAudioPlayerDelegate.

@property (nonatomic, strong) AVAudioPlayer *player; 

dans le fichier de mise en œuvre (.m)

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: resourceName 
                  ofType: @"mp3"]; 
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; 

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL 
                    error: nil]; 
_player = newPlayer; 
[_player prepareToPlay]; 
[_player setDelegate: self]; 
[_player play]; 
1

J'aime code simple et voici ma solution: (. Rappelez-vous d'ajouter le bouton interrupteur pour obtenir le jeu de musique Amusez-vous bien)

#import "ViewController.h" 
#import <AVFoundation/AVFoundation.h> 

@interface ViewController() 
{ 
    NSURL*     bgURL; 
    AVAudioPlayer*   bgPlayer; 
} 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    bgURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp3"]]; 
    bgPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:bgURL error:nil]; 
} 

#pragma mark AVAudioPlayer 
- (IBAction)toggleMusic:(UISwitch*)sender { 
    NSLog(@"togging music %s", sender.on ? "on" : "off"); 

    if (bgPlayer) { 

     if (sender.on) { 
      [bgPlayer play]; 
     } 
     else { 
      [bgPlayer stop]; 
     } 
    } 
}