美文网首页
iOS 多媒体播放音频、音效

iOS 多媒体播放音频、音效

作者: iOS_July | 来源:发表于2018-03-17 19:45 被阅读43次

除了AVAudioRecorder录音之外,播放音频也是热门功能。如听歌玩游戏应用提示音等。

一、使用系统声音服务播放音效

例如QQ、微信的消息提示音效。iOS系统提供了系统声音服务。
优点:不需要缓冲、播放速度快

导入头文件
#import <AudioToolbox/AudioToolbox.h>
创建声音对象

系统声音服务是一个C语言的函数包

SystemSoundID outSystemSoundID;//= 1
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(inFileURL), &outSystemSoundID);
inFileURL参数:指定播放音效文件的路径,是CFURLRef类型[C语言类型],
所以使用的时候,用OC创建NSURL对象,在使用__bridge CFURLRef进行类型转换。

outSystemSoundID:输出参数,代表创建的音效文件ID,根据ID来播放音效。
播放音效

创建完音效ID之后,可利用ID来播放。

//以通知的方式来播放-手机会震动
AudioServicesPlayAlertSound(inSystemSoundID);

//以系统声音的方式播放-不会震动
AudioServicesPlaySystemSound(inSystemSoundID);
笔者示例
#import "ViewController.h"
#import <AudioToolbox/AudioToolbox.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setupStartBtn];
    
}
- (void)setupStartBtn{
    UIButton *btn = [[UIButton alloc]init];
    [btn setTitle:@"播放音效" forState:UIControlStateNormal];
    btn.layer.borderColor = [UIColor orangeColor].CGColor;
    btn.layer.borderWidth = 2;
    btn.frame = CGRectMake(100, 200, 200, 30);
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn addTarget:self action:@selector(clickStartBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
}
- (void)clickStartBtn{
    NSLog(@"播放");
    
    //创建一个本地音效文件的URL
    NSString *path = [[NSBundle mainBundle]pathForResource:@"test.caf" ofType:nil];
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"buyao.wav" withExtension:nil];
    
    NSURL *inFileURL = [NSURL URLWithString:path];
    
    //创建声音对象
    SystemSoundID outSystemSoundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(inFileURL), &outSystemSoundID);
    
    //播放音效
    AudioServicesPlaySystemSound(outSystemSoundID);
}

这里的test.cafbuyao.wav,都是我拖拽到项目的短音频。

二、使用AVAudioPlayer播放音乐

系统声音服务只能播放少于30s的音频文件,如要播放音乐,则需要更强大的类---AVAudioPlayer。

  • 属性
属性声明 功能描述
@property(readonly, getter=isPlaying) BOOL playing; 获取播放器是否正在播放
@property(readonly) NSUInteger numberOfChannels; 获取播放器的声道数
@property(readonly) NSTimeInterval duration; 获取音乐文件的持续时间
@property(assign, nullable) id<AVAudioPlayerDelegate> delegate; 设置、获取AVAudioPlayer对象的代理
@property BOOL enableRate NS_AVAILABLE(10_8, 5_0); 获取播放器是否可以改变播放速度
@property float rate NS_AVAILABLE(10_8, 5_0); 设置、获取播放器播放速度
@property NSInteger numberOfLoops; 设置、获取循环播放次数。默认为0[播放一次]、正数[播放次数]、负数[无限播放,stop方法才能停止]
  • 方法
方法声明 功能描述
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url fileTypeHint:(NSString * __nullable)utiString error:(NSError **)outError NS_AVAILABLE(10_9, 7_0); 创建播放器
- (BOOL)prepareToPlay; 缓冲
- (BOOL)play; 播放
- (void)pause; 暂停播放
- (void)stop; 停止播放
笔者的示例
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()
/** player*/
@property (nonatomic, strong) AVAudioPlayer * player;

@end

@implementation ViewController

- (AVAudioPlayer *)player{
    if (!_player) {
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"J.Fla - Closer.mp3" withExtension:nil];
        
        //播放器
        AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:url fileTypeHint:@"music" error:nil];
        _player = player;
    }
    return _player;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupPlayerBtn];
    [self setupPauseBtn];
    [self setupContinueBtn];
    [self setupStopBtn];
}

