uwp版的音乐播放器练手,iOS学习笔记23

作者: 化工塑胶  发布:2019-10-07

UWP项目之音乐播放器

    这个项目本来是我女朋友的一个小作业,她做不出来,结果只能是我来代劳。经过几天的时间虽然赶出来了,但是自己不是很满意,还有很多不满意的地方,因此决定在最近的一段时间内,重新完成。本系列只是记录该项目的一些编写过程,挑战一下自己实践能力,不会深入介绍内在的原理,也不能保证定期更新,更不能保证完成。

一、音频

在iOS中,音频播放从形式上可以分为音效播放和音乐播放。

  • 音效:
  • 主要指一些短音频的播放,这类音频一般不需要进行进度、循环等控制。
  • 在iOS中,音效我们是使用AudioToolbox.framework框架实现。
  • 音乐:
  • 主要指一些较长的音频,通常需要对播放进行精确控制。
  • 在iOS中,音乐我们是使用AVFoundation.framework框架实现。

图片 1

开发过程:

二、音效

AudioToolbox.framework框架是一套基于C语言的框架它的实现原理是将短音频注册到系统声音服务(SystemSoundService)

1.音乐播放器页面之汉堡菜单

系统声音服务的一些限制:
  1. 音频播放时间不能超过30s
  1. 数据必须是PCM或者IMA4格式,现在的基本都符合
  2. 音频文件必须是CAF、AIF、WAV的一种,实际上有些MP3格式也可以播放。

2.音乐播放器后台之歌曲读取

使用步骤:
  1. 导入AudioToolbox.framework框架,添加头文件:
#import <AudioToolbox/AudioToolbox.h>
  1. 获取音效文件的路径URL
  2. 添加进系统声音服务,获得系统声音ID,ID是区分不同音效的唯一标示
void AudioServicesCreateSystemSoundID( CFURLRef inFileURL, /* 音效文件URL,需要把NSURL桥接成CGURLRef */ SystemSoundID *outSystemSoundID /* 返回音效唯一标示ID */);
  1. 如果需要监听音效播放完成,需要绑定回调函数
void AudioServicesAddSystemSoundCompletion( SystemSoundID inSystemSoundID, /* 音效ID */ CFRunLoopRef inRunLoop, /* 所在循环,一般为NULL */ CFStringRef inRunLoopMode,/* 循环模式,一般为NULL */ void (SystemSoundID,void*) inCompletionRoutine,/* 回调C语言函数指针 */ void *inClientData /* 回调函数的参数 */);
  1. 开始播放,有两种播放模式:
/* 开始播放音效 */void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);/* 开始播放音效并带震动 */void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID);

3.音乐播放器之加载我的音乐

下面是使用实例:
- viewDidLoad{ [super viewDidLoad]; [self playSoundEffect:@"bellTone.wav"];}#pragma mark -音效/* 音效播放完成的回调函数,这个是C语言函数,第一个参数是音效ID,第二个是万能参数 */void soundCompleteCallBack(SystemSoundID soundID, void *clientData){ NSLog;}- playSoundEffect:(NSString *)name { //获取音效文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:nil]; //创建音效文件URL NSURL *fileUrl = [NSURL URLWithString:filePath]; //音效声音的唯一标示ID SystemSoundID soundID = 0; //将音效加入到系统音效服务中,NSURL需要桥接成CFURLRef,会返回一个长整形ID,用来做音效的唯一标示 AudioServicesCreateSystemSoundID((__bridge CFURLRef), &soundID); //设置音效播放完成后的回调C语言函数 AudioServicesAddSystemSoundCompletion(soundID,NULL,NULL,soundCompleteCallBack,NULL); //开始播放音效 AudioServicesPlaySystemSound;}

4.音乐播放器之音频播放

三、音乐

如果播放较大的音频,需要对其进行精确控制,我们需要使用到另外一个框架,即:AVFoundation.framework框架,它支持多种音频格式,可以进行精确控制。音乐播放功能我们使用到的是AVFoundation.frameworkAVAudioPlayer音乐播放器来实现。

5.音乐播放器页面之音频播放页面设计

下面有一些AVAudioPlayer类的常用属性:
@property (readonly, getter=isPlaying) BOOL playing;//是否正在播放@property NSTimeInterval currentTime;//当前已经播放的时间@property  NSTimeInterval duration;//播放的总时间@property float volume;//音量大小@property float rate;//播放速率,默认为1.0@property  NSURL *url;//音乐文件的URL

源代码:

github地址

下面是常用的对象方法:
/* 初始化方法 */- (instancetype)initWithContentsOfURL:url error:(NSError **)outError;- prepareToPlay;/* 把音乐文件加载到缓存区 */- play;/* 开始播放音乐 */- playAtTime:(NSTimeInterval)time;/* 在指定时间开始播放音乐 */- pause;/* 中断音乐,可以通过调用play方法继续播放 */- stop;/* 终止音乐,无法继续播放 */
常用的代理方法:
/* 播放完成时调用 */- audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:flag;/* 音频解码发生错误时调用 */- audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;

本文由88必发手机版发布于化工塑胶,转载请注明出处:uwp版的音乐播放器练手,iOS学习笔记23

关键词:

上一篇:【必发在线】maven初学
下一篇:没有了