当从字节变为短并返回字节时,AudioRecorder质量下降

时间:2014-08-19 16:38:44

标签: java android audio audio-recording

我正在使用AudioRecorder Class为Android编写录音应用程序。 代码将音频原始数据记录在一个字节数组中,然后将其保存到WAV文件,直到现在一切正常。 这是我的问题: 我需要将每2个字节更改为一个短,这样我就可以处理音频数据,然后将其更改回字节,这样我就可以写入输出流文件了。目前,音频数据没有工作,只是从一个字节移动到另一个短时间再返回,但由于某种原因,音频质量有不良下降,这里是从字节移动到短移的代码,然后再返回:

//16 bit per sample to get correct value of sample convert to short
private short[] ByteToShort (byte[] test)
{
    short[] Sh  = new short[Alldata.size()/2];

    for(int ii=0;ii<Alldata.size()/2;ii++)
    {
        //Sh[ii] = (short) ((short)Alldata.get(2*ii)  | ((short)Alldata.get(2*ii+1))<<8);
        Sh[ii] = (short) ((short)test[2*ii]  | ((short)test[2*ii+1])<<8);

    }
    return Sh;
}
//change back to bytes for input/output streamfiles 
byte[] ShortToByte(short[] data)
{
    byte[] dataByte = new byte[(int) (data.length*2)];
    for(int ii=0;ii<data.length;ii++)
    {
        dataByte[2*ii] = (byte)(data[ii] & 0x00ff);
        dataByte[2*ii+1] = (byte)((data[ii] & 0xff00) >> 8);
    }

    return dataByte;
}

1 个答案:

答案 0 :(得分:1)

您必须考虑byte已签名。

Sh[ii] = (short) (test[2 * ii] & 0xFF | (test[2 * ii + 1] & 0xFF) << 8);