(笔记)音频播放

(一)概念
  • 音频数据格式:本质是使用了不同的压缩算法
    • aac / mp3 / caf ...
  • 音频文件格式:音频文件相当于一个容器,可以装音频数据
    • mp3 / wav caff ...


(二)Linux命令
  • 查看MAC支持的所有的 音频格式/文件格式
    • afconvert -hf
  • 查看某个音频文件的详细信息
    • afinfo <音频文件名>
  • 转换音频格式(任意格式)
    • afconvert -f <文件格式> -d<数据格式> <源文件格式> <目标文件名字>
    • 例:afconvert -f adts -d aac xxx.mp3 xxx.aac

(三)iOS支持的音频数据格式
  • 推荐使用音频数据格式:aac/mp3/alac/cdf
  • 原因:硬件/软件解码

(四)本地音频播放
1.本地音效
  • 又叫短音频,时长<=30s的音频
  • 使用底层类播放SystemService(速度快)
  • 一次播放,不能暂停

1.1 引入头文件 <AVFoundation/AVFoundation.h>

1.2 步骤
  • ①创建音效文件的本地URL路径
  • ②创建systemID
    • 创建systemID属性
    • AudioServicesCreateSystemSoundID((需要桥接转换url)(url),&_systemID);
  • ③播放:
    • AudioServicesPlaySystemSound(_systemID);
//记录systemSoundID
@property (nonatomic, assign) SystemSoundID systemID;

//播放音效(<=30s)
- (IBAction)playShortAudio:(id)sender {
    //播放本地音效文件(创建systemID+播放)
    NSString *shortAudioPath = [[NSBundle mainBundle] pathForResource:@"audio.wav" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:shortAudioPath];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &_systemID);
    //播放
    AudioServicesPlaySystemSound(_systemID);
   
}

2.本地音频
  • 使用Audio Toolbox Framework(功能多)

2.1
//记录播放器对象
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;

//加载音频播放对象
- (AVAudioPlayer *)audioPlayer {
    if (!_audioPlayer) {
        NSURL *audioFilePath = [[NSBundle mainBundle] URLForResource:@"AllOfMe.mp3" withExtension:nil];
        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFilePath error:nil];
    }
    return _audioPlayer;
}



2.2 播放、暂停、停止
  • [self.audioPlayerprepareToPlay]:音频播放对象是否已经从文件读入到内存中。返回BOOL值
//播放本地音频文件
- (IBAction)playLocalAudioFile:(id)sender {
    if ([self.audioPlayer prepareToPlay]) {
        //可以将音频文件文件的数据读到内存(快)
        [self.audioPlayer play];
    }
}
//暂停
- (IBAction)pauseAudioFile:(id)sender {
    if (self.audioPlayer.playing) {
        //正在播放
        [self.audioPlayer pause];
    }
}
//停止(下次播放,从头开始)
- (IBAction)stopAudioFile:(id)sender {
    //设置当前播放的时间偏移量offset为0
    [self.audioPlayer stop];
    self.audioPlayer.currentTime = 0;
}




(五)播放在线音频/视频
1.声明属性
//segment选项卡,区分播放的是视频还是音频
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl;

//播放对象,可以播放音频或视频
@property (nonatomic, strong) AVPlayer *player;
//视频需要,声明层属性。
@property (nonatomic, strong) AVPlayerLayer *videoLayer;


2.创建 播放对象
- (IBAction)play:(id)sender {
    //音频地址
    NSString *audioPath = @"远程音频链接";
    //视频地址
    NSString *videoPath = @“远程视频链接";
   
    if (self.segmentControl.selectedSegmentIndex == 0) {

        //视频播放
        //1.创建播放对象,并赋值
        self.player = [AVPlayer playerWithURL:[NSURL URLWithString:videoPath]];
        //2.创建layer对象,指定layer的frame
        self.videoLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
        self.videoLayer.frame = CGRectMake(0, 150, 300, 250);
        //3.把layer添加到view.layer
        [self.view.layer addSublayer:self.videoLayer];

    } else {
        //音频
        self.player = [AVPlayer playerWithURL:[NSURL URLWithString:audioPath]];
    }
    //执行播放动作(音频或者视频)
    [self.player play];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值