Android 通过AudioTrack播放CAF音频
来源:互联网 发布:华为路由器 端口转发 编辑:程序博客网 时间:2024/06/08 07:08
我们知道iPhone录制的音频都是caf格式,Android的Mediaplayer不支持这个格式的播放..那么怎么办? 我们使用AudioTrack来播放!!代码如下:
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.media.MediaPlayer;import android.media.AudioManager;import android.media.AudioTrack;import android.media.AudioFormat;public class LRChannel extends Activity { private Button lButton; private Button rButton; private TextView myTextView; private MediaPlayer mMediaPlayer01 = null; private AudioTrack aAudioTrack01 = null; private String strFilePath = "/sdcard/test.caf"; private float midVol = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lButton = (Button) findViewById(R.id.ButtonL); rButton = (Button) findViewById(R.id.ButtonR); myTextView = (TextView) findViewById(R.id.myTextView); // left button response lButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { playSound(strFilePath, 0); } }); // right button response rButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { playSound(strFilePath, 1); } }); } // iChannel = 0 means left channel test, iChannel = 1 means right channel test. private void playSound(String strPath, int iChannel) { // If now is playing... if ( aAudioTrack01 != null ) { aAudioTrack01.release(); aAudioTrack01 = null; } // Get the AudioTrack minimum buffer size int iMinBufSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT); if ( iMinBufSize == AudioTrack.ERROR_BAD_VALUE || iMinBufSize == AudioTrack.ERROR ) { return; } // Constructor a AudioTrack object try { aAudioTrack01 = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT, iMinBufSize, AudioTrack.MODE_STREAM); } catch (IllegalArgumentException iae) { myTextView.setText("new AudioTrack Exceeption:" + iae.toString()); iae.printStackTrace(); } // Write data to buffer byte data[] = new byte[iMinBufSize]; aAudioTrack01.write(data, 0, data.length); aAudioTrack01.write(data, 0, data.length); float lValue = 0; float rValue = 0; if ( iChannel == 0 ) { lValue = 1.0f; rValue = 0.0f; } else if ( iChannel == 1 ) { lValue = 0.0f; rValue = 1.0f; } aAudioTrack01.play(); if ( aAudioTrack01.setStereoVolume(lValue, rValue) == AudioTrack.SUCCESS ) { myTextView.setText("setStereoVolume successfully!"); } aAudioTrack01.stop(); if ( aAudioTrack01.setStereoVolume(midVol, midVol) == AudioTrack.SUCCESS ) { myTextView.setText("Restore setStereoVolume successfully!"); } aAudioTrack01.release(); aAudioTrack01 = null; } @Override protected void onDestroy() { super.onDestroy(); // TODO Auto-generated method stub if ( aAudioTrack01 != null ) { aAudioTrack01.setStereoVolume(midVol, midVol); aAudioTrack01.release(); aAudioTrack01 = null; } } }
/** * Play the sound by AudioTrack. * * @param soundData * The sound which is to be played. */ private void playSound(byte[] soundData) { int index = 0; int offset = 0; // 8000 byte every second final int minBufsize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_STEREO,// The channel AudioFormat.ENCODING_PCM_16BIT); mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, minBufsize, AudioTrack.MODE_STREAM); mAudioTrack.play(); while (true) { try { offset = index * minBufsize; if (offset >= soundData.length) { break; } publishProgress(offset); mAudioTrack.write(soundData, offset, minBufsize); } catch (Exception e) { break; } index++; } mAudioTrack.release(); }
参考:
http://www.cnblogs.com/innost/archive/2011/01/09/1931457.html
http://crazier9527.iteye.com/blog/467061
- Android 通过AudioTrack播放CAF音频
- Android 通过AudioTrack播放CAF音频
- 【Android】AudioTrack播放caf音频文件
- Android AudioTrack 播放音频
- Android音频播放AudioTrack
- Android音频播放之AudioTrack
- Android音频开发之AudioTrack实时播放
- [AudioTrack]使用AudioTrack播放PCM音频数据
- 使用AudioTrack播放PCM音频数据(android)
- Android开发:使用AudioTrack播放PCM音频数据【附源码】
- Android音频: 如何使用AudioTrack播放一个WAV格式文件?
- [译]Android音频: 如何使用AudioTrack播放一个WAV格式文件?
- 使用AudioTrack播放PCM音频数据(android)
- 《android多媒体api》之AudioTrack原始音频pcm播放api
- 使用AudioTrack进行音频播放
- 使用AudioTrack进行音频播放
- 使用AudioTrack进行音频播放
- AudioTrack播放音频的流程
- Linux per-CPU实现分析
- 找到工作了
- kD-tree 的C语言实现 带有史上最全的注释和解释
- android中dip、dp、px、sp和屏幕密度
- 跟我一起写 Makefile
- Android 通过AudioTrack播放CAF音频
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- 免费图标分享:天气相关的图标 Meteocons
- artDialog中关闭父窗口
- Nginx认识
- 直接在xml中加入analog clock和digital clock组件!
- ubuntu 7z|7za
- Vim 学习
- .bat批处理命令