Android PCM流录音在PC端实时播放

//OutputStream outputStream是socket的输入流,实时传输到PC端。socket这块就不添代码了。
public void StartRecord(OutputStream outputStream) {
    Log.i(TAG, "开始录音");
    //采样率
    int frequency = 44100;
    //格式,单声道
    int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
    //16Bit
    int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

    try {
        int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
        AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);

        byte[] buffer = new byte[bufferSize]; //一样要用byte[], 否则会有字节序大小尾端的问题。
        audioRecord.startRecording();

        while (isRecording) {
            int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
            if (bufferReadResult > 0) {
                outputStream.write(buffer);
            }
        }
        audioRecord.stop();
    } catch (Throwable t) {
        Log.e(TAG, "录音失败");
    }
}

 

PC端播放PCM流是完全参考了雷神的代码:https://blog.csdn.net/leixiaohua1020/article/details/40540147

 

 

在PC代码中参数设置一定要和android端保持一致!

1. 采样率

2. 声道

3. 字节编码深度,//AudioFormat.ENCODING_PCM_XX

4. bufferSize。 PC Socket每次获取的流大小必须也是 AudioRecord.getMinBufferSize()

5. 前面提到的要用byte[], 不要用short[], int[], 不然后果就是小时候电视机没信号的声音! 这个问题困扰了我一天,最后发现是字节序的问题,这个不详细展开了。 搜大尾端,小尾端了解一下就好了。

 

雷神的demo是可以直接跑的。致敬一下雷神。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值