我们知道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;
@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;
}
}
}
相关文章
- Android 使用MediaPlayer播放assets或者raw目录的音频文件
- Android 播放音频文件
- Android-播放音频文件
- mono touch播放音频文件(.caf文件)
- android播放音频文件(MediaPlayer)和录音(MediaRecorder)--播放音频文件
- android多媒体开发--本地音频文件播放
- android实现 边下载边播放 音频文件, 在线等
- iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等)
- iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等)
- Android媒体播放器:来自HTTPS Url的流媒体音频文件