音频PCM数据的单声道、双声道之间的转换

2023-11-13

在使用tinyalsa处理PCM音频数据时发现该设备只能以双声道形式打开设备。
tinypcminfo工具可以查看设备信息。
在这里插入图片描述
out和in里面channels 最大和最小值都是2。但是实际使用中有时候又需要声卡采集和播放单声道数据怎么办?那就只能想办法转换格式了。

下面就以16位深的pcm音频数据举例。

16位单声道音频数据每一帧就16位二进制数据组成为两个字节。用int16_t表示其实就是c语言中的short类型。

16位双声道数据一般都是两个声道数据依次排列。那么一帧双声道数据采样的左右声道各一个。大小则为单声道的两倍4个字节。

/*
	双转单
	参数1:资源buffer(双声道数据)
	参数2:资源buffer大小(单声道数据大小,注意:是buffer中音频数据帧数,而不是字节数)
	参数3:转换后buffer(单声道数据)
*/
void StereoToMono(const int16_t* src_audio,int frames,int16_t* dst_audio) 
{
    for (int i = 0; i < frames; i++) 
    {
    	//注意 >>1 只有在有符号整形的情况下才代表除以2
        dst_audio[i] = (int)src_audio[2 * i] + src_audio[2 * i + 1]) >> 1;
    }
}

/*
	单转双
	参数1:资源buffer(单声道数据)
	参数2:资源buffer大小(单声道数据大小,注意:是buffer中音频数据帧数,而不是字节数)
	参数3:转换后buffer(双声道数据)
*/
void MonoToStereo(const int16_t* src_audio,int frames,int16_t* dst_audio) 
{
    for (int i = 0; i < frames; i++) 
    {
        dst_audio[2 * i] = src_audio[i];
        dst_audio[2 * i + 1] = src_audio[i];
    }
}

常见还有8位、24位、32位采样的音频数据。同理以其他位数格式采样的音频数据只需将相应数据类型传入处理就行了。

2021.11.18晚上

