【发布时间】:2015-08-23 09:40:06
【问题描述】:
我目前正在开发应用程序,我想控制在不同耳机侧播放声音文件,例如第一次在左侧,第二次在右侧,有什么方法可以实现吗?
【问题讨论】:
-
我的回答解决了你的问题吗?如果是,请将其标记为已接受。
标签: android android-audiomanager
我目前正在开发应用程序,我想控制在不同耳机侧播放声音文件,例如第一次在左侧,第二次在右侧,有什么方法可以实现吗?
【问题讨论】:
标签: android android-audiomanager
是的,有办法。 MediaPlayer.setVolume(float leftVolume,float rightVolume).
在下面的 sn-p 中,我们正在播放包含在 assets 文件夹中的 .mp3 文件(请注意,如果文件夹中有多个文件,则应检查 answer)。通过按下Button 对象之一,歌曲仅在左侧或右侧耳机中播放:
MediaPlayer AudioObj = new MediaPlayer();
AudioObj.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
findViewById(R.id.progressBar).setVisibility(View.INVISIBLE);
Button btnl = (Button) findViewById(R.id.btnPlayleft);
Button btnr = (Button) findViewById(R.id.btnPlayright);
btnl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.setVolume(1, 0);
mediaPlayer.start();
}
});
btnr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.setVolume(0, 1);
mediaPlayer.start();
}
});
}
});
AudioObj.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
AssetFileDescriptor afd = getAssets().openFd("audio.mp3");
AudioObj.setDataSource(afd.getFileDescriptor());
}catch (IOException e){}
AudioObj.prepareAsync();
附:
音频文件必须是立体声的。
您是否想在播放音频之前检查耳机是否已插入,以便提示消息或执行其他操作:
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(!audioManager.isSpeakerphoneOn()){
//prompt a message or do something else
}
【讨论】: