PCM音频播放器在网上已经有较多的教程及代码,各有千秋,在此不再做过多的描述和讲解。
此文章及代码是基于iOS原生系统的接口进行扩展和封装的,支持各种PCM采样率,支持音频数据缓存,支持PCM纯数据流及CMSampleBufferRef结构接口。此模块仅支持单声道,稍有遗憾。
PCM播放器确实是比较基础的东西,代码已经过长期验证及测试,可直接拿来使用及参考。若有优化及漏洞,尽情留言告知,非常感谢!
//
// AudioPCMPlayer.h
//
// Created by lizhijian on 2017/2/24.
// Copyright © 2017年 ZJ. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#import <CoreMedia/CoreMedia.h>
@interface AudioPCMPlayer : NSObject
/**
初始化PCM音频播放器,默认已启动播放
@param sampleRate 采样率
@param channels 通道数
@return obj
*/
- (instancetype)initWithSampleRate:(Float64)sampleRate channels:(UInt32)channels;
/**
开始播放
@return YES:已启动
*/
- (BOOL)start;
/**
停止播放并释放资源
*/
- (void)stop;
/**
填入需要播放的PCM音频数据
@param data PCM数据
@param length PCM音频数据长度
@return 实际读取PCM数据的长度
*/
- (NSInteger)play:(const char *)data length:(NSInteger)length;
/**
填入需要播放的PCM采样数据
@param sampleBuffer 采样Buffer
@return 实际读取PCM数据的长度
*/
- (NSInteger)play:(CMSampleBufferRef)sampleBuffer;
- (BOOL)isValid;
/**
获取最大Buf缓存大小
@return 最大缓存大小
*/
- (NSInteger)getBufMaxLength;
@end
//
// AudioPCMPlayer.m
//
// Created by lizhijian on 2017/2/24.
// Copyright © 2017年 ZJ. All rights reserved.
//
#import "AudioPCMPlayer.h"
#import <Foundation/Foundation.h>
#define PCM_QUEUE_BUFFER_SIZE 10 //队