我正在尝试开发一种语言学习应用程序,在该应用程序中,单击按钮即可播放对话框行(每次5-10秒)。
因此,我为每个对话框创建了对话框行数组,即:
currentAudioArray {“ line0”,“ line2”,“ line3”}
它们是放置在res / raw文件夹中的音频文件的名称
但是我无法按照自己的方式演奏它们。 我正在使用 MediaPlayer.create()方法,但似乎它只需要直接链接到特定文件(即R.raw.mySoundfile)。
我如何使用将[i]循环到 MediaPlayer.create()之类的方式来提供数组?还是有其他任何类或方法,只需单击NEXT按钮即可播放下一个音频文件?
到目前为止,我尝试使用: mediaPlayer = MediaPlayer.create(Listen.this,currentAudioArray [0])); mediaPlayer.start();
但是它给了我“未解决的方法”错误,因为它不喜欢currentAudioArray [0]是字符串而不是URL。
我也尝试过: mediaPlayer.setDataSource(currentAudioArray [0])
但是一旦到达mediaPlayer.prepare(),它也会显示箭头。
非常欢迎任何有关如何以阵列方式播放这些文件的建议或想法!
答案 0 :(得分:0)
您需要记住一件事:
所有轨道都使用相同的实例。因此,每当单击“下一步”时,都必须停止并处置当前正在播放的MediaPlayer
。
如果遇到错误,请尝试重新初始化MediaPlayer
实例,然后再次Create()
实例:mp = MediaPlayer.create(this, R.raw.mySoundfile);
而不是setDataSource
方法
如果您需要循环浏览“原始”文件夹,请检查此问题: How to read many file from raw resource in loop?
答案 1 :(得分:0)
好的,我发现了问题! 最初,我将音频文件数组设置为字符串:
String[] currentAudioArray {"line0", "line2", "line3"}
。但是相反,我应该将它们设置为 int ,并添加R.raw路径,如下所示:
int[] currentAudioArray {R.raw.line0, R.rawline2, R.raw.line3}
在这种情况下:mediaPlayer= MediaPlayer.create(Listen.this, currentAudioArray[i]))
的整数值没有任何问题。
因此有效! 希望对别人有帮助!