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 音频播放
  2. ANDROID音频系统散记
  3. 【WebRTC】在Android上用NDK编译WebRtc音频增益模块(AGC),降噪(NS),j
  4. 2013.09.02——— android 处理音频焦点
  5. ANDROID音频系统散记之一:A2dpAudioInterface
  6. 安卓软硬结合,热点技术实践总结:《Android音频口数据通信开发》 |
  7. [Android] Android的音频采集
  8. Android音频实时传输与播放(三):AMR硬编码与硬解码

随机推荐

  1. 什么是 Android
  2. Android日记之2012/02/13——Android中Bu
  3. [006] 百度地图移动版API终于发布了(Andr
  4. Android缩略图类源代码
  5. Android相对属性布局总结
  6. 疯狂android讲义----android事件处理(1)
  7. IT互联网各大厂Android研发岗,面试的知识
  8. Android中的资源与国际化!
  9. 移植cocos2d-x 游戏从Android平台到IOS平
  10. Android(安卓)切换系统语言功能实现