ios播放音频文件
来源:互联网 发布:python paho mqtt 编辑:程序博客网 时间:2024/05/21 17:07
AV 框架(Audio 和 Video 框架)里的 AVAudioPlayer 类能播放 iOS 支持的所有音频格式。AVAudioPlayer 实例的 delegate 属性允许我们通过事件获得通知,例如当音频播放被打断或者播放音频文件出错时。我们来看个例子,演示如何播放我们程序 bundle 中的音频文件:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
dispatch_queue_t dispatchQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(dispatchQueue, ^(void)
{
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"MySong"ofType:@"mp3"];//获取音频文件
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSError *error = nil;
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileDataerror:&error];
if (self.audioPlayer != nil)
{
self.audioPlayer.delegate = self;
if ([self.audioPlayer prepareToPlay] &&[self.audioPlayer play])
{
//成功播放音乐
} else {
//播放失败
}
} else {
/*
无法实例AVAudioPlayer
*/}
});
}
可以看到文件中的数据首先被加载到一个 NSData 实例,然后被传递到AVAudioPlayer类的 initWithData:error:方法。因为我们需要 MP3 文件的绝对路径来获取文件数据,我们调用 NSBundle 类的 mainBundle 方法来从程序的配置中获取信息。然后像代码中写的那样,用 NSBundle 类的 pathForResource:ofType:方法来得到指定类型资源的绝对路径。
在 viewDidLoad 方法中,我们用 GCD 来异步从歌曲数据中加载数据到 NSData 实例中,而且把数据提供给音频播放器。这么做是因为加载不同长度的音频文件中的数据需要很长时间,如果我们在主线程中做的话会有影响 UI 体验的风险。因此,我们利用一个全局的并发队列来确保代码不在主线程中运行
因为我们将 AVAudioPlayer 实例赋值给了 audioPlayer,属性,我们需要指定该属性如何定义:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface Playing_Audio_FilesViewController:UIViewController<AVAudioPlayerDelegate>
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@end
可以看到,我们把视图控制器作为了音频播放器的 delegate 。这样就可以每当播放歌曲被打断或结束时从系统中得到消息。掌握了这些信息后,我们就可以在程序中做出正确操作,例如开始播放另一个音频文件时
- 播放音频文件ios
- ios播放音频文件
- ios播放音频文件
- iOS音频文件播放切换扬声器
- IOS使用OpenAL播放音频文件
- iOS扫描本地音频文件及后台播放
- iOS 用 AVPlayer 播放一个本地音频文件
- 播放音频文件
- 播放音频文件
- iOS利用AudioQueue播放音频文件(mp3,aac,caf,wav等)
- iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
- IOS MPMoviePlayerViewController 获取当前音频文件播放时间点
- IOS-播放沙盒目录及本地音频文件
- IOS音频6:之基于FFmpeg播放音频文件(一)
- IOS音频7:之基于FFmpeg播放音频文件(二)
- iOS开发:获取一个视频、音频文件的播放时长
- 详解iOS App中调用AVAudioPlayer播放音频文件的用法
- <s:updownselect><s:optiontransferselect>列表框
- Linux pipe函数
- Android AIDL 跨进程服务 Proxy/Stub
- script bash 中 [[ ]] 与[ ] ,&& 与 -a,|| 与 -o的使用与区别
- 关于cocosbuilder,引入ccbfile后,播放的问题。
- ios播放音频文件
- WIN7和ubuntu下安装wingIDE后显示中文方法
- mybatis一个怪异的问题: Invalid bound statement (not found)
- 如何写结构优美的代码
- 解决使用SearchView和Filter时出现搜索词悬浮窗问题
- uploadify请求当前jsp页面所在的地址
- Linux无法显现中文问题
- Using the SQL*Loader Utility
- 64位无符号溢出后差1的问题: UINT(-3) + UINT64(5) ) % UINT64(5) 竟然等于了3 (后续避免使用UINT 溢出效果)