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。

浙公网安备 33010602011771号