안녕하세요 아즈라엘 입니다. 


안펍의 고수님들께 오디오 관련하여 조언을 얻고자 질문합니다.


sampleRate frequency = 44100; 으로 오디로을 레코딩 하였습니다.

출력할때 outfrequency 부분을 소수점으로 계산하여 사운드 스피드를 조정하였으나

44100만 안되는 현상이 발견되었습니다.

int bufferSize = AudioTrack.getMinBufferSize((int)(44100 * 1.36f)channelConfigurationaudioEncoding);


그리하여 byte 단위로 끄집어내고 비트 쉬프트하여 샘플링 간격을 조정하여 출력 스피드를 조절하고자 

시도 하는데 어떻게 해야 할지 모르겠네요 ㅠㅠ


일단 바이트 뽑아내는것 조차 안되고 있고.. 비트쉬프트를 어떻게 해야 할지도 고민입니다. ^^


대충 감으로만 어떻게 하면 될거 같다는것 까지만..실제 코드에 구현은 손도 못대고 있는 현실이 싫으네요 ㅠㅠ


---- 아래는 적용된 소스중 출력 부분입니다. ----


private class PlayAudio extends Thread {

private DataInputStream dis;

private AudioTrack audioTrack;


@Override

public void run() {

if (!new File(recordingFile).exists()) {

Log.e("#@#", "playAudio() -> recordingFile file not exist");

return;

}


int bufferSize = AudioTrack.getMinBufferSize(outfrequency, channelConfiguration, audioEncoding);

short[] audiodata = new short[bufferSize / 4];

try {

dis = new DataInputStream(new BufferedInputStream(new FileInputStream(recordingFile)));

audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, outfrequency, channelConfiguration, audioEncoding, bufferSize,

AudioTrack.MODE_STREAM);

audioTrack.play();

while (dis.available() > 0) {

int i = 0;

while (dis.available() > 0 && i < audiodata.length) {

audiodata[i] =  dis.readShort();

i++;

}

audioTrack.write(audiodata, 0, audiodata.length);

}

audioTrack.stop();

dis.close();


} catch (FileNotFoundException e) {

} catch (IOException e) {

} catch (IllegalStateException e) {

}


}