循环播放音频文件
Playing audio files one by one after setting them in a loop
我大约有 6236 个音频文件。我正在做的是从数据库中获取 int
值并将它们设置为循环。例如,查询后我在 'a' 中得到 1,在 'b' 中得到 7。现在我尝试像 for(int i=a;i<=b;i++)
一样在循环中使用它们,并将其传递到我的路径中以一个一个地播放音频,但一次播放 7 个音频。我在 loop.What 中从数据库动态设置值 我想做的是一个一个地播放它们,但我被卡住了。
这是我的代码:
DatabaseAccess db=DatabaseAccess.getInstance(getApplicationContext());
db.open();
mycursor= db.getblindfirst(newid);
scursor= db.getblindlast(newid);
scursor.moveToFirst();
mycursor.moveToFirst();
a= mycursor.getInt(0);
b=scursor.getInt(0);
for (int i=a;i<=b;i++){
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + i + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
}
db.close();
}
那是因为您是同时播放所有文件。您应该在 OnCompletionListener 中放置音乐完成时应该 运行 的代码。
DatabaseAccess db=DatabaseAccess.getInstance(getApplicationContext());
db.open();
mycursor= db.getblindfirst(newid);
scursor= db.getblindlast(newid);
scursor.moveToFirst();
mycursor.moveToFirst();
a= mycursor.getInt(0);
b=scursor.getInt(0);
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + a + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
a++;
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if (a!=b) {
if(mPlayer != null) {
if(mPlayer.isPlaying()) {
mPlayer.stop();
}
mPlayer.reset();
}
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + a + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
a++;
}
}
});
db.close();
}
我大约有 6236 个音频文件。我正在做的是从数据库中获取 int
值并将它们设置为循环。例如,查询后我在 'a' 中得到 1,在 'b' 中得到 7。现在我尝试像 for(int i=a;i<=b;i++)
一样在循环中使用它们,并将其传递到我的路径中以一个一个地播放音频,但一次播放 7 个音频。我在 loop.What 中从数据库动态设置值 我想做的是一个一个地播放它们,但我被卡住了。
这是我的代码:
DatabaseAccess db=DatabaseAccess.getInstance(getApplicationContext());
db.open();
mycursor= db.getblindfirst(newid);
scursor= db.getblindlast(newid);
scursor.moveToFirst();
mycursor.moveToFirst();
a= mycursor.getInt(0);
b=scursor.getInt(0);
for (int i=a;i<=b;i++){
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + i + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
}
db.close();
}
那是因为您是同时播放所有文件。您应该在 OnCompletionListener 中放置音乐完成时应该 运行 的代码。
DatabaseAccess db=DatabaseAccess.getInstance(getApplicationContext());
db.open();
mycursor= db.getblindfirst(newid);
scursor= db.getblindlast(newid);
scursor.moveToFirst();
mycursor.moveToFirst();
a= mycursor.getInt(0);
b=scursor.getInt(0);
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + a + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
a++;
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if (a!=b) {
if(mPlayer != null) {
if(mPlayer.isPlaying()) {
mPlayer.stop();
}
mPlayer.reset();
}
try {
mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + a + ").mp3");
mPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mPlayer.start();
a++;
}
}
});
db.close();
}