TYPE_BUILTIN_MIC >> TYPE_USB_DEVICE (IN)
+
TYPE_USB_DEVICE (OUT) >> TYPE_BUILTIN_SPEAKER
To mi je konkretno potrebno rutiranje.
public void bljuc1 () {
new Thread (new Runnable() {
@Override
public void run() {
boolean isRecording = true;
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] devices1Xins = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);
AudioDeviceInfo[] devices1Xouts = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
int buffersize = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT) ;
AudioRecord arec1 = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize);
AudioTrack atrack1 = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);
atrack1.setPlaybackRate(16000);
for (AudioDeviceInfo deviceX : devices1Xins) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_BUILTIN_MIC) {
arec1.setPreferredDevice(deviceX);
}
}
for (AudioDeviceInfo deviceX : devices1Xouts) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_USB_DEVICE) {
atrack1.setPreferredDevice(deviceX);
}
}
byte[] buffer1 = new byte[buffersize];
arec1.startRecording();
atrack1.play();
while (isRecording) {
arec1.read(buffer1, 0, buffersize);
atrack1.write(buffer1, 0, buffer1.length);
}
}
}).start();
}
public void bljuc2 () {
new Thread(new Runnable() {
@Override
public void run() {
boolean isRecording = true;
AudioManager audioManager2 = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] devices2Xins = audioManager2.getDevices(AudioManager.GET_DEVICES_INPUTS);
AudioDeviceInfo[] devices2Xouts = audioManager2.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
int buffersize2 = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT) ;
AudioRecord arec2 = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize2);
AudioTrack atrack2 = new AudioTrack(AudioManager.MODE_IN_CALL, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize2, AudioTrack.MODE_STREAM);
atrack2.setPlaybackRate(16000);
for (AudioDeviceInfo deviceX : devices2Xins) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_USB_DEVICE) {
arec2.setPreferredDevice(deviceX);
}
}
for (AudioDeviceInfo deviceX : devices2Xouts) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
atrack2.setPreferredDevice(deviceX);
}
}
byte[] buffer2 = new byte[buffersize];
arec2.startRecording();
atrack2.play();
while (isRecording) {
arec2.read(buffer2, 0, buffersize);
atrack2.write(buffer2, 0, buffer2.length);
}
}
}).start();
}
Ovo je primer u Java za Android koji radi za jedan ili za drugi smer, kada se puste zajedno ovaj drugi ne proradi, ostane aktivan prvi koji je startovan. To je li limit Androida i telefona, na Linux / Unix je to inace izvodljivo ali ovaj muceni Android pravi problem, znaci ne moze da snima vise razlicitih trackova istovremeno sto je preduslov da ovaj code radi.
+
TYPE_USB_DEVICE (OUT) >> TYPE_BUILTIN_SPEAKER
To mi je konkretno potrebno rutiranje.
public void bljuc1 () {
new Thread (new Runnable() {
@Override
public void run() {
boolean isRecording = true;
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] devices1Xins = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);
AudioDeviceInfo[] devices1Xouts = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
int buffersize = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT) ;
AudioRecord arec1 = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize);
AudioTrack atrack1 = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);
atrack1.setPlaybackRate(16000);
for (AudioDeviceInfo deviceX : devices1Xins) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_BUILTIN_MIC) {
arec1.setPreferredDevice(deviceX);
}
}
for (AudioDeviceInfo deviceX : devices1Xouts) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_USB_DEVICE) {
atrack1.setPreferredDevice(deviceX);
}
}
byte[] buffer1 = new byte[buffersize];
arec1.startRecording();
atrack1.play();
while (isRecording) {
arec1.read(buffer1, 0, buffersize);
atrack1.write(buffer1, 0, buffer1.length);
}
}
}).start();
}
public void bljuc2 () {
new Thread(new Runnable() {
@Override
public void run() {
boolean isRecording = true;
AudioManager audioManager2 = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] devices2Xins = audioManager2.getDevices(AudioManager.GET_DEVICES_INPUTS);
AudioDeviceInfo[] devices2Xouts = audioManager2.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
int buffersize2 = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT) ;
AudioRecord arec2 = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize2);
AudioTrack atrack2 = new AudioTrack(AudioManager.MODE_IN_CALL, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize2, AudioTrack.MODE_STREAM);
atrack2.setPlaybackRate(16000);
for (AudioDeviceInfo deviceX : devices2Xins) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_USB_DEVICE) {
arec2.setPreferredDevice(deviceX);
}
}
for (AudioDeviceInfo deviceX : devices2Xouts) {
if (deviceX.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
atrack2.setPreferredDevice(deviceX);
}
}
byte[] buffer2 = new byte[buffersize];
arec2.startRecording();
atrack2.play();
while (isRecording) {
arec2.read(buffer2, 0, buffersize);
atrack2.write(buffer2, 0, buffer2.length);
}
}
}).start();
}
Ovo je primer u Java za Android koji radi za jedan ili za drugi smer, kada se puste zajedno ovaj drugi ne proradi, ostane aktivan prvi koji je startovan. To je li limit Androida i telefona, na Linux / Unix je to inace izvodljivo ali ovaj muceni Android pravi problem, znaci ne moze da snima vise razlicitih trackova istovremeno sto je preduslov da ovaj code radi.