- (void)setupPlayerBtn{
    //准备播放
    [self.player prepareToPlay];
    
    UIButton *btn = [[UIButton alloc]init];
    [btn setTitle:@"播放音乐" forState:UIControlStateNormal];
    btn.layer.borderColor = [UIColor orangeColor].CGColor;
    btn.layer.borderWidth = 2;
    btn.frame = CGRectMake(100, 200, 200, 30);
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn addTarget:self action:@selector(clickStartBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

- (void)clickStartBtn {
    //开始播放
    [self.player play];
}


- (void)setupPauseBtn{
    UIButton *btn = [[UIButton alloc]init];
    [btn setTitle:@"暂停播放" forState:UIControlStateNormal];
    btn.layer.borderColor = [UIColor orangeColor].CGColor;
    btn.layer.borderWidth = 2;
    btn.frame = CGRectMake(100, 260, 200, 30);
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn addTarget:self action:@selector(clickPauseBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}
- (void)clickPauseBtn{
    if (self.player.isPlaying) {
        //暂停播放
        [self.player pause];
    }
}


- (void)setupContinueBtn{
    UIButton *btn = [[UIButton alloc]init];
    [btn setTitle:@"继续播放" forState:UIControlStateNormal];
    btn.layer.borderColor = [UIColor orangeColor].CGColor;
    btn.layer.borderWidth = 2;
    btn.frame = CGRectMake(100, 320, 200, 30);
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn addTarget:self action:@selector(clickContinueBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}
- (void)clickContinueBtn{
    //播放暂停或者已经结束时
    if (self.player !=nil && !self.player.isPlaying) {
        [self.player play];
    }
}



- (void)setupStopBtn{
    UIButton *btn = [[UIButton alloc]init];
    [btn setTitle:@"结束播放" forState:UIControlStateNormal];
    btn.layer.borderColor = [UIColor orangeColor].CGColor;
    btn.layer.borderWidth = 2;
    btn.frame = CGRectMake(100, 380, 200, 30);
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn addTarget:self action:@selector(clickStopBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}
- (void)clickStopBtn{
    //结束播放
    [self.player stop];
}
@end
  • PS:
代码写的很丑,放过放过......

相关文章

  • iOS 多媒体播放音频、音效

    除了AVAudioRecorder录音之外,播放音频也是热门功能。如听歌、玩游戏、应用提示音等。 一、使用系统声音...

  • iOS音频

    iOS中支持的音频播放类型播放音效System Sound Service播放本地音频AVFoundataion播...

  • iOS学习笔记23-音效与音乐

    一、音频 在iOS中,音频播放从形式上可以分为音效播放和音乐播放。 音效: 主要指一些短音频的播放,这类音频一般不...

  • iOS音频播放

    引言: 在iOS中音频按照播放形式可以分为音效播放和音乐播放。音效主要指的是一些短音频,通常作为点缀音频,如游戏中...

  • iOS开发系列--音频

    在iOS中音频播放从形式上可以分为音效播放和音乐播放。前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频...

  • iOS 音视频开发(七)AudioToolbox音效播放

    在iOS中音频播放从形式上可以分为音效播放和音乐播放。前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频...

  • iOS开发:本地音频播放

    一、音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放。前者主要指一些段音频播放,通常作为点缀音频,对于这...

  • iOS开发-音频播放

    iOS--音频的简单使用 音效播放(短时间的音频文件)1:AudioServicesCreateSystemSou...

  • iOS音频播放(系统音效播放)

    昨天遇到了系统提示音的播放(类似于系统短音提示音,按键提示音),最终发现其实系统声音的播放其实很简单,在这里做一个...

  • 系统音频调用(转)

    iOS开发——播放系统音效、自定义音效需求大致分为三种:1.震动2.系统音效(无需提供音频文件)3.自定义音效(需...

网友评论

      本文标题:iOS 多媒体播放音频、音效

      本文链接:https://www.haomeiwen.com/subject/reqrqftx.html