录音时分离左右声道的数据

平台录音默认为8通道数据,保存到文件中取左右声道数据。

/**
* 当mic=1时,取左声道数据
* 当mic=2时,取右声道数据
*
**/
    private byte[] splitStereoPcm(byte[] data) {
        int monoLength = data.length / 16;
        byte[] pcmData = new byte[monoLength*2];
        for (int i = 0; i < monoLength; i++) {
            if(mic == 1){
                System.arraycopy(data, i * 16, pcmData, i * 2, 2);
            }else if(mic == 2){
                System.arraycopy(data, i * 16 + 4, pcmData, i *2 , 2);
            }
        }
        return pcmData;
    }
    ```
    
```java
    private AudioRecord mAudioRecord;
    private volatile boolean mIsRecording = false;
    private AudioFormat.Builder mAudioFormat;
    private AudioAttributes mPlaybackAttributes;
    private boolean mIsPlay;
    private AudioTrack mAudio = null;
    private RecorderHandler mHandler;
    /
    **
     * write sound file
     */
    private void writeAudioDataToFile() {
        int bytesRecord = 0;
        int bufferSize = AudioRecord.getMinBufferSize(64000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
        //int bufferSize = AudioRecord.getMinBufferSize(64000, AudioFormat.CHANNEL_IN_STEREO,  AudioFormat.ENCODING_PCM_16BIT);
        Log.d(TAG, "record bufferSize=(" + bufferSize + ")");
        byte[] tempBuffer = new byte[bufferSize];

        mAudioRecord.startRecording();
        requestFocus();
        mAudio.play();
        while (mIsPlay) {
            // gets the voice output from microphone to byte format
            bytesRecord = mAudioRecord.read(tempBuffer, 0, bufferSize);
            Log.d(TAG, "record byte=(" + bytesRecord + ")");
            if (bytesRecord == AudioRecord.ERROR_INVALID_OPERATION || bytesRecord == AudioRecord.ERROR_BAD_VALUE) {
                Log.d(TAG, " Audio record read err");
                replyOperateResult(FAIL_RET);
            }
            if (bytesRecord != 0 && bytesRecord != -1) {
                mAudio.write(splitStereoPcm(tempBuffer), 0, bytesRecord / 8);
            } else {
                replyOperateResult(FAIL_RET);
                Log.d(TAG, "$$$record byte=0");
            }
        }
        mAudioRecord.stop();
        stopPlayBack();
        replyOperateResult(SUCCESS_RET);
        Log.d(TAG, "after writer record");
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值