Audio Recording in Stereo giving same data in Left and Right channels

前端 未结 3 613
一个人的身影
一个人的身影 2021-01-03 09:57

I am trying to record and process audio data based on differences in what gets recorded in the left and right channel. For this I am using Audio Record class, with MIC as in

相关标签:
3条回答
  • 2021-01-03 10:15

    You cannot obtain a stereo input in this way on your device.

    Although the Nexus 4 has two microphones, they are not intended for stereo recording, but instead are likely for background noise cancellation.

    See https://groups.google.com/forum/#!topic/android-platform/SptXI964eEI where various low-level modifications of the audio system are discussed in an attempt to accomplish stereo recording.

    0 讨论(0)
  • 2021-01-03 10:17

    Here is a working example for capturing audio in stereo (tested with Samsung Galaxy S3 4.4.2 SlimKat):

    private void startRecording() {
        String filename = Environment.getExternalStorageDirectory().getPath()+"/SoundRecords/"+System.currentTimeMillis()+".aac";
        File record = new File(filename);
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        recorder.setAudioEncodingBitRate(128000);
        recorder.setAudioSamplingRate(96000);
        recorder.setAudioChannels(2);
        recorder.setOutputFile(filename);
        t_filename.setText(record.getName());
        try {
            recorder.prepare();
            recorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    If your phone supports stereo capturing, then this should work :)

    0 讨论(0)
  • 2021-01-03 10:19

    Using this configuration:

    private int audioSource = MediaRecorder.AudioSource.MIC;  
    private static int sampleRateInHz = 48000;  
    private static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;  
    private static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;  
    

    The data in the audio data is as follows.

    leftChannel data: [0,1],[4,5]...
    rightChannel data: [2,3],[6,7]...
    

    So you need to seperate the data.

    readSize = audioRecord.read(audioShortData, 0, bufferSizeInBytes);
    for(int i = 0; i < readSize/2; i = i + 2)
    {
           leftChannelAudioData[i] = audiodata[2*i];
           leftChannelAudioData[i+1] = audiodata[2*i+1]; 
           rightChannelAudioData[i] =  audiodata[2*i+2];
           rightChannelAudioData[i+1] = audiodata[2*i+3];
    }
    

    Hope this helpful.

    0 讨论(0)
提交回复
热议问题