• iOS 开发之音频播放


    前段时间做项目用到音频播放功能,在网上也查了好多资料,最后终于搞懂他们的原理.

    本文是借鉴别人的,网址是:http://www.jb51.net/article/74666.htm 

    小子之所以还要写这篇博客,是为了自己以后能方便查询,也方便大家查阅,如果原作者认为小子有不妥的地方,请留言联系我,我会删博的....~_~

    a,音频播放我们使用的AVAudioPlayer ,AVAudioPlayer是属于AVFoudation.framework框架之中的,所以在我们使用的时候需要把AVFoudation.framework框架添加到项目中.

    b,音频播放又分为2中:

      (1),较短的音频播放,一般播放时间在1~2秒;

      (2),相对比较长的音频播放;

    一,这里先写较短音频的播放

      1,首先添加项目需要的依赖库AVFoudation.framework (同时记得导入头文件 #import <AVFoundation/AVFoundation.h>)

      2,获取音频的路径

        

    1 //获取音频路径
    2     NSString * musicPath = [[NSBundle mainBundle]pathForResource:@"aaa" ofType:@"m4a"];

      3,创建音频的url路径

    1     //创建音频的url路径
    2     NSURL * musicUrl = [[NSURL alloc]initFileURLWithPath:musicPath];

      4,加载音效文件,同时创建音效ID

    1 //加载音效文件 ,创建音效id  一个id 对应一个音效文件
    2     SystemSoundID soundID = 0;
    3     AudioServicesCreateSystemSoundID((__bridge CFURLRef)musicUrl, &soundID);

      5,播放音效文件

    1 //播放音效文件
    2     //    AudioServicesPlayAlertSound(soundID); //伴随有震动效果
    3     AudioServicesPlaySystemSound(soundID);

    二,这里写较长时间的音频播放 (这个我就照搬原作者的了)

      较长时间的播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件。

    注意:

      (1)该类(AVAudioPlayer)只能用于播放本地音频。

      (2)时间比较短的音频使用AudioServicesCreateSystemSoundID来创建,而本地时间较长的音频使用AVAudioPlayer类。

      同样需要导入AVFoundation框架,导入头文件(#import <AVFoundation/AVFoundation.h>)

      

    1 //
    2 //  YYViewController.m
    3 //  15-播放音乐
    4 //
    5 #import "YYViewController.h"
    6 #import <AVFoundation/AVFoundation.h>
    7 @interface YYViewController ()
    8 @end
     1 @implementation YYViewController
     2 - (void)viewDidLoad
     3 {
     4     [super viewDidLoad];
     5     
     6 }
     7 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
     8 {
     9     
    10     //1.音频文件的url路径
    11     NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
    12     
    13     //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
    14     AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
    15     
    16     //3.缓冲
    17     [audioPlayer prepareToPlay];
    18     
    19     //4.播放
    20     [audioPlayer play];
    21 }
    22 @end

    代码说明:运行程序,点击模拟器界面,却并没有能够播放音频文件,原因是代码中创建的AVAudioPlayer播放器是一个局部变量,应该调整为全局属性。

    可将代码调整如下,即可播放音频:

    1 #import "YYViewController.h"
    2 #import <AVFoundation/AVFoundation.h>
    3 @interface YYViewController ()
    4 @property(nonatomic,strong)AVAudioPlayer *audioplayer;
    5 @end
     1 @implementation YYViewController
     2 - (void)viewDidLoad
     3 {
     4     [super viewDidLoad];
     5     
     6 }
     7 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
     8 {
     9     
    10     //1.音频文件的url路径
    11     NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
    12     
    13     //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
    14     self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
    15     
    16     //3.缓冲
    17     [self.audioplayer prepareToPlay];
    18     
    19     //4.播放
    20     [self.audioplayer play];
    21 }
    22 @end

    注意:一个AVAudioPlayer只能播放一个url,如果想要播放多个文件,那么就得创建多个播放器。

  • 相关阅读:
    网页图表Highcharts实践教程标之添加题副标题版权信息
    S3C6410 裸机硬件JPEG解码(转)
    FPGA UART简单的串口接收模块
    unicode转GBK,GNK转unicode,解决FATFS中文码表占用ROM问题(转)
    Java 基础类型转换byte数组, byte数组转换基础类型
    JNI错误总结(转)
    Java通过JNI调用dll详细过程(转)
    UDP传输包大小(转)
    SD卡兼容性问题(转)
    汉字与区位码互转(转)
  • 原文地址:https://www.cnblogs.com/JustForHappy/p/5765370.html
Copyright © 2020-2023  润新知