AudioToolBox 播放噪音

来源:7-11 实现PCM播放器-3

慕妹8246037

2023-07-19

用C项目写Demo,重采样之后,可以使用SDL正常播放。
在iOS项目里写,重采样之后,用AudioToolBox播放,音频能播放,速度也正常,但是全程有噪音,不晓得老师可以看下不

for(int idx = 0; idx < arr.count; idx ++) { // arr 保存了解码后所有的音频帧
        TestData *data = [arr objectAtIndex:idx];
        AVFrame *frame = data.frame;
		
		// 重采样(只是AV_SAMPLE_FMT_FLTP转成s16, 其他都保持不变,44100, 双声道)
        int outCount = swr_get_out_samples(swrCtx, frame->nb_samples);
        int length = swr_convert(swrCtx, &outBuffer, outCount, (const uint8_t **)frame->extended_data, frame->nb_samples);
        int bytes = av_get_bytes_per_sample(AV_SAMPLE_FMT_S16) * length * 2;
        
        
        
        // 将重采样之后的音频全放到音频队列中
        AudioQueueBufferRef bufferRef;
        status = AudioQueueAllocateBuffer(queue, bytes, &bufferRef);
        bufferRef->mAudioDataByteSize = bytes;
        memset(bufferRef->mAudioData, 0, bytes);
        memcpy(bufferRef->mAudioData, outBuffer, bytes);
        OSStatus status = AudioQueueEnqueueBuffer(queue, bufferRef, 0, NULL);
    }
写回答

1回答

李超

2023-07-19

你要看一下Audio Toolbox,的API,看一下它对输入数据有什么要求,然后按照要求构造数据交给他。如果你提供的数据与它的API要求的数据不匹配就会出现你这种情况。我最近在出新课,抽不出时间给你看代码,你按照我提供的思路自己再研究一下吧

0
0

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2748 学习 · 814 问题

查看课程