栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中生成正弦波时背景噪声

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中生成正弦波时背景噪声

您的评论说该代码假定为大端字节序。

从技术上讲,您 实际上是 在输出Little-endian,但这并不重要,因为通过幸运的怪癖,您的最高有效字节始终为0。

编辑:进一步解释-当您的值最大为127时,您应该正在编写(0x00,0x7f),但是代码的实际输出为(0x7f,0x00),即32512。这恰好在附近适当的
16位 最大值32767,但低8位全为零。最好始终使用32767作为最大值,然后根据需要舍弃低8位。

这意味着即使您正在输出16位数据,有效分辨率也仅为8位。这似乎是造成音质不足的原因。

我制作了一个代码版本,将原始数据转储到文件中,并且由于移位本身而看不到其他任何错误。没有符号或丢失位的意外变化,但是嗡嗡声与8位采样质量一致。

另外,如果您根据采样数计算波动方程,然后分别担心字节偏移,那么数学上的值会变得容易多了:

int samples = 2 << 19;byte audioBuffer[] = new byte[samples * channels * sampleSizeInBytes];for ( int i = 0, j = 0; i < samples; ++i ){    int wave = (int)(32767.0 * Math.sin(2.0 * Math.PI * frequency * i / sampleRate));    byte msb = (byte)(wave >>> 8);    byte lsb = (byte) wave;    for (int c = 0; c < channels; ++c) {        audioBuffer[j++] = msb;        if (sampleSizeInBytes > 1) { audioBuffer[j++] = lsb;        }    } }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号