2011.08.12(3)——— android AudioTrack 播放音频

参考:
http://blog.sina.com.cn/s/blog_74b752870100qxrv.html
http://crazier9527.iteye.com/blog/467061
http://www.cnblogs.com/mcodec/articles/1933741.html

播放mp3的总是噪音,不知道原因,后来播放wav的倒是可以,
wav是没有压缩的pcm

package com.lp;import java.io.IOException;import java.io.InputStream;import android.app.Activity;import android.content.Context;import android.media.AudioFormat;import android.media.AudioManager;import android.media.AudioTrack;import android.media.AudioTrack.OnPlaybackPositionUpdateListener;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button play;private Button stop;private AudioTrack at;private AudioManager am;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);        play = (Button)findViewById(R.id.main_play);        stop = (Button)findViewById(R.id.main_stop);        play.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(am.isSpeakerphoneOn()){am.setSpeakerphoneOn(false);}setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);am.setMode(AudioManager.MODE_IN_CALL);System.out.println(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));System.out.println("&&&&&&&&&&&&&");System.out.println(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));int bufferSizeInBytes = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);if(at==null){at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);System.out.println("22222");new AudioTrackThread().start();}else{if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){System.out.println("111111111");}else{System.out.println("33333");at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);new AudioTrackThread().start();}}}        });                stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {at.stop();at.release();am.setMode(AudioManager.MODE_NORMAL);}});    }        class AudioTrackThread extends Thread{@Overridepublic void run() {byte[] out_bytes = new byte[44100];InputStream is = getResources().openRawResource(R.raw.start);    int length ;at.play();try {while((length = is.read(out_bytes))!=-1){System.out.println(length);at.write(out_bytes, 0, length);}} catch (IOException e) {e.printStackTrace();}if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){at.stop();at.release();am.setMode(AudioManager.MODE_NORMAL);}}        }}

更多相关文章

  1. Android之SurfaceView实现视频播放
  2. Android文件列表RecyclerView中点击视频播放
  3. Android之音量调节
  4. Android(安卓)compress Image
  5. html5 video自动播放-Android、IOS video自动播放-移动端video自
  6. Android(安卓)音频播放
  7. Media Player of Android
  8. 动画(补间动画)的基础知识
  9. [Android] Android(安卓)视频播放总结

随机推荐

  1. Android自动化测试工具——Monkey
  2. Android中外部程序调用方法总结
  3. Android之Bluetooth
  4. 远程调测:Chrome on Android之三 调测WebV
  5. Android应用程序启动过程源代码分析
  6. 【笔记】android sdk集成的eclipse中导入
  7. 系出名门 Android(安卓)系列文章索引
  8. 系出名门Android(9) - 数据库支持(SQLite
  9. android:configChanges属性
  10. Android(安卓)http请求例子、Unicode转UT