Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 左右声道与麦克风录音分离_Android - Fatal编程技术网

Android 左右声道与麦克风录音分离

Android 左右声道与麦克风录音分离,android,Android,我试图从麦克风录制,并将录制的数据单独发送到左声道,右声道上有零,但我的技术似乎不起作用。。 我正在使用PCM 16和单声道模式的录音和音轨,我似乎做错了什么 package com.example.leftrighttest; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack

我试图从麦克风录制,并将录制的数据单独发送到左声道,右声道上有零,但我的技术似乎不起作用。。 我正在使用PCM 16和单声道模式的录音和音轨,我似乎做错了什么

package com.example.leftrighttest;

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int freq=44100;
        final int bufferSize = (AudioRecord.getMinBufferSize(freq,AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT ));

        AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, freq,AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT, bufferSize );


        AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                (int) freq,AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT, bufferSize,
                AudioTrack.MODE_STREAM);

        audioTrack.setPlaybackRate(freq);

        final byte[] buffer = new byte[bufferSize];
       audioRecord.startRecording();




                    byte[] byteBufferFinal = new byte[bufferSize*2]; 

                    //LL RR LL RR LL RR 
                    while(true)
                    {
                    audioRecord.read(buffer, 0, bufferSize);
                   for(int k = 0, index = 0; index < byteBufferFinal.length - 4; k=k+2){
                        byteBufferFinal[index] = buffer[k]; // LEFT {0,1/4,5/8,9/12,13;...}
                        //System.out.println(byteBufferFinal[index]);
                        byteBufferFinal[index+1] = buffer[k+1];
                       // System.out.println(byteBufferFinal[index+1]);
                        index = index + 2;
                        byteBufferFinal[index] =0; //byteBuffer2[k]; // RIGHT {2,3/6,7/10,11;...}
                        //System.out.println(byteBufferFinal[index]);
                        byteBufferFinal[index+1] =0;// byteBuffer2[k+1];
                       // System.out.println(byteBufferFinal[index+1]);
                        index = index + 2;
                    }
                       audioTrack.write( byteBufferFinal, 0, bufferSize*2);
                       audioTrack.play();
                    }

    }



}
package com.example.leftrighttest;
导入android.media.AudioFormat;
导入android.media.AudioManager;
导入android.media.AudioRecord;
导入android.media.AudioTrack;
导入android.media.MediaRecorder;
导入android.os.Bundle;
导入android.app.Activity;
导入android.util.Log;
导入android.view.Menu;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intfreq=44100;
最终int bufferSize=(音频记录.getMinBufferSize(频率,音频格式.CHANNEL)在单声道中,
AudioFormat.ENCODING_PCM_16BIT));
AudioRecord AudioRecord=新的录音(单声道中的MediaRecorder.AudioSource.MIC、freq、AudioFormat.CHANNEL\u、,
AudioFormat.ENCODING_PCM_16位,缓冲区大小);
AudioTrack AudioTrack=新的AudioTrack(AudioManager.STREAM_MUSIC,
(int)频率,音频格式。通道输出单声道,
AudioFormat.ENCODING_PCM_16位,缓冲区大小,
音频跟踪模式(音频流);
audioTrack.setPlaybackRate(频率);
最终字节[]缓冲区=新字节[bufferSize];
录音。开始录制();
byte[]byteBufferFinal=新字节[bufferSize*2];
//哎哟,哎哟,哎哟,哎哟
while(true)
{
音频记录读取(缓冲区,0,缓冲区大小);
对于(int k=0,index=0;index
我想好了,所以正确的解决方案是1)将模式从单声道更改为立体声2)读取缓冲区,格式如下(L,L,R,R,L,L,L,R,R…),因此每两个字节发送到一个通道(pcm 16),然后我将要取消的通道设置为零,因此如果我只想让左通道工作,我的缓冲区将被取消(L,L,0,0,L,L,0,0,…)

您正在创建单声道
音轨,因此它只有一个频道。是的,您说得对,谢谢(y)