java - 从字节更改为短格式再返回字节时,AudioRecorder 质量会下降

标签 java android audio audio-recording

我正在使用 AudioRecorder 类为 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;
}

最佳答案

您必须考虑到 byte 已签名。

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

关于java - 从字节更改为短格式再返回字节时,AudioRecorder 质量会下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388682/

相关文章:

java - é在java中dom转换后显示为é

java - Richfaces 标签被忽略

Java android 以非位置格式指定的多个替换;您是要添加格式化的 ="false"属性吗?

c# - ASIO:缓冲损失

java - 使用instanceof检查特定子类是一个好的设计实践吗?

java - Spring Data JDBC - 一对多 - Kotlin

android - 在android中对阿拉伯语单词进行排序

android - 我调试了 startActivity 传递的行,但表单不显示

python - 从声音文件中检测频率

Android MediaPlayer 不会暂停