2011.08.12(3)——— android audiotrack 播放音频
参考:
[url=http://blog.sina.com.cn/s/blog_74b752870100qxrv.html]http://blog.sina.com.cn/s/blog_74b752870100qxrv.html[/url]
[url=http://crazier9527.iteye.com/blog/467061]http://crazier9527.iteye.com/blog/467061[/url]
[url=http://www.cnblogs.com/mcodec/articles/1933741.html]http://www.cnblogs.com/mcodec/articles/1933741.html[/url]
播放mp3的总是噪音,不知道原因,后来播放wav的倒是可以,
wav是没有压缩的pcm
参考:
[url=http://blog.sina.com.cn/s/blog_74b752870100qxrv.html]http://blog.sina.com.cn/s/blog_74b752870100qxrv.html[/url]
[url=http://crazier9527.iteye.com/blog/467061]http://crazier9527.iteye.com/blog/467061[/url]
[url=http://www.cnblogs.com/mcodec/articles/1933741.html]http://www.cnblogs.com/mcodec/articles/1933741.html[/url]
播放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() { @override public 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() { @override public void onclick(view v) { at.stop(); at.release(); am.setmode(audiomanager.mode_normal); } }); } class audiotrackthread extends thread{ @override public 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); } } } }