参考链接1
参考链接2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音频PCM数据的单声道、双声道之间的转换 的相关文章

  • Qt视频播放器[QMediaPlayer+QVideowidget]

    目录 参考 一 安装K Lite 解码器 二 Qt代码结构 VideoPlayer pro main cpp videoplayer h 播放器 videoplayer cpp 播放器 videoplayer ui 播放器 playersl
  • 从mpeg ts文件中提取I帧(6):I帧的显示

    I帧的显示依赖于opencv 这里用到的版本是3 4 0 显示的数据是pes解码后的rgb数据 代码比较简单 用opencv主要考虑到以后可以对ts流进行一些特征识别 include
  • 基于FFmpeg和Screen Capturer Recorder实现屏幕和声音的录制

    当我们看到一些精彩的视频画面 但无法下载时 可以通过录屏的方式将视频和音频录制下来 这个时候我们需要安装采集视频和音频的工具screen capture recorder 以下是在windows10环境下 基于FFmpeg和Screen C
  • 海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系

    在HiMPP手册中都会有这么一张图 先讲一下视频缓存池这个概念 视频缓存池主要向媒体业务提供大块物理内存管理功能 负责内存的分配和回收 这部分具体什么作用 首先视频输入回需要大量的内存 打比方1080P的视频输入 VI部分怎么保存或者使用呢
  • 浅谈音视频开发入门基础及进阶资源分享

    导言 音视频开发涉及的知识面比较广 知识点又相对独立琐碎 入门门槛相对较高 想要对音视频开发具有深入全面的了解 需要在行业深耕多年 本文将简单介绍音视频的采集 编解码 传输 渲染四个技术点并对涉及到的知识点和原理进行解释 希望你可以对音视频
  • 在 JavaScript 中将两个字节转换为有符号 16 位整数

    在 JavaScript 中 我需要将两个字节转换为 16 位整数 以便可以将音频数据流转换为带符号的 PCM 值数组 大多数将字节转换为 16 位整数的在线答案都使用以下内容 但它不适用于负数 var result byteA 0xFF
  • 我可以从 MediaPlayer 或 SoundPool 获取原始 PCM 数据吗?

    我使用 eclipse 和 android sdk 4 0 3 api lvl 15 创建一个基本的音乐播放器应用程序 我读了一下 发现有两个主要的类来播放声音 媒体播放器和声音池 SoundPool 在声音优先级和播放声音的速率方面具有更
  • JLayer Mono Mp3 到 PCM 解码

    我目前正在使用 javalayer 1 1 进行 mp3 解码 所以我想从我的 44100 Hz 16 位 Mp3 接收原始 PCM 数据 它与立体声 mp3 完美配合 但我在单声道 mp3 上遇到奇怪的问题 这里有一些代码 InputSt
  • 视音频数据处理入门:AAC音频码流解析

    vs调试内存 FF F9满足代码中的if判断条件 上图代码的目的是获取adts帧的长度 如上述评论 aac frame length占用13个bit 覆盖了buffer 3 buffer 4 buffer 5 下图为查找资料所得 用ue查看
  • FFmpeg:编码 PCM 16 音频数据分配错误

    我目前正在尝试使用 avi 容器内的一些视频对一些原始音频数据进行编码 使用的视频编解码器是 mpeg4 我想使用 PCM 16LE 作为音频编解码器 但我面临着一个问题AVCodec gt frame size音频样本的参数 完成所有正确
  • 音频转换mp3格式软件哪个好?下面推荐几款好用的软件给你

    你是否曾经遇到过这样的情况 下载了大量音频文件 却因为文件格式受到限制 而无法直接在设备上播放 不用担心 今天我将向大家介绍几款能把音频转换mp3的软件 它们可以帮助我们有效地解决音频格式不兼容的问题 一 专业的音频处理软件 优点1 简单易
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发
  • 如何从WAV样本数据中提取频率?

    我正在用 c 开发一个应用程序来读取简单的 PCM WAV 文件 我的问题是 我应该如何解释数据块中的样本 以便提取样本的频率 给定一个 WAV 示例 原始数据如何表示频率 例如 这个数据块 24 17 1e f3 对于立体声 16 位 左
  • 混合 16 位线性 PCM 流并避免削波/溢出

    我尝试将 2 个 16 位线性 PCM 音频流混合在一起 但似乎无法克服噪音问题 我认为它们是在将样品混合在一起时溢出的 我有以下功能 short int mix sample short int sample1 short int sam
  • 电动车低速提示音系统(AVAS)

    随着电动汽车的迅速发展 以及电动汽车的保有量也越来越多 根据车辆的特征来说电动汽车相比于传统的内燃机汽车要安静 为了保护行人 减少事故的发生 欧盟最近发布了一项关于电动车的新法规 自2019年7月1日开始 欧盟关于电动汽车的最新法律正式生效
  • 免费音效素材网站,一次性介绍清楚

    不管是在游戏 电影 电视剧 短视频还是音频中 合适的音效能够更好的表达内容和渲染氛围 今天给大家分享几个免费音效素材 感兴趣的话可以接着往下看 一 制片帮素材 找音效 制片帮素材不仅有海量的优质视频素材 还有丰富的音效资源 分类清晰 更重要
  • 有没有实用的视频、图片素材网站推荐?

    在作品创作中 素材网站扮演着至关重要的角色 它们提供了海量的设计资源 为设计师 艺术家和创意工作者提供了无限的可能性 本文将为您介绍几款备受推崇的素材网站 帮助您开启创意之旅 一 制片帮素材 制片帮素材是一个提供海量精品视频素材的网站 站内
  • 音频音量标准化时的动态范围压缩[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经问过音量标准化 https stackoverflow com questions 12481524 audio volume
  • Java - 调整 WAV 文件的播放速度

    我可能很笨 但我似乎找不到解决我的问题的方法 NOTE 我发现很多人报告了这个问题 似乎它是由于较新的 Java 可能是 1 5 而发生的 也许不再支持 SAMPLE RATE 我无法找到任何解决方案 我正在尝试调整 SAMPLE RATE
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供

随机推荐

  • cenos7 下通过yum安装和配置mariadb

    centos 7 的软件源中有mariadb的 所以这里我们不配置他的源了 若没有的话可以用以下方式来配软件源 vi etc yum repos d MariaDB repo 插入以下内容 MariaDB 10 2 4 CentOS rep
  • 查看云服务器信息,查看云服务器信息

    查看云服务器信息 内容精选 换一换 对于已安装InfiniBand网卡驱动的H2型弹性云服务器 以下简称IB云服务器 可以通过如下方式 检查云服务器的IB网卡驱动安装成功 网络连通 可以正常工作 检查过程中 如果发现您的弹性云服务器未安装i
  • echarts图表鼠标悬停时 图例错位

    1 问题 当页面body拥有zoom属性之后 鼠标划过echarts图表时 触发位置就不正常 2 原因分析 这都是因为设置了zoom 如果你在你的项目中设置了zoom以达到缩放比例的适配 在使用echarts图表时就会出现错位的问题 3 解
  • cmake(二十八)Cmake工具链

    一 选择编译器及设置编译器选项 1 应用场景 1 在 实际的项目平台中 可能安装有 多个版本 的 编译器 2 同时由于 不同的功能 可能会需要设置 不同的编译参数 2 初始状态 3 IDE工具CLion配置 4 CMAKE C COMPIL
  • pycharm查看全部tensor数据,取消省略

    方法一
  • 【深度学习——点云】DGCNN(EdgeConv)

    这篇文章提出一种边卷积 EdgeConv 操作 来完成点云中点与点之间关系的建模 使得网络能够更好地学习局部和全局特征 论文地址 Dynamic Graph CNN For Learning On Point Clouds 1 Motiva
  • rustup 慢_Rust 慢更贴[持续更新Rust学习的点点滴滴]

    入门篇 Rust入门系列 这个帖子会一直更新 欢迎大家回复 首先从安装来写把 rust安装 在写这篇文章的时候 rust最新版本是1 35 安装的步骤大家可以直接上rust官网 https www rust lang org curl ht
  • 招银网络科技电话面试

    1 关于项目的负责内容 还是非常有必要熟悉应急 天基的基础传输模块的 基本面试中都会觉得只界面模块很单薄 应急 基础传输模块 无人机网络协议 速率控制模块 界面模块 天基 基础传输模块 MRUDP 界面模块 2 TCP长连接 问 如何在TC
  • 每日一面系列之volatile 的理解

    volatile 是 Java 虚拟机提供的轻量级的同步机制 有三大特点 保证可见性 不保证原子性 禁止指令重排 保证可见性 当多个线程操作共享数据时 彼此是不可见的 由此提出 JMM java 内存模型 JMM java 内存模型 是一种
  • Words Seven

    2019独角兽企业重金招聘Python工程师标准 gt gt gt bar 棍子 酒吧 栅栏stick lip stickbarrier bar r er 障碍 hurdlebarrel bar rel 木桶barren bar ren 贫
  • 数二考纲新增内容-比较审敛法

    总的来说 为了避免出现2010年数一数二选择题的超纲嫌疑 命题组明确了会考察反常积分的比较审敛法 其实之前在做题中都已经涉及 主要多了一个反常积分的极限形式 这里给出一个总结 关于反常积分敛散性的原理 还有一个解题技巧就是利用对数 指数 幂
  • java数据类型转换,基本数据类型和String数据类型之间的转换

    6月16日学习打卡 自动类型转换 强制转换 基本数据类型和String转换 3 8类型转换 3 8 1自动类型转换 1 低精度向高精度赋值可以自动转换类型 char gt int gt long gt float gt double byt
  • 探索TiDB数据库

    一 TiDB介绍 TiDB是一款定位于在线事务处理 在线分析处理的融合型数据库产品 实现了一键水平伸缩 分布式事务与基于Raft协议保证强一致的多副本数据安全 具有实时OLAP等重要特性 同时兼容MYSQL协议和生态 迁移便捷 运维成本低
  • 老表,教你一招啊!!!如何用python实现将csv文件快速导入数据库,建议收藏!!!

    直接上代码 import pandas as pd from sqlalchemy import create engine MySQL的用户 root 密码 147369 端口 3306 数据库 date engine create en
  • 一行代码下载优酷、腾讯、B站等公开视屏

    安装you get工具包 pip install you get 下载命令解析 you get o e 123 o后面接本地地址 https v youku com v show id XOTQ3NjI1ODc2 html 为视屏页地址
  • RabbitMQ MQTT集群方案官方说明

    RabbitMQ MQTT 官方网说明 官方地址 https www rabbitmq com mqtt html 从3 8开始 该MQTT插件要求存在一定数量的群集节点 这意味着三分之二 五分之三 依此类推 该插件也可以在单个节点上使用
  • mysql除法函数_理解MySQL运算符和常用内置函数_MySQL

    一 MySQL中的运算符 注意事项 1 在除法运算和模数运算中 如果除数是0 将是非法除数 结果返回NULL 取模运算中 也可以用MOD a b 函数或者a b mysql gt select 1 0 100 0 1 0 100 0 NUL
  • 码上行动:利用Python与ChatGPT高效搞定Excel数据分析

    AI时代Excel数据分析提升之道 知识精进 学习答疑 上机实训 综合实战 ChatGPT应用 零基础入门 极速提升数据分析效率 亮点 1 零基础入门宝典 由浅入深讲解 无须额外的背景知识即可学习掌握 2 内容系统全面 可帮助读者快速了解使
  • C0177 [2004普及组-A]不高兴的津津(C语言写)

    题目描述 津津上初中了 妈妈认为津津应该更加用功学习 所以津津除了上学之外 还要参加妈妈为她报名的各科复习班 另外每周妈妈还会送她去学习朗诵 舞蹈和钢琴 但是津津如果一天上课超过八个小时就会不高兴 而且上得越久就会越不高兴 假设津津不会因为
  • 音频PCM数据的单声道、双声道之间的转换

    在使用tinyalsa处理PCM音频数据时发现该设备只能以双声道形式打开设备 tinypcminfo工具可以查看设备信息 out和in里面channels 最大和最小值都是2 但是实际使用中有时候又需要声卡采集和播放单声道数据怎么办 那就只