音频播放和视频播放

2016-09-21  本文已影响20人  Hevin_Chen

简介

简单来说,音频可以分为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:

上一篇下一篇

猜你喜欢

热点阅读