2011.08.12(3)——— android AudioTrack 播放音频2011.08.12(3)——— android audiotrack 播放音频参考:http:/
2011.08.12(3)——— android AudioTrack 播放音频
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);}} }} 