可以在线播放音乐
https://github.com/tumtumtum/StreamingKit
A fast and extensible gapless AudioPlayer/AudioStreamer for OSX and iOS (iPhone, iPad)
player必须要写成实例变量,不然会被释放
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/music.mp3"];
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
//必须在prepare之前设置这个,rate才起作用
_player.enableRate = YES;
//播放速率
_player.rate = 2.0;
//音量
_player.volume = 0.5;
//循环次数
_player.numberOfLoops = 0;
//设置当前播放时间
_player.currentTime = 0;
NSLog(@"声道数目: %lu", _player.numberOfChannels);
NSLog(@"歌曲时长: %f", _player.duration);
//开启电平计数
_player.meteringEnabled = YES;
[_player updateMeters];
for (int i = 0; i<_player.numberOfChannels; i++) {
float power = [_player averagePowerForChannel:i];
float peak = [_player peakPowerForChannel:i];
NSLog(@"声道: %d, 平均电平: %f, 峰值电平: %f",i,power,peak);
}
[_player prepareToPlay];
[_player play];
注册播放被中断的通知
- (void)handleInterruption: (NSNotification*)notification {
NSLog(@"%@", notification.userInfo);
AVAudioSessionInterruptionType interruptType;
NSNumber *value = notification.userInfo[@"AVAudioSessionInterruptionTypeKey"];
interruptType = value.integerValue;
if ([notification.userInfo[@"AVAudioSessionInterruptionTypeKey"] isEqual:@(AVAudioSessionInterruptionTypeBegan)]) {
//中断开始,电话来了
[_player pause];
}
else if(interruptType == AVAudioSessionInterruptionTypeEnded) {
//中断结束, 是否恢复播放
if ([notification.userInfo[@"AVAudioSessionInterruptionTypeKey"] isEqual:@(AVAudioSessionInterruptionTypeBegan)]) {
[_player play];
}
}
}
iOS音频回话类别
- AVAudioSessionCategoryAmbient
这个类不会停止其他的声音,相反他允许你App的音频播放与其他应用声音之上,调用
AVAudioPlayer的prepareToPlay和play方法都会返回YES。但是用户锁屏时你的App将停止所有
正在播放的音频,仅当你的App是唯一播放音频文件的应用时,静音模式将停止你的Ap的音频回放。如
果正当iPod播放一首歌时,你开始播放音频,将设备设置为静音模式并不能停止你的音频回放。
- AVAudioSessionCategorySoloAmbient
这个非常像AVAudioSessionCategoryAmbient类别,除了会停止其他App的音频回放,比如iPod
程序,当设备设置为静音模式,你的音频回放将会停止。
- AVAudioSessionCategoryRecord
这会停止其他应用的声音并且让你的应用也不能初始化音频回放,在该模式下你只能进行录音,使用该
类别,调用AVAudioPlayer的prepareToPlay会返回YES,但是调用play会返回NO。主UI界面会正
常工作,这时,即使你的设备屏幕被用户锁定,应用录音仍然会继续。
- AVAudioSessionCategoryPlayback
这个类别会禁止其他应用的音频回放,你可以使用AVAudioPlayer的prepareToPlay和play方法在
你应用中播放声音,主界面会照常工作,这时,即使屏幕被锁或者设备为静音模式,你应用的音频回放
都会继续。
- AVAudioSessionCategoryPlayAndRecord
这个类别允许你的应用程序同时进行声音的播放和录制,当声音录制或者播放开始后,其他应用声音播
放会停止。当主页面会照常工作,这时,即使屏幕被锁定or设备为静音模式,音频回放和录制都会继
续。
- AVAudioSessionCategoryAudioProcessing
这个类别用于应用中进行音频处理的情形,而不是音频回放和录制。设置了这个模式,你在应用中就不
能播放和录制任何声音。调用AVAudioPlayer的prepareToPlay和play方法都将返回NO。其他应用
的音频回放,比如iPod也会在此模式下 停止。
网友评论