안드로이드 개발 질문/답변
(글 수 45,052)
ㅇ 아래 방식을 활용하여 디코딩된 unsigned char 배열 (java 에서는 byte[]) 데이터를 가지고 있습니다.영화에서 나오는 음성입니다.
ㅇ
음... 소리가 잘 나오지 않는군요..
혹시 AudioTrack 에 대해 잘 알고 계신분 있으시면 조언쫌 부탁드립니다.
public class AndroidAudioDevice { AudioTrack track; short[] buffer = new short[1024]; public AndroidAudioDevice( ) { int minSize =AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT ); track = new AudioTrack( AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minSize, AudioTrack.MODE_STREAM); track.play(); } public void writeSamples(float[] samples) { fillBuffer( samples ); track.write( buffer, 0, samples.length ); } private void fillBuffer( float[] samples ) { if( buffer.length < samples.length ) buffer = new short[samples.length]; for( int i = 0; i < samples.length; i++ ) buffer[i] = (short)(samples[i] * Short.MAX_VALUE);; } }public class AudioTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new Thread( new Runnable( ) { public void run( ) { final float frequency = 440; float increment = (float)(2*Math.PI) * frequency / 44100; // angular increment for each sample float angle = 0; AudioDevice device = new AndroidAudioDevice( ); float samples[] = new float[1024]; while( true ) { for( int i = 0; i < samples.length; i++ ) { samples[i] = (float)Math.sin( angle ); angle += increment; } device.writeSamples( samples ); } } } ).start(); } }