iOS 播放音乐和获取音乐的信息

首先要加入两个Frameworks,

#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>

然后在Storyboard对App界面进行以下的设计,

在PlayerViewController.h添加以下代码,主要是连接Outlets ,Target-Actions 和实现AVAudioPlayerDelegate.

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>

@interface PlayerViewController : UIViewController <AVAudioPlayerDelegate>
@property (weak, nonatomic) IBOutlet UIButton *vibrateButton;
@property (weak, nonatomic) IBOutlet UIButton *playButton;
@property (weak, nonatomic) IBOutlet UIButton *pauseButton;
@property (weak, nonatomic) IBOutlet UISlider *sliderRate;
@property (weak, nonatomic) IBOutlet UISlider *sliderPan;
@property (weak, nonatomic) IBOutlet UISlider *sliderVolume;
@property (weak, nonatomic) IBOutlet UILabel *averageLabel;
@property (weak, nonatomic) IBOutlet UILabel *peakLabel;
@property (strong,nonatomic) AVAudioPlayer *player;

- (IBAction)vibratePressed:(UIButton *)sender;
- (IBAction)playPressed:(UIButton *)sender;
- (IBAction)pausePress:(UIButton *)sender;
- (IBAction)rateSliderChanged:(UISlider *)sender;
- (IBAction)panSliderChanged:(UISlider *)sender;
- (IBAction)volumeSliderChanged:(UISlider *)sender;

@end

 

PlayerViewController.m代码:

#import "PlayerViewController.h"

@interface PlayerViewController ()

@end

@implementation PlayerViewController
@synthesize vibrateButton;
@synthesize playButton;
@synthesize pauseButton;
@synthesize sliderRate;
@synthesize sliderPan;
@synthesize sliderVolume;
@synthesize averageLabel;
@synthesize peakLabel;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *fileName=@"Whenever";
    NSString *fileType=@"mp3";
    NSString *soundFilePath=[[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
    NSURL *soundFileURL=[NSURL fileURLWithPath:soundFilePath];
    
    NSError *error;
    self.player=[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:&error];
    
    self.player.enableRate=YES;
    self.player.meteringEnabled=YES;
    self.player.delegate=self;
    self.sliderVolume.value=self.player.volume;
    self.sliderRate.value=self.player.rate;
    self.sliderPan.value=self.player.pan;
    
    [self.player prepareToPlay];
    NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateLabels) userInfo:nil repeats:YES];
    [timer fire];
}

- (void)updateLabels
{
    [self.player updateMeters];
    self.averageLabel.text=[NSString stringWithFormat:@"%f",[self.player averagePowerForChannel:0]];
    self.peakLabel.text=[NSString stringWithFormat:@"%f",[self.player peakPowerForChannel:0]];
    if ([self.player peakPowerForChannel:0]==0) {
        [self torchOnOff:YES];
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    }else{
        [self torchOnOff:NO];
    }
}

- (void)viewDidUnload
{
    [self setVibrateButton:nil];
    [self setPlayButton:nil];
    [self setPauseButton:nil];
    [self setSliderRate:nil];
    [self setSliderPan:nil];
    [self setSliderVolume:nil];
    [self setAverageLabel:nil];
    [self setPeakLabel:nil];
    [super viewDidUnload];
    self.player.delegate=nil;
    self.player=nil;    
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

- (IBAction)vibratePressed:(UIButton *)sender {
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}

- (IBAction)playPressed:(UIButton *)sender {
    [self.player play];
}

- (IBAction)pausePress:(UIButton *)sender {
    [self.player pause];
}

- (IBAction)rateSliderChanged:(UISlider *)sender {
    self.player.rate=sender.value;
}

- (IBAction)panSliderChanged:(UISlider *)sender {
    self.player.pan=sender.value;
}

- (IBAction)volumeSliderChanged:(UISlider *)sender {
    self.player.volume=sender.value;
}

#pragma mark -AVAudioPlayerDelegate
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
    NSLog(@"Error playing file: %@", [error localizedDescription]);
}

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player
{
    [self.player pause];
}

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player
{
    [self.player play];
}

#pragma mark -Controlling Flashlight
- (void)torchOnOff:(BOOL)onOff
{
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch]) {
        [device lockForConfiguration:nil];
        [device setTorchMode: onOff ? AVCaptureTorchModeOn : AVCaptureTorchModeOff];
        [device unlockForConfiguration];
    }
}

@end

为了更好地观察音乐的信息,我在音乐Peak值为0的时候,调用手机的震动器和LED。

  

  

 

posted @ 2012-08-24 19:05  PH  阅读(1942)  评论(0)    收藏  举报