本人写过ffmpeg读取系统声音,生成音频原始流pcm文件

文中定义的channel_layout 为AV_CH_LAYOUT_STEREO,即左右通道的双通道,现在将这个双通道文件拆解成左右两个通道文件。

本文的双通道文件的采样位数是16,即双字节,其存储对于下面的第四个。

故拆解变得比较简单,如下所示:

void CSeparateTwoChannel::StartSeparate(const char *pPcmFile, const char *pLeftChannelFile, const char *pRightChannelFile)
{fpPcm = fopen(pPcmFile, "rb");fpLeftChannel = fopen(pLeftChannelFile, "wb");fpRightChannel = fopen(pRightChannelFile, "wb");int iReaded = 0;char szPcm[4] = { 0 };while (1){iReaded = fread(&szPcm, 4, 1, fpPcm);if (iReaded <= 0){break;}fwrite(szPcm, 2, 1, fpLeftChannel);fwrite(szPcm + 2, 2, 1, fpRightChannel);}fclose(fpPcm);fclose(fpLeftChannel);fclose(fpRightChannel);}

代码结构如下:

其中SeparateTwoChannelToOneChannel.cpp的代码如下:

// SeparateTwoChannelToOneChannel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <stdio.h>
#include "SeparateTwoChannel.h"int main()
{const char *pFilePcm = "E:\\learn\\ffmpeg\\FfmpegGeneratePcm\\x64\\Release\\pcm_inner_audio_feiniao_2channel.pcm";const char *pFileLeftChannel = "E:\\learn\\ffmpeg\\FfmpegGeneratePcm\\x64\\Release\\pcm_inner_audio_feiniao_2channel_leftchannel.pcm";const char *pFileRightChannel = "E:\\learn\\ffmpeg\\FfmpegGeneratePcm\\x64\\Release\\pcm_inner_audio_feiniao_2channel_rightchannel.pcm";CSeparateTwoChannel cSeparateTwoChannel;cSeparateTwoChannel.StartSeparate(pFilePcm, pFileLeftChannel, pFileRightChannel);return 0;
}

SeparateTwoChannel.h的代码如下:

#pragma once#include <Windows.h>
#include <stdio.h>class CSeparateTwoChannel
{public:CSeparateTwoChannel();~CSeparateTwoChannel();
public:void StartSeparate(const char *pPcmFile, const char *pLeftChannelFile, const char *pRightChannelFile);
private:FILE *fpPcm = NULL;FILE *fpLeftChannel = NULL;FILE *fpRightChannel = NULL;
};

SeparateTwoChannel.cpp的代码如下:

#include "SeparateTwoChannel.h"CSeparateTwoChannel::CSeparateTwoChannel()
{}CSeparateTwoChannel::~CSeparateTwoChannel()
{}void CSeparateTwoChannel::StartSeparate(const char *pPcmFile, const char *pLeftChannelFile, const char *pRightChannelFile)
{fpPcm = fopen(pPcmFile, "rb");fpLeftChannel = fopen(pLeftChannelFile, "wb");fpRightChannel = fopen(pRightChannelFile, "wb");int iReaded = 0;char szPcm[4] = { 0 };while (1){iReaded = fread(&szPcm, 4, 1, fpPcm);if (iReaded <= 0){break;}fwrite(szPcm, 2, 1, fpLeftChannel);fwrite(szPcm + 2, 2, 1, fpRightChannel);}fclose(fpPcm);fclose(fpLeftChannel);fclose(fpRightChannel);}

