过滤器混音audio-mix

mian.c

#include "audiomixer.h"

//ffmpeg -i buweishui_1m.mp3 -i huiguniang.mp3 -filter_complex amix=inputs=2:duration=longest:dropout_transition=3 out.mp3 -y

#define PCM1_FRAME_SIZE (4096*2)        // 需要和格式匹配 4*1024*2*
#define PCM2_FRAME_SIZE (4096)
#define PCM_OUT_FRAME_SIZE (40000)
int main(int argc, char **argv)
{
   
    AudioMixer amix;
    // 输入流
    amix.addAudioInput(0, 48000, 2, 32, AV_SAMPLE_FMT_FLT); // 48000_2_f32le.pcm
    amix.addAudioInput(1, 48000, 2, 16, AV_SAMPLE_FMT_S16); // 48000_2_s16le.pcm
    // 输出流
    amix.addAudioOutput(96000, 2, 16, AV_SAMPLE_FMT_S16);

    // init之前,要先添加输入源和输出源
    if (amix.init("longest") < 0) {
   
        return -1;
    }

    int len1 = 0, len2 = 0;
    uint8_t buf1[PCM1_FRAME_SIZE];
    uint8_t buf2[PCM2_FRAME_SIZE];
    FILE *file1 = fopen("48000_2_f32le.pcm", "rb");
    if(!file1) {
   
        printf("fopen 48000_2_f32le.pcm failed\n");
        return -1;
    }
    FILE *file2 = fopen("48000_2_s16le.pcm", "rb");
    if(!file2) {
   
        printf("fopen 48000_2_s16le.pcm failed\n");
        return -1;
    }
    FILE* file_out = fopen("output.pcm", "wb");
    if(!file_out) {
   
        printf("fopen output.pcm failed\n");
        return -1;
    }

    uint8_t out_buf[PCM_OUT_FRAME_SIZE];
    uint32_t out_size = 0;

    int file1_finish = 0;
    int file2_finish = 0;
    while (1) {
   
        len1 = fread(buf1, 1, PCM1_FRAME_SIZE, file1);
        len2 = fread(buf2, 1, PCM2_FRAME_SIZE, file2);
        if (len1 > 0 || len2 > 0) {
   
            if (len1 > 0) {
   
                if(amix.addFrame(0, buf1, len1) < 0) {
   
                    printf("amix.addFrame(0, buf1, len1) failed\n");
                    break;
                }
            } else {
   
                if(file1_finish == 0) {
   
                    file1_finish = 1;
                    if(amix.addFrame(0, NULL, 0) < 0) {
        // 空包冲刷,人家才知道你某一路某一数据
                        printf("amix.addFrame(0, buf1, len1) failed\n");
                    }
                }
            }

            if (len2 > 0)
            {
   
                if(amix.addFrame(1, buf2, len2) < 0) {
      // 空包冲刷,人家才知道你某一路某一数据
                    printf("amix.addFrame(1, buf2, len2) failed\n");
                    break;
                }
            } else {
   
                if(file2_finish == 0) {
   
                    file2_finish = 1;
                    if(amix.addFrame(1, 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值