美文网首页
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