双声道pcm文件拆解成左右两个单声道文件相关推荐

  1. 基于C语言实现把WAV双声道文件差分成两个单声道文件

    本deemo基于下面这篇文章的deemo实现 基于C语言的 WAV 文件双声道转单声道的实现_快乐的老鼠的博客-CSDN博客_wav 双声道转单声道 #include <stdio.h> ...

  2. 基于C的双声道PCM文件数据处理

    本次练习要求:将单声道origin_audio.pcm音频文件存入到双声道two_channel_audio.pcm的左声道中,将音量调节后的文件存入到右声道中. 如何将数据分别存储到左.右声道中,首 ...

  3. java实现把一个大文件切割成N个固定大小的文件

    这个好像是我一年前去面试时的一道面试题,分享一下!考 java I/O 的! //java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import ja ...

  4. xml文件转换成图片_如何把pdf文件转换成图片?

    pdf文件怎么转成JPG图片呢?相信有不少人在迷惑,可能还在想着截图等操作来完成转换,但如果是截图成JPG图片后的效果可能很差,并没有之前pdf文件那么清楚.那这样往往打印出来的效果也不怎么理想,那怎 ...

  5. 如何把一个文件压缩成几个固定大小的文件及解压缩

    简述: 本文简单介绍了WinRAR如何把一个文件压缩成几个固定大小的文件以及如何解压这几个文件. 1.压缩 1 > 鼠标选中待压缩文件-右键-添加到压缩文件. 2 > 在弹出的" ...

  6. 将Materials Studio导出的pdb文件转换成LAMMPS所用的data坐标文件(含程序)

    将Materials Studio导出的pdb文件转换成LAMMPS所用的data坐标文件的程序使用说明 程序在此 1.程序可以识别的文件格式和输出的文件格式示例如下: 输入的PDB文件应该包含模拟边 ...

  7. java poi 如何合并多个sheet 为一个sheet_Java POI组件实现多个Excel文件整合成一个多Sheet的Excel文件...

    代码: package com.weichai; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  8. 【我的Android进阶之旅】Android 混淆文件资源分类整理之二:将混淆文件拆分成更小粒度的混淆文件

    在我2017年的文章[我的Android进阶之旅]Android 混淆文件资源分类整理中,我已经提及过. 之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Stu ...

  9. 将DAT格式视频文件转换成ASF和WMV格式视频文件

    以*.ASF和*.WMV为后缀名的视频文件,是微软针对RM格式视频文件而产生的,它们也是WindowsMedia的核心.它们的共同特点是采用MPEG-4压缩算法,所以压缩率和图像的质量都很不错(只比V ...

最新文章

  1. 【廖雪峰python入门笔记】dict
  2. rac中 kull session会话脚本
  3. android 之ListView的布局填充器
  4. 科普:String hashCode 方法为什么选择数字 31 作为乘子
  5. 多表拆解 | 数据PM的工作内容
  6. 变分推断(Variational Inference)最新进展简述
  7. 全国软考数据库系统工程师教程(第2版)目录
  8. 【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】
  9. ffmpeg 截图太模糊了_PPT图片模糊?导师说放大!
  10. 安装云端服务器操作系统,安装云端服务器操作系统
  11. 鸿蒙应用开发培训笔记02:应用开发入门
  12. 来谈谈Spring构造函数注入的循环依赖问题
  13. 给定一个整数序列,求中位数
  14. 如何计算两向量的夹角
  15. 产品经理日常工作之PRD文档
  16. css+js实现自动伸缩导航栏
  17. 买个云服务器搭建自己的ngrok做微信公众号开发
  18. 你所厌恶的正是别人渴望的
  19. Eterm协议中文汉字编码
  20. Linux驱动程序安装步骤

热门文章

  1. 怎么解除pdf的加密,建议收藏这几种方法
  2. ANSYS动力分析—谐响应分析(转载)…
  3. 中考计算机考试试题2018,2018年中招考试电脑阅卷流程曝光,你一定要知道
  4. item_password-获得淘口令真实url API调用说明
  5. Spark学习(二)Spark高可用集群搭建
  6. H5唤醒本地APP(谷歌地图、百度地图等相通)传递数据
  7. uniapp动态显隐导航栏图标
  8. 重庆交通大学c语言上机试题,2021考研复试重庆交通大学《C语言程序设计》复试大纲...
  9. 生物神经元的工作原理对深度学习神经元的启发
  10. 网站怎么启动GZIP压缩方法(DZ,WP,php网站开启)