【问题标题】:How to determine if 8bit WAV File is signed or unsigned, using Java and without javax.sound如何确定 8bit WAV 文件是签名还是未签名,使用 Java 和没有 javax.sound
【发布时间】:2012-05-24 04:36:42
【问题描述】:

我需要通过仅读取文件来知道 8 位的“.wav”是签名的还是未签名的 PCM。我不能使用“javax.sound.sampled.*”或 AudioSystem 库。

【问题讨论】:

  • 我试图找出 Java 如何检测 WAV 文件是 PCM_Signed 还是 PCM_Unsigned。在本机文件“AudioSystem.java”第 1068 行。
  • 转到您之前提出的问题。选择正确或最佳或最有帮助的答案旁边的“复选标记”。另见the FAQ。如果你自己解决了,你可以选择你自己的答案。

标签: java bytearray wav unsigned signed


【解决方案1】:

在 wav 文件中,8 位样本存储为无符号字节,范围从 0 到 255。 16 位样本以带符号整数形式存储在 2 的补码中。

【讨论】:

    【解决方案2】:

    8 位(或更低)WAV 文件始终是无符号的。 9 位或更高位总是有符号的:

    每个样本都包含在一个整数i中。 i 的大小是包含指定样本大小所需的最小字节数。首先存储最低有效字节。 i的最高位存储代表样本幅度的位,其余位设置为零。

    例如,如果样本大小(记录在 nBitsPerSample 中)为 12 位,则每个样本都存储在一个两字节整数中。设置第一个(最低有效)字节的最低有效四位 归零。

    各种大小的PCM波形样本的数据格式和最大值最小值如下:

    Multimedia Programming Interface and Data Specifications 1.0 - IBM/微软,1991 年 8 月

    【讨论】:

    • “1-8 位无符号,9+ 位有符号”,只是 WAV 标准中设置的 约定 对吗?还是由于任何“限制”本身?
    • @SreenikethanI 这就是格式的定义。我不确定您所说的“约定”是什么意思。如果数据为 7 位,则表示无符号的 7 位数字。
    • 感谢您的回复。通过“约定”,我的意思是问是否只是 WAV 标准决定 8 位(及以下)被 un 签名,即使从技术上讲 signed 数字是可能吗?
    • @SreenikethanI WAV 格式没有任何方式来表示签名,所以不,8 位签名数据在 WAV 格式中是不可能的。如果它是 8 位的,它是无符号的。 (通过阅读格式规范很清楚,格式没有仔细计划,只是发生了一些事情,一路上都有新的东西。它可能应该针对所有位深度进行签名,但早期实现忽略了区别,现在我们被困住了。)
    • 对,这对我来说很清楚。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2016-06-22
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多