音频播放和视频播放
简介
简单来说,音频可以分为2种
音效:
又称“短音频”,通常在程序中的播放时长为1~2秒
在应用程序中起到点缀效果,提升整体用户体验
音乐:
比如游戏中的“背景音乐”,一般播放时间较长
播放音频可以使用框架AVFoundation.framework
音效的播放
// 1.获得音效文件的路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil];
// 2.加载音效文件,得到对应的音效ID
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url),&soundID);
// 3.播放音效
AudioServicesPlaySystemSound(soundID);
音效文件只需要加载1次
音效播放常见函数总结
加载音效文件
AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)
释放音效资源
AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)
播放音效
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
播放音效带点震动
AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
音效格式
声音和音效小结——音频转换工具
转换aiff格式
pafconvert -f AIFF -d I8 filename
转换caf格式
pafconvert-f caff-d aac-b 32000 filename
批量转换
find. -name '*.mp3' -exec afconvert -f caff-d aac -b 32000 {} \;
音乐的播放
音乐播放用到一个叫做AVAudioPlayer的类
AVAudioPlayer常用方法
// 加载音乐文件
- (id)initWithContentsOfURL:(NSURL*)urlerror:(NSError**)outError;
- (id)initWithData:(NSData*)data error:(NSError**)outError;
// 准备播放(缓冲,提高播放的流畅性)
- (BOOL)prepareToPlay;
// 播放(异步播放)
- (BOOL)play;
// 暂停
- (void)pause;
// 停止
- (void)stop;
// 是否正在播放
@property(readonly,getter=isPlaying)BOOLplaying;
// 时长
@property(readonly)NSTimeIntervalduration;
// 当前的播放位置
@propertyNSTimeIntervalcurrentTime;
//播放次数(-1代表无限循环播放,其他代表播放numberOfLoops+1次)
@propertyNSIntegernumberOfLoops;
//音量
@propertyfloatvolume;
//是否允许更改速率
@propertyBOOLenableRate;
//播放速率(1是正常速率,0.5是一般速率,2是双倍速率)
@propertyfloatrate;
//有多少个声道
@property(readonly)NSUIntegernumberOfChannels;
//声道(-1是左声道,1是右声道,0是中间)
@propertyfloatpan;
//是否允许测量音量
@property(getter=isMeteringEnabled)BOOLmeteringEnabled;
//更新测量值
- (void)updateMeters;
// 获得当前的平均音量
- (float)averagePowerForChannel:(NSUInteger)channelNumber;
视频播放
如何播放视频?
MPMoviePlayerController的使用
加载视频资源(注意,如果url为nil同样可以加载)
NSAssert(self.url, @"URL不能为空");
[[MPMoviePlayerController alloc] initWithContentURL:self.url];
// 显示
[self.view addSubview:self.moviePlayer.view];
通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小
// 播放
[self.moviePlayer play];
// 全屏
[self.moviePlayer setFullscreen:YES animated:YES];
lMPMoviePlayerController的播放状态是通过通知中心监听的
常用监听通知事件
// 状态变化
MPMoviePlayerPlaybackStateDidChangeNotification
// 播放结束
MPMoviePlayerPlaybackDidFinishNotification
// 退出全屏
MPMoviePlayerDidExitFullscreenNotification
// 截屏完成
MPMoviePlayerThumbnailImageRequestDidFinishNotification
// 截屏方法
-requestThumbnailImagesAtTimes:timeOption: