设为首页 加入收藏

TOP

iOS进阶学习-多媒体(一)
2017-10-13 10:28:48 】 浏览:9933
Tags:iOS 进阶 学习 多媒体

一、音频

  1、iOS 里面共有四种专门实现播放音频的方式:

  • System Sound Services(系统声音服务)。
  • OpenAL(跨平台的开源的音频处理接口)。
  • Audio Queue Services(播放和录制音频服务)。
  • AVAudioPlayer(高级音频播放器)。
  • 在这里我们主要介绍一下System Sound Services和AVAudioPlayer

  2、System Sound Services

  • System Sound Services 是最底层也是最简单的声音播放服务,通过调用 AudioServicesPlaySystemSound 这个函数就可以播放一些简单的音频文件。
  • 适用场景:适合播放一些很小的提示或者警告音,AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service)。
  • 局限性:
  • 声音长度要小于30s
  • 格式:必须是PCM或IMA4
  • 不能控制播放的进度
  • 调用方法后立即播放声音
  • 没有循环播放和立体声音播放
  • 示例代码:(用storyboard创建一个按钮,关联点击事件)
#import "ViewController.h"

//引入头文件
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark - 播放音乐
- (IBAction)playAction:(id)sender {
    
    //得到的主要应用程序包
    CFBundleRef mainBundle;
    SystemSoundID soundFileObject;
    mainBundle = CFBundleGetMainBundle ();
    
    //声音文件的URL
    CFURLRef soundFileURLRef  = CFBundleCopyResourceURL (mainBundle,CFSTR ("蔡琴 - 爱断情伤"),CFSTR ("wav"),NULL);
    
    //注册声音到系统
    AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
    
    
    // AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。
    AudioServicesAddSystemSoundCompletion (soundFileObject, NULL , NULL ,&completionCallback,(__bridge void *) self );
    
    
    //播放注册的声音,(此句代码,可以在本类中的任意位置调用,不限于本方法中)
    AudioServicesPlaySystemSound(soundFileObject);
    
    //让手机震动
    //    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

}

static  void  completionCallback (SystemSoundID  ssID, void* clientData) {
    // Play again after sound play completion
    NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData);
    
    AudioServicesPlaySystemSound(ssID);
}

void playFinished(SystemSoundID  ssID, void* clientData)
{
//    unsigned long ID = ssID; // ssID 不能直接作为参数打印出来,需要中转一次

    NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData);

    AudioServicesPlaySystemSound(ssID);

    // 移除完成后执行的函数
//    AudioServicesRemoveSystemSoundCompletion(ssID);

    // 根据ID释放自定义系统声音
//    AudioServicesDisposeSystemSoundID(ssID);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

  3、AVAudioPlayer:是一个高级的播放器,它支持广泛的音频格式,如下:

  • AAC
  • AMR(AdaptiveMulti-Rate, aformatforspeech)
  • ALAC(AppleLossless)
  • iLBC(internetLowBitrateCodec, anotherformatforspeech)
  • IMA4(IMA/ADPCM)
  • linearPCM(uncompressed)
  • MP3(MPEG-1audiolayer3)

  4、AVAudioPlayer的优势:

  • 支持更多的格式
  • 可以播放任意长度的音频文件
  • 支持循环播放
  • 可以同步播放多个音频文件
  •  控制播放进度以及从音频的任意一点开始播放

  5、开发步骤:

  • AVAudioPlayer包含在 AVFoundation框架中,所以开发的时候首先导入音频的框架AVFoundation.framework。注意:引入头文件 #import <AVFoundation/AVFoundation.h>。
  • AVAudioPlayer的初始化的时候需要给一个播放文件:AVAudioPlayer  *avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:文件路径 error:nil];
  • 重要属性:1.设置初始音量大小 audioPlayer.volume = 1;(0.0 ~ 1.0);2.设置音乐播放次数  audioPlayer.numberOfLoops = -1(只要是负数都是循环播放);3.   播放进度 audioPlayer.currentTime = 0;
  • 重要方法:1.预播放:[audioPlayer prepare
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BaseControl按钮合集 下一篇iOS 支持 IPv6

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目