iOS 将PCM格式转换为WAV格式 播放wav音频或者直接播放pcm文件

记录两种播放pcm音频方法

单例 .h文件
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface WYAudioPlayer : NSObject

+ (instancetype)sharedInstance;

- (void)playMusicWithPath:(NSURL *)fileURL;

//结束播放
- (void)stopPlay;

// 播放后台传来的声音流
- (void)playWithData: (NSData *)data;

- (void)clear;

/*
 pcm文件转wav播放 
 */
- (NSString *)getWavFileFromPcmData:(NSString *)filePath;

@end

方法一:直接播放pcm文件


#define MIN_SIZE_PER_FRAME 5000   //每个包的大小,室内机要求为960,具体看下面的配置信息
#define QUEUE_BUFFER_SIZE  3      //缓冲器个数
#define SAMPLE_RATE        16000 //采样频率

@interface WYAudioPlayer()
{
    AudioQueueRef audioQueue;                                 //音频播放队列
    AudioStreamBasicDescription _audioDescription;
    AudioQueueBufferRef audioQueueBuffers[QUEUE_BUFFER_SIZE]; //音频缓存
    BOOL audioQueueBufferUsed[QUEUE_BUFFER_SIZE];             //判断音频缓存是否在使用
    NSLock *sysnLock;
    NSMutableData *tempData;
    OSStatus osState;
}
@end

@implementation WYAudioPlayer

static WYAudioPlayer *_shareInstance;
static dispatch_once_t   onceToken;
+ (instancetype)sharedInstance
{
    dispatch_once(&onceToken, ^{

        _shareInstance = [[self alloc] init];
    });
    
    return _shareInstance;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        [self initAudioDescriptionSetting];
    }
    return self;
}
- (void)initAudioDescriptionSetting
{
    sysnLock = [[NSLock alloc]init];
    //设置音频参数 具体的信息需要问后台
    _audioDescription.mSampleRate = SAMPLE_RATE;
    _audioDescription.mFormatID = kAudioFormatLinearPCM;
    // 下面这个是保存音频数据的方式的说明,如可以根据大端字节序或小端字节序,浮点数或整数以及不同体位去保存数据
    _audioDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    //1单声道 2双声道
    _audioDescription.mChannelsPerFrame = 1;
    //每一个packet一侦数据,每个数据包下的桢数,即每个数据包里面有多少桢
    _audioDescription.mFramesPerPacket = 1;
    //每个采样点16bit量化 语音每采样点占用位数
    _audioDescription.mBitsPerChannel = 16;
    _audioDescription.mBytesPerFrame = (_audioDescription.m
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值