音乐编解码器的更新情况

2023-12-08 06:30

本文主要是介绍音乐编解码器的更新情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


正文字数:2632 阅读时长:4分钟

在我最近关于高分辨率音频播放器以及为它们提供内容的服务和外部DAC和放大器的报道中,我意识到我向我的读者抛出了很多新的可能不熟悉的术语。自从我上一次深入介绍无损和有损音频压缩标准以来,已经有一段时间了,确切地说,是20年!而且世事变迁,所以这个简短的更新可能是迟来的。

文 / BRIAN DIPERT

原文链接 / https://www.edn.com/an-update-on-music-codecs/

首先,显而易见的是,20年前大部分数字音乐不是从服务器上下载,就是从CD上下载,然后存储并在本地播放。如今,各种订阅服务的优势已经演变,使情况更加复杂;一个给定的服务需要支持具有各种处理能力的多种回放客户端,并支持以多种比特率和延迟(以及随时间变化的两个参数)连接的网络。因此,云的适应性至关重要。

以Tidal为例,这是我最近经常提到的一项音乐服务,它以高保真音响为目标用户。先看了看基线提供“HiFi”,Tidal streams(在一些平台上,还提供DRM-inclusive下载)在两个比特率,96 kbps(Tidal称之为“正常”,通常被认为是等效质量遗留的128 kbps MP3)和320 kbps(“高”和更高的比特率比使用competitors 例如Amazon Music Unlimited和Apple iTunes),在这两种情况下利用AAC(高级音频编码)有损压缩标准。AAC是MPEG-4的核心音频编解码器,在2001年我的测试套件中甚至还没有AAC,只有MP3 (MPEG-1和MPEG-2音频层III)、RealAudio和WMA (Windows Media audio)。三年多过去了,我还在写这样的话:“AAC目前缺乏广泛的行业支持,因此限制了消费者播放音频的设备类型。”不过,这在很大程度上要归功于Apple对AAC的支持,尤其是在该公司放弃了FairPlay DRM之后,接替者基本上已经继承了宝座。

现在为Tidal的“HiFi”提供。至少即使内容是“仅仅”Red Book音频CD-equivalent质量(16每帧采样个数,两个渠道,44.1千赫采样率,1~1.411 Mbps未压缩比特流),Tidal还提供两种lossless-compressed格式降低比特率(下载,文件大小):FLAC(自由无损音频编解码器)对于大多数客户,和ALAC为iOS设备(Apple无损音频编解码器)。Wikipedia上说,“通过FLAC算法压缩的数字音频通常可以缩小到原始大小的50%到70%。”

如果做到更大的样本量和更高的样本率是长处,还有MQA(主要质量认证),Tidal支持它的HiFi层订阅者和它内容库的子集。MQA和AAC一样,是一种有损压缩算法,乍一看似乎很讽刺,因为我们正在谈论的是所谓的最高质量的产品(不出所料,这种格式得到了发烧友社区的广泛支持)。但与AAC(及其MP3和其他感知编码同行)不同的是,MQA没有使用各种心理声学建模技术来降低比特率,就像我在20年前提到的那些:

  • 低通滤波,即去除某一频率以上的所有音频信息;

  • 立体声到单声道转换的原始两个声道,完全或超过一定的频率;

  • 阶段性崩溃,或消除两个通道之间的阶段性差,完全或超过一定的频率;

  • 频率屏蔽,用响亮的声音屏蔽附近频率的低音量信息;

  • 时间掩蔽,其中响亮的音调在时间上掩蔽在掩蔽音调之前和之后的低音量信息。相反,MQA利用时域ADPCM(自适应差分脉冲编码调制)来降低比特率。

更多关于MQA的信息来自维基百科:

