录音系列:java运算符

Posted zhangjin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了录音系列:java运算符相关的知识,希望对你有一定的参考价值。

  • 在pcm转wav,就是在原来的byte[]前面增加header,header是一个长度为44的字节数组。
  byte[] header = new byte[44];
        header[0] = 'R'; // RIFF/WAVE header
        header[1] = 'I';
        header[2] = 'F';
        header[3] = 'F';
        header[4] = (byte) (totalDataLen & 0xff);
        header[5] = (byte) ((totalDataLen >> 8) & 0xff);
        header[6] = (byte) ((totalDataLen >> 16) & 0xff);
        header[7] = (byte) ((totalDataLen >> 24) & 0xff);
        header[8] = 'W';
        header[9] = 'A';
        header[10] = 'V';
        header[11] = 'E';
        header[12] = 'f'; // 'fmt ' chunk
        header[13] = 'm';
        header[14] = 't';
        header[15] = ' ';
        header[16] = 16; // 4 bytes: size of 'fmt ' chunk
        header[17] = 0;
        header[18] = 0;
        header[19] = 0;
        header[20] = 1; // format = 1
        header[21] = 0;
        header[22] = (byte) channels;
        header[23] = 0;
        header[24] = (byte) (longSampleRate & 0xff);
        header[25] = (byte) ((longSampleRate >> 8) & 0xff);
        header[26] = (byte) ((longSampleRate >> 16) & 0xff);
        header[27] = (byte) ((longSampleRate >> 24) & 0xff);
        header[28] = (byte) (byteRate & 0xff);
        header[29] = (byte) ((byteRate >> 8) & 0xff);
        header[30] = (byte) ((byteRate >> 16) & 0xff);
        header[31] = (byte) ((byteRate >> 24) & 0xff);
        header[32] = (byte) (2 * 16 / 8); // block align
        header[33] = 0;
        header[34] = 16; // bits per sample
        header[35] = 0;
        header[36] = 'd';
        header[37] = 'a';
        header[38] = 't';
        header[39] = 'a';
        header[40] = (byte) (totalAudioLen & 0xff);
        header[41] = (byte) ((totalAudioLen >> 8) & 0xff);
        header[42] = (byte) ((totalAudioLen >> 16) & 0xff);
        header[43] = (byte) ((totalAudioLen >> 24) & 0xff);

header[4]用到&操作符,按位与

&按位与的运算规则,是将两边的数转换为二进制位,(两个为真才为真)。
1&1=1 , 1&0=0 , 0&1=0 , 0&0=0

测试一下

public class OperatorTest {
    public static void main(String[] args) {
        int i1 = 3 & 5;
        System.out.println(i1);

        int i2 = 1280 & 0xff;
        System.out.println(i2);
        
    }
}

在这里插入图片描述

header[5]用到了>>操作符,右移运算符

  int i3 = 11 >> 2;
  System.out.println(i3); //2
  
 int i4 = 1280 >> 8;
 System.out.println(i4); //5   101 0000 0000右移动8位,是101,10进制是5。

以上是关于录音系列:java运算符的主要内容,如果未能解决你的问题,请参考以下文章

Python中的录音

iOS开发系列--音频播放录音视频播放拍照视频录制

iOS开发系列--音频播放录音视频播放拍照视频录制

iOS开发系列--音频播放录音视频播放拍照视频录制

JSP 基础语法

10个JavaScript代码片段,使你更加容易前端开发。