2013-02-27 7 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

ответ

1

К сожалению, эти звуковые файлы в формате MPEG-файл, который содержит заголовки в it.The мне то вы будете использовать только для сырого аудиофайла без заголовка. Если вы хотите играть в mp3-файл, используйте Mediaplayer (http://developer.android.com/reference/android/media/MediaPlayer.html)

+0

Хорошо, тогда я преобразовал в волну. –

Смежные вопросы