안드로이드 개발 질문/답변
(글 수 45,052)
여기저기 돌아다니다가 예제 소스들을 합쳐서
아래와 같이 만들었습니다.
AudioTrack을 사용해서 wav파일을 재생시켜주는 건데..
SD카드에 있는 wav음원을 재생시키려 합니다.
아래와 같이 해주면, 정상적인 음원의 소리가 안나오고
화이트노이즈 같이 텔레비젼 수신없을 때 소리가 납니다.
byte로 음원 잘 받아오고 하는데,
제가 세팅을 실수한 부분이 있나요?
initialize() 함수 부분에 세팅을 해놓았구요..
한번 봐주세요^^
부탁드립니다.
public class SoundActivity extends Activity implements Runnable{
AudioTrack audioTrack;
public static final String MEDIA_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
/** Called when the activity is first created. */
Button play_button, stop_button;
File file = null;
byte[] byteData = null;
Boolean playing = false;
int bufSize;
AudioTrack myAT = null;
Thread play_thread = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
play_button = (Button) findViewById(R.id.btn1);
stop_button = (Button) findViewById(R.id.btn2);
// WAVEFile
file = new File(MEDIA_PATH+"/md_cicada.wav");
// WAVE
byteData = new byte[(int) file.length()];
// WAVE
FileInputStream in = null;
try {
in = new FileInputStream(file);
in.read(byteData);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//
initialize();
//
play_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//
play_thread.start();
}
});
//
stop_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//
if (myAT.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) {
myAT.stop();
play_thread = null;
initialize();
}
}
});
}
//
void initialize() {
//
bufSize = android.media.AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
// AudioTrack
myAT = new AudioTrack(AudioManager.STREAM_MUSIC,
44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufSize,
AudioTrack.MODE_STREAM);
//
play_thread = new Thread(this);
}
//
public void run() {
if (myAT != null) {
//
myAT.play();
myAT.write(byteData, 0, byteData.length);
}
}
}