使用专有的抖动技术将较高频带中相对较少的能量分层压缩成嵌入较低频带的数据流,但解码后的结果将是无损存档。在一系列这样的操作之后,结果44.1 kHz的数据,分层的数据流,和最终的“修饰”流(从所有层和原始的有损信号之间的压缩差)被提供给播放设备。考虑到低的能量将在更高的频率,和只使用一个额外的频带层(较高的44.1 kHz频带96/24打包在48/16的抖动中)和一个修改流(压缩区别原始96/24和48/16)分布在一起作为一个流,48/24的48/16 bit-decimated部分可以由正常的48/16播放设备。与标准格式的另一个区别是抽样过程。音频流被采样并与三角形函数进行卷积,并在稍后的回放过程中进行插值。

所以,让我们思考一下。为了使Tidal能够成功地将音乐流或下载到客户端,Tidal的服务器必须首先弄清楚与客户端相关联的帐户是哪个服务层(高级或HiFi)。然后,它需要确定客户端是否支持下载。其次,它必须确定客户端支持哪些质量级别选项(普通,高,HiFi和/或master)和(HiFi,无论客户端是否是iOS设备)以及什么质量选项是首选的客户端流媒体和下载;以下是我的Android智能手机Tidal应用的截图示例:

但是想要一个给定的质量水平和实际能够达到那个质量水平是两码事。例如,如果客户端处于较差的蜂窝数据连接(持续或可能仅在短暂的基础上),那么320kbps的“高”流可能无法实现,因此需要短暂的降速到“正常”模式。在所有这些工作之后,仍然“只有”一个音乐轨道驻留在客户机的易失性或非易失性内存中;然后你仍然需要通过一个比特率受限(更不用说一个更低的能耗要求)的无线连接将它连接到蓝牙耳机上。

目前由蓝牙SIG(特殊兴趣组)指定的标准音频编解码器需要支持任何基于A2DP(高级音频分发配置文件)的蓝牙设备(发射器和/或接收器)是SBC(低复杂度子带编解码器)。SBC大约和MP3一样古老,正如相关的Wikipedia词条所言,“它的设计目的是在中等比特率下获得相当好的音频质量,同时保持较低的计算复杂度,考虑到蓝牙带宽的限制和处理能力。”

SBC做得很不错,特别是在语音方面,但它仍然在早期阶段被LC3(低复杂度通信编解码器)取代。用一句话来说,把SBC称为“高保真度”是一种妄想。因此,为其他可选编解码器打开了一扇门,它们的使用与否取决于在初始连接过程中蓝牙发射器和接收器之间的支持与否询问。例如,它们包括AAC(没错,就是前面提到的同一种编解码器),Apple在其产品中专门使用AAC(大概是为了避免向高通支付许可费……请继续阅读)。

高通目前拥有aptX系列编解码器(例如,最初在Apple mac上支持,但后来取消了),该系列于2010年被CSR收购,5年后,CSR又被高通收购。基础aptX(最初称为apt-X)编解码器,也就是可能最熟悉的编解码器,利用了类似于前面提到的MQA的基于adpcm的有损压缩。它随后加入了增强,现场,声音,以及(为了蓝牙音乐的目的)LL(例如低延迟,这是特别有用的,当试图保持电影视频和它的配乐和对话之间的嘴唇同步),HD(高清晰度),和自适应层。

在最近探索我的新型便携式蓝牙接收器“玩具”时,我发现了另一种编解码器——LDAC。得益于Wikipedia对LDAC的定义,我了解到了另一个:LHDC(低延迟高清音频编解码器)。LDAC由Sony开发,从Android 8开始就添加到Android开源项目存储库中。编码器(即蓝牙发射器)的编码(和使用)是免费和开源的,尽管解码器是专有的,需要用户获得许可。我的Google Pixel 3a手机包括支持LDAC:

Radsone显然获得了许可,因为当我把智能手机连接到Earstudio ES100 MK2上时,LDAC是首选的编解码器:

—本文作者布赖恩•迪珀特是the Embedded Vision Alliance的总编,也是BDTI的高级分析师,以及该公司在线时事通讯InsideDSP的总编。

详情请扫描图中二维码或点击阅读原文了解大会更多信息。

这篇关于音乐编解码器的更新情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/468861

相关文章

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4