关于安卓上pcm文件转wav全是噪音解决办法

1.一开始发现8bit的pcm能正常转换,但换成16bit转换出来全是噪音,网上资料也不全,思考了很久,突然想起大小端的问题,进行大小端处理后再进行转换,完美播放!

下面贴出大小端转换方法:

public class BigorLittle {

    public static String bigtolittle( String fileName) throws IOException {

        File file = new File(fileName);    //filename为pcm文件,请自行设置

        InputStream in = null;
        byte[] bytes = null;
        in = new FileInputStream(file);
        bytes = new byte[in.available()];//in.available()是得到文件的字节数
        int length=bytes.length;
        while (length!=1){
          long i=  in.read(bytes,0,bytes.length);
          if(i==-1){
             break;
          }
          length-=i;
        }

        int dataLength = bytes.length;
        int shortlength = dataLength / 2;
        ByteBuffer byteBuffer = ByteBuffer.wrap(bytes, 0, dataLength);
        ShortBuffer shortBuffer = byteBuffer.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();//此处设置大小端
        short[] shorts = new short[shortlength];
        shortBuffer.get(shorts, 0, shortlength);
        File file1 = File.createTempFile("pcm",null);//输出为临时文件
        String pcmtem = file1.getPath();
        FileOutputStream fos1 = new FileOutputStream(file1);
        BufferedOutputStream bos1 = new BufferedOutputStream(fos1);
        DataOutputStream dos1 = new DataOutputStream(bos1);
        for (int i = 0; i < shorts.length; i++) {
            dos1.writeShort(shorts[i]);

        }
        dos1.close();
        Log.d("gg", "bigtolittle: "+"="+shorts.length);
        return pcmtem;
    }

2.pcm转wav参考文章:

  https://blog.csdn.net/mcgrady_tracy/article/details/52502263

  https://blog.csdn.net/JenseaChen/article/details/46883319


猜你喜欢

转载自blog.csdn.net/tcsupreme/article/details/80358041