我有一些代码可以启动文本到语音,并在按下按钮时开始播放声音。除了一个细节,一切都很好。连续按下两个按钮时,声音开始重叠。每次按下按钮,有没有办法切断媒体播放器?我使用了noise1.pause(),noise1.stop()和noise1.reset(),但没有任何效果。我正在考虑使用mediaplayer完整的监听器,但我不确定如何实现这一点。任何帮助,将不胜感激。非常感谢!!!
public void onClick(View view) {
Resources res = getResources();
final TextView tv = (TextView) findViewById(R.id.color_text);
final MediaPlayer noise1 = MediaPlayer.create(this, R.raw.one);
final MediaPlayer noise2 = MediaPlayer.create(this, R.raw.two);
final MediaPlayer noise3 = MediaPlayer.create(this, R.raw.three);
switch (view.getId()) {
case R.id.one_button:
String oneString = res.getString(R.string.One);
tv.setText(oneString);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
tts.speak(oneString, TextToSpeech.QUEUE_FLUSH, null);
} else {
tts.speak(oneString, TextToSpeech.QUEUE_FLUSH, null, null);
}
noise1.start();
break;
case R.id.two_button:
String twoString = res.getString(R.string.Two);
tv.setText(twoString);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
tts.speak(twoString, TextToSpeech.QUEUE_FLUSH, null);
} else {
tts.speak(twoString, TextToSpeech.QUEUE_FLUSH, null, null);
}
noise2.start();
break;
case R.id.three_button:
String threeString = res.getString(R.string.Three);
tv.setText(threeString);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
tts.speak(threeString, TextToSpeech.QUEUE_FLUSH, null);
} else {
tts.speak(threeString, TextToSpeech.QUEUE_FLUSH, null, null);
}
three.start();
break;
}
答案 0 :(得分:0)
定义并初始化MediaPlayer
方法之外的onClick(...)
个实例,stop()
方法应该有效。
这就是我的意思:
MediaPlayer noise1, noise2, noise3;
TextView tv;
public void onCreate(....){
.....
tv = (TextView) findViewById(R.id.color_text);
noise1 = MediaPlayer.create(this, R.raw.one);
noise2 = MediaPlayer.create(this, R.raw.two);
noise3 = MediaPlayer.create(this, R.raw.three);
....
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.one_button:
...
noise1.start();
noise2.stop();
noise3.stop();
break;
case R.id.two_button:
...
noise1.stop();
noise2.start();
noise3.stop();
break;
case R.id.three_button:
...
noise1.stop();
noise2.stop();
noise3.start();
break;
}
它现在无法正常工作,因为您正在尝试停止您刚刚创建的MediaPlayer
实例,而不是在上次按下按钮时创建并启动的实例。< / p>
答案 1 :(得分:0)
我没有评论的声誉,所以请改为。
创建的MediaPlayer
对象在方法的范围内,这意味着只要onClick
返回,对象就没有引用,因此无法停止。
解决方案是将范围内的对象移动到更高的位置,或者在包含对象中引用,或者将MediaPlayer
存储在集合中。然后,在onClick
方法的开头,在创建新的方法并覆盖引用之前停止旧方法。
除非对Android有一些警告,否则这应该有用。