美文网首页
android视频录音转语音识别

android视频录音转语音识别

作者: v587的毅哥 | 来源:发表于2021-04-14 11:51 被阅读0次

用Android的Camera录制的视频里,声音是48kHz 16bit 双声道的(我这里是用CameraX录制的,手机是mi10 pro,其他手机或方法等兼容性没研究过),讯飞等实时识别要求的是16kHz 16bit 单声道的,所以有了如下转换方法。

直接上代码:

    /**
    * 48000hz 16bit stereo转16000hz 16bit mono
    * @param srcAudioBytes 音源bytes
    * @return 转换后的bytes
    */
    public static byte[] recorder2recognizer(byte[] srcAudioBytes) {
        if (srcAudioBytes.length % 4 != 0) {
            throw new IllegalArgumentException("音源非16bit的立体声吧?");
        }
        int fromHZ = 48000;
        int toHZ = 16000;
        int ratio = fromHZ / toHZ;//ratio = 3
        byte[] destAudioBytes = new byte[srcAudioBytes.length / ratio / 2];//2是指双声道
        for (int i = 0; i < srcAudioBytes.length; i += 4 * ratio) {//4是16bit的双声道占4个字节
            destAudioBytes[i / ratio / 2] = combine(srcAudioBytes[i], srcAudioBytes[i + 2]);
            destAudioBytes[i / ratio / 2 + 1] = combine(srcAudioBytes[i + 1], srcAudioBytes[i + 3]);
        }
        return destAudioBytes;
    }

    /**
    * 其实就一个求平均数而已
    */
    private static byte combine(byte l, byte r) {
        return (byte) ((l + r) >> 1);
    }

原理很简单,贴个网上的图:


android中PCM格式存储结构

相关文章

网友评论

      本文标题:android视频录音转语音识别

      本文链接:https://www.haomeiwen.com/subject/ipuklltx.html