java - 音频信号绘图代码解释

标签 java

我试图理解以下代码的每一行,但我的知识阻止我 取得成功。

这实际上是一段取自java教程的代码,涉及绘制音频信号(波形)

简而言之,代码的作用基本上是: 如果音频数据样本大小等于 16 并且编码类型为 BigEndian 则执行此操作... 嗯..问题是我希望能够理解每一个代码语句的含义.. 谁能帮我 ? 提前谢谢了... 原始代码在这里: http://www.koders.com/java/fid3508156A13C80A263E7CE65C4C9D6F5D8651AF5D.aspx?s=%22David+Anderson%22 (采样图类)

我想理解的代码如下:

if (format.getSampleSizeInBits() == 16) {
    int nlengthInSamples = audioBytes.size() / 2;
    audioData = new int[nlengthInSamples];

    if (format.isBigEndian()) {
        for (int i = 0; i < nlengthInSamples; i++) {
        /* First byte is MSB (high order) */
        int MSB = (int) audioBytes.get(2 * i);
        /* Second byte is LSB (low order) */
        int LSB = (int) audioBytes.get(2 * i + 1);
        audioData[i] = MSB << 8 | (255 & LSB);
        }

特别是您如何将以下代码翻译成文字:

audioData[i] = MSB << 8 | (255 & LSB);

...再次感谢 垫子

最佳答案

这就是所谓的 bitwise operation ;它在位级别操作数字。

该片段结合了 2 byte将 16 位样本写入 intbig endian格式。

255,二进制为11111111 (即 8 个 1 的序列),用于“屏蔽”较低的 byte ,撤消任何 sign extension (byte 在 Java 中是有符号数字类型)。通常使用十六进制表示 0xFF而不是此类运算中的十进制 255。

<小时/>

如果您不想因位级操作而陷入困境,应该有一些库可以以可靠的方式为您完成此操作。

相关问题

关于java - 音频信号绘图代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3184802/

相关文章:

Java 文件 - 您可以使用 readUTF 从文本文件中读取字符串吗?

java - TestNg xml 显示没有错误 - 但在运行时它给出了运行总测试数 : 0

java - 在 Java 中解析 JSON 数据 - 受 id 困扰

Java Swing JLayeredPane 未显示

java - 如何更改我的 Java 代码以使用 replset?使用 Spring Data 和 MongoDB

java - 如何通过 Git 从源代码构建 Eclipse JDT Core?

java - 贾斯珀报告 : File Name incorrect while exporting report to Excel

java - 使用不同名称在循环内创建对象 (JTextfields)

java - 如何在 WebSphere 上使用 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl 而不是 com.ibm.xtq.xslt.jaxp.TransformerImpl?

java - 在预先排序的链表中插入一个节点