`
iloveoracle
  • 浏览: 115011 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
    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() {			@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);			}		}    	    }				}
 
0
14
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics