2013-02-27 68 views
0

我正在運行此程序,它使用AudioTrack從資源文件夾播放聲音文件。有輸出但聲音不正確。無法正確播放聲音使用Android AudioTrack

項目文件已上傳。

http://www.mediafire.com/?995mxc87hf28fxk

package com.self.AudioTrack; 

    import java.io.IOException; 

    import android.app.Activity; 
    import android.content.Context; 
import android.os.Bundle; 

public class AudioTrack2Activity extends Activity { 
/** Called when the activity is first created. */ 
Context ctx; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ctx=getApplicationContext(); 
    new Thread(new Runnable() 
    { 
     // private Object context; 

    public void run() 
     {     

      AudioDevice device = new AudioDevice(ctx); 
     // String filepath="R.raw.cheerapp.mp3"; 
     // InputStream cheerSound = this.getResources().openRawResource(R.raw.cheerapp); 
      //InputStream cheerSound = this.getContext().getResources().openRawResource(R.raw.cheerapp); 
      try { 
      device.PlayShortAudioFile(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 

    }).start(); 


} 

}

package com.self.AudioTrack; 

    import java.io.BufferedInputStream; 
    import java.io.ByteArrayOutputStream; 
    import java.io.DataInputStream; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileNotFoundException; 
    import java.io.IOException; 
    import java.io.InputStream; 

    import android.content.Context; 
    import android.media.AudioFormat; 
    import android.media.AudioManager; 
    import android.media.AudioTrack; 

    public class AudioDevice 

{

AudioTrack track; 
    short[] buffer = new short[1024]; 
    Context context; 

    public AudioDevice(Context context_) 
    { 
     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); 
     context=context_; 
     track.play();   
    } 



    public void PlayShortAudioFile() throws IOException 
    { 
    InputStream in=context.getResources().openRawResource(R.raw.cheerapp); 


    byte[] music = null; 
    music = new byte[in.available()]; 

    music=convertStreamToByteArray(in); 
    in.close(); 

     track.play(); 
     track.write(music, 0, music.length); 
    track.stop(); 
    track.release(); 
    } //Play 



    public static byte[] convertStreamToByteArray(InputStream is) throws IOException { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     byte[] buff = new byte[10240]; 
     int i = Integer.MAX_VALUE; 
     while ((i = is.read(buff, 0, buff.length)) > 0) { 
      baos.write(buff, 0, i); 
     } 

     return baos.toByteArray(); // be sure to close InputStream in calling function 
    } 

}

+0

首先,你是否要仔細檢查你的採樣率,立體聲/單聲道和編碼配置確保它們與實際的音頻相匹配? – Geobits 2013-02-27 01:26:30

回答