나는 다음과 같은 기능이 있습니다혼란
void playSound(){
final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
}
버튼을 클릭 :
이public void btnTx_click(View view){
textView.setText("CLICKED1");
int rem;
while(dataToSend != 0){
rem = dataToSend % 2;
if(rem==0)
genTone(0.0);
else
genTone(1.0);
dataToSend /= 2;
counter++;
}
// Use a new tread as this can take a while
final Thread thread = new Thread(new Runnable() {
public void run() {
// genTone(); // this line is left here for my recor donly
handler.post(new Runnable() {
public void run() {
playSound();
}
});
}
});
thread.start();
}
btnTx_click()
함수의 while
루프가 playSound()
에 사용되는 generatedSnd
배열을 준비를 기능. 버튼을 누르면이 프로그램은 오디오 샘플을 generatedSnd
배열로로드 한 다음 AudioTrack을 사용하여 오디오를 재생합니다. 로드 및 재생은 스레드에서 수행됩니다.
이 스레드가 언제 종료되는지 어떻게 알 수 있습니까? AudioTrack 재생이 끝난 후 종료됩니까? 또는 public void run()
종료 후 즉시 종료 되나요? 스레드가 끝나는 시점을 정확하게 확인할 수 있습니까? 그렇다면 MainActivity.java에서 이러한 검사가 포함되어야하는 위치는 무엇입니까?
AudioTrack이 generatedSnd
의 재생을 완료하면 generatedSnd
에 새로운 값 집합을로드하고이 새로운 음색을 재생하기를 원합니다. 실제로 톤 1, 톤 2, 톤 3, .... 등을 연주하고 싶습니다.
내부적으로 생성 된 다른 스레드는 무엇을 의미합니까? AudioTrack을 재생하는 btnTx_click()에서'thread'가 선언되지 않았습니까? – user13267
네이티브 레이어의 다른 스레드에서 재생이 진행 중입니다. UI를 차단하지 않고 재생이 이루어지는 UI 스레드에서 play()를 호출 해보십시오. –
그래서이 새 스레드를 만들 필요가 없습니다. – user13267