0

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
    }

}

4

1 に答える 1

1

申し訳ありませんが、これらのオーディオファイルはヘッダーを含むmpegファイルです。使用している方法は、ヘッダーのない生のオーディオファイルに対してのみ機能します。mp3ファイルを再生する場合は、Mediaplayer(http://developer.android.com/ )を使用してください。 reference / android / media / MediaPlayer.html

于 2013-02-27T07:12:42.000 に答える