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

本文介绍了一个使用 Android 的 AudioTrack 类播放 WAV 格式音频的示例应用。通过创建一个简单的 Activity,该应用可以切换音频播放状态,并调整音频输出设备。文章提供了完整的源代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);			}		}    	    }				}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值