주파수를 좌우로 각각 출력하는 코드를 작성하였습니다.
근데 이전까지 왼쪽 오른쪽 나뉘어서 잘 출력 되었는데
안드로이드 버전 11을 사용하는 태블릿으로 바꾼 다음 테스트를 하니까
양쪽에서 동시에 소리가 출력되는 현상이 발생합니다..
안드로이드 버전 8~9를 사용하는 태블릿은 여전히 좌 우 각각 출력 됩니다..
안드로이드 11은 양쪽 소리를 각각 출력을 못하게 되어 있나요?...
주파수를 각각 출력하는 코드는 대략 이렇습니다.
public void generate(int frequency, int duration, double toneVol){
if(at != null ) {
Log.d("audioTrack is " , "not null");
at.stop();
at.release();
at = null;
}
double dnumSamples = (double) sampleRate * duration ;
dnumSamples = Math.ceil(dnumSamples);
numSamples = (int) dnumSamples;
double[] sampleTone = new double[sampleRate * duration];
for (int i = 0; i < numSamples; ++i) {
sampleTone[i] = Math.sin(2 * frequency * Math.PI * i / (sampleRate));
}
geneatedSound = new byte[numByte * numSamples * ch];
int idx = 0;
for (int i = 0; i < numSamples; i++) {
double value = sampleTone[i];
final short val = (short) (value * 32767 * toneVol);
if(Sound) { // Sound가 true면 왼쪽에서 출력
geneatedSound[idx++] = (byte) (val & 0x00ff);
geneatedSound[idx++] = (byte) ((val & 0xff00) >>> 8);
geneatedSound[idx++] = 0;
geneatedSound[idx++] = 0;
} else { // Sound가 false면 오른쪽에서 출력
geneatedSound[idx++] = 0;
geneatedSound[idx++] = 0;
geneatedSound[idx++] = (byte) (val & 0x00ff);
geneatedSound[idx++] = (byte) ((val & 0xff00) >>> 8);
}
}
try {
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
bufferSize *= 2;
at = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
at.setNotificationMarkerPosition(numSamples);
at.setPlaybackPositionUpdateListener(
new AudioTrack.OnPlaybackPositionUpdateListener() {
@Override public void onPeriodicNotification(AudioTrack track) {
}
@Override public void onMarkerReached(AudioTrack track) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
void play() {
Thread t1 = new Thread() {
@Override
public void run() {
at.play();
at.write(geneatedSound, 0, geneatedSound.length);
}
};
t1.start();
}