惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - xiangyuecn

省市区县乡镇街道三级四级联动数据源:2026年民政部和统计局已不再公布行政区划代码,可改用直接调国家地名信息库的接口 uniapp中实现H5录音和上传、实时语音识别(兼容App小程序)和波形可视化 Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法 Oracle数据库经纬度坐标查询优化与结果错误原因分析、SQL中WKT超长文本字符串处理 vue3实现H5网页录音并上传(mp3、wav)兼容Android、iOS和PC端 经纬度坐标为中心点生成米距离长度半径的圆形面,含java js源码+在线绘制,代码简单零依赖 网页js版音频数字信号处理:H5录音+特定频率信号的特征分析和识别提取 最新全国省市区县乡镇街道行政区划数据和坐标边界数据更新提取(2023年) echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新 ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区县乡镇) 新开源HTML5单文件网页版ACME客户端,可在线申请Let's Encrypt、ZeroSSL免费HTTPS多域名通配符泛域名SSL/TLS证书(RSA/ECC/ECDSA) ArcGIS QGIS学习一:打开shp、geojson地图变形变扁问题(附最新坐标边界下载全国省市区县乡镇) 移动端实现HTML5 mp3录音踩坑指南:系统播放音量变小、一些机型录音断断续续 之 MediaRecorder和AudioWorklet的终极对决 从区划边界geojson中查询经纬度坐标对应的省市区县乡镇名称,开源Java工具,内存占用低、高性能 全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图最新数据免费下载 支持shp geojson json sql格式 几行代码把Chrome搞崩溃之:HTML5 MP3录音由ScriptProcessorNode升级成AudioWorkletNode采坑记 根据经纬度坐标获得省市区县行政区划城市名称,自建数据库 java python php c# .net 均适用 最新全国省市区县乡镇街道行政区划数据提取(2022年) (已过时)静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk
24位PCM采样数据转成16位算法,已实现PCM转WAV在线工具源码支持24bits、16bits、8bits
xiangyuecn · 2021-01-03 · via 博客园 - xiangyuecn

最近收到几个24位的PCM录音源文件,Recoder库原有的PCM转WAV工具只支持8位和16位,于是就升级一下支持了24位的PCM源文件。

可能是搜索方法不对,搜索了半天没有找到24位转成16位的算法,但好在运气还不错看到一篇标题不太想关的文章里面有成套的转换算法。

算法来源

24位PCM转成32位浮点数参考文章:https://www.codeproject.com/articles/501521/how-to-convert-between-most-audio-formats-in-net 里面的Convert24BitToFloat函数,转成了32位浮点数就很容易转成16位或8位了。

js版24位PCM转8位、16位代码

var pcm24=... Uint8Array二进制数组 ...;
var pcm16=new Int16Array(pcm24.length/3);
var pcm8=new Uint8Array(pcm24.length/3);

for(var i=0,j=0;j<pcm24.length;i++){
	//24bit pcm转成浮点数
	var n=((pcm24[j++] | (pcm24[j++]<<8) | (pcm24[j++]<<16))<<8)>>8;
	n=n/16777216;
	
	//浮点数转成16位
	pcm16[i]=n*0x7FFF;
	
	//浮点数转成8位
	pcm8[i]=((n*0x7FFF) >> 8) + 128;
};

代码里面已经实现了24位PCM转成16位和8位,代码非常简单,移植到其他语言也很容易。

js版8位、16位PCM转成24位

根据上面代码,做一次逆运算就可以了:

var pcm16=... Int16Array ...;
var pcm24=new Uint8Array(pcm16.length*3);

for(var i=0,j=0;i<pcm16.length;i++){
	var n=pcm16[i] / 0x7FFF * 16777216;
	//var n=((pcm8[i]-128) << 8) / 0x7FFF * 16777216; //8位的多一步先转成16位

	pcm24[j++]=n & 0xff;
	pcm24[j++]=(n & 0xff00) >> 8;
	pcm24[j++]=(n & 0xff0000) >> 16;
}

附:浏览器控制台下载数据文件代码

var b=new Blob([pcm16]);
var a=document.createElement("a");
a.href=URL.createObjectURL(b)
a.download="test.pcm";
a.click();

相关实现

裸(RAW、WAV)PCM转WAV播放测试和转码.jpg

本代码已用在了H5录音开源库 Recorder裸(RAW、WAV)PCM转WAV播放测试和转码在线工具中,点此可以在线转换PCM文件。

【完】.