在Android中将16位pcm音频下采样为8位

在Android中将16位pcm音频下采样为8位,第1张

概述我想将16位pcm音频采样为8位,然后在android中将其从8位升采样为16位.我正在使用似乎有效的方法:inttempint;for(inti=1,j=0;i<tempBuffer.length;i+=2,j++){tempint=((int)tempBuffer[i])^0x00000080;tempBuffer[j]=(byte)tempint;Log.e("test

我想将16位pcm音频降采样为8位,然后在android中将其从8位升采样为16位.我正在使用似乎有效的方法:

int tempint;for (int i=1, j=0; i<tempBuffer.length; i+=2, j++){    tempint = ((int) tempBuffer[i]) ^ 0x00000080;    tempBuffer[j] = (byte) tempint;     Log.e("test","------------* COUNTER -> "+j+" BUFFER VALUE -> "+tempBuffer[j]+"*-----------");} 

其中tempbuffer是short [],而tempint是int.
        谁能告诉我这是否可以正常工作,因为我是一个初学者,所以我也用它来将字节[]转换回短[]

for (int x=1, j=0; x<music.length; x+=2, j++){    tempint = ((int) music[x])& 0xFF;    music[j] = tempint.shortValue();    Log.e("maxsap","------------*"+ music[j]+"*-----------");}

我不确定它是否有效.

解决方法:

假设8位和16位音频均已签名PCM:

16位到8位:

sample_8 = sample_16 >> 8;

8位到16位:

sample_16 = sample_8 << 8;

但是,如果8位PCM是“偏移二进制”(具有隐式偏差的无符号格式),则转换将是:

16位到8位:

sample_8 = (sample_16 >> 8) + 128;

8位到16位:

sample_16 = (sample_8 - 128) << 8;

理想情况下,当从8位转换为16位时,您应该添加抖动,但是您可能无法承受这样做的计算成本.

还应注意,术语“上采样”和“下采样”通常是指更改采样率.您在这里所做的不是重新采样,而是更改位深度或重新量化数据.

总结

以上是内存溢出为你收集整理的在Android中将16位pcm音频下采样为8位全部内容,希望文章能够帮你解决在Android中将16位pcm音频下采样为8位所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1092404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存