audio - 将float转换为java签名的PCM的wav是javax.sampled的缩写。

标签 audio swap pcm short

作为起点,我有一种有效的方法。但似乎行太多或 Action 重叠。
如果您是音频向导,则可以立即看到如何将其简化。那么如何把它煮下来呢?

public static byte[] float16toDualByte(byte[] twoPlaces, float f_val) {

    short val_as_short = (short) (f_val * 32768);//signed short.16bit.

    twoPlaces[0] = (byte) (val_as_short >>> 8);
    twoPlaces[1] = (byte) val_as_short;

    ByteBuffer buf = ByteBuffer.wrap(twoPlaces);
    buf.order(ByteOrder.LITTLE_ENDIAN);
    short turned = buf.asShortBuffer().get(0);

    twoPlaces[0] = (byte) (turned >>> 8);
    twoPlaces[1] = (byte) turned;
    return twoPlaces;

}

最佳答案

我发现这样的想法首先将浮点数转换为整数。而且有效!
此方法提供了两个字节的数组,可随时将它们写入javax.sound.sampled.SourceDataLine。这两个字节代表一个单帧。
SourceDataLine要理解的一件事是从物理声卡的 Angular 给出名称。声卡中的那个小男人正在等待将样本传递给连接器。从用户的 Angular 来看,这意味着输出到声卡。

  public byte[] simpleSwap(byte[] twoPlaces, float f_val) {

    int val_as_short = (int) (f_val * 32768);//signed short.16bit as int.
    int swapped = ((val_as_short >> 8) & 0xff) | ((val_as_short & 0xff) << 8);
    twoPlaces[0] = (byte) (swapped >>> 8);
    twoPlaces[1] = (byte) swapped;
    return twoPlaces;

}

关于audio - 将float转换为java签名的PCM的wav是javax.sampled的缩写。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198205/

相关文章:

java - 播放音乐的Android应用几秒钟后停止工作

networking - 无丢包的自适应抖动缓冲

java - 8位PCMU编码器/解码器

迭代器的 C++ 模板特化

ios - 使用原始 PCM 生成视频或音频

android - 从 native 代码将 PCM 音频数据写入音频设备

android - 降低Android中的音频播放速度

android - Android 上的低延迟音频播放

javascript - 点击两张图片时会互相改变

Javascript 检查列表是否在一次交换后排序