Android 앱에서 작업 중이며 짧은 소리 (~ 2 초)를 연주하고 싶습니다. Soundpool을 시도했지만 사운드가 이미 재생 중인지 확인할 수 없기 때문에 실제로는 적합하지 않습니다. 그래서 AudioTrack을 사용하기로 결정했습니다.Android : AudioTrack이 시작시 딸깍 소리가납니다.
소리가 나기 시작하면 대부분 "소리가납니다"라는 소리가납니다. 오디오 파일을 검사했는데 깨끗합니다.
스트리밍 모드에서 audiotrack을 사용합니다. 나는 정적 모드가 짧은 소리에 더 좋다는 것을 알았지 만 많은 검색 후에도 나는 그것이 작동하도록하는 방법을 여전히 이해하지 못합니다. 클릭 노이즈는 wav 파일의 헤더로 인해 발생할 수 있으므로 setPlaybackHeadPosition(int positionInFrames)
기능 (정적 모드에서만 작동하는 것으로 가정)을 건너 뛰면 사운드가 사라질 수도 있습니다.
여기에 있습니다 내 코드 (문제는 처음에는 똑딱 소리가납니다.)
int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
audioTrack.play();
int i = 0;
int bufferSize = 2048; //don't really know which value to put
audioTrack.setPlaybackRate(88200);
byte [] buffer = new byte[bufferSize];
//there we open the wav file >
InputStream inputStream = getResources().openRawResource(R.raw.abordage);
try {
while((i = inputStream.read(buffer)) != -1)
audioTrack.write(buffer, 0, i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
누구나 그 소음을 피하기위한 해결책이 있습니까? 나는 때때로 작동하지만 매번 작동하지 않는 this을 시도했다. 누군가가 MODE_STATIC
에 audiotrack을 구현하는 방법을 보여줄 수 있습니까? 감사합니다.
wav 파일에서 재생 하시겠습니까? 그런 다음 헤더가 (대부분) 그 크기이기 때문에 처음 44 바이트를 건너 뛰는 것으로 충분할 것입니다. 스트림에 이미있는 바이트를 건너 뛰는 것이 더 좋습니다. inputStream.skip (44) – Chris623
내 대답과 해결책이 표시되고 받아 들여진 응답 틱을 이동해야합니다.) –