我将所有声音存储在res文件夹中。我想知道是否有办法将它们存储在assets文件夹中并从那里播放它们?
这是我现在使用的代码:
void StartSound(int id) {
if (id==0)
return;
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// float volume = actualVolume / maxVolume;
float volume=(float) ( .01*(double)cGlobals.iVol);
// Is the sound loaded already?
if (nLastSound!=0)
soundPool.stop(nLastSound);
int t=soundPool.play(id, volume, volume, 1, 0, 1f);
nLastSound=t;
}
我想更改此设置以避免在APK尝试加载时出现内存错误。如果我从res文件夹中删除一些文件,它可以正常工作。如果将它们保存为文件,我想要跳过同样的问题。
答案 0 :(得分:10)
你也可以用另一种方式来做。将.mp3文件放在res / Raw文件夹下并使用以下代码:
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.android);
mediaPlayer.start();
答案 1 :(得分:6)
private void startSound(String filename){
AssetFileDescriptor afd = getAssets().openFd(filename);
MediaPlayer player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
player.prepare();
player.start();
}
答案 2 :(得分:1)
您可以使用以下代码在资产文件夹中播放特定的音频文件(即<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListView Grid.Row="0" Grid.Column="1" HorizontalOptions="Center" SeparatorVisibility="None">
):
your_file.mp3
使用以下内容播放原始资源文件(即MediaPlayer mediaPlayer = new MediaPlayer();
AssetFileDescriptor afd = context.getAssets().openFd("your_file.mp3");
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();
)
your_file
答案 3 :(得分:-1)
开始声音
startSound("mp3/ba.mp3");
方法
private void startSound(String filename) {
AssetFileDescriptor afd = null;
try {
afd = getResources().getAssets().openFd(filename);
} catch (IOException e) {
e.printStackTrace();
}
MediaPlayer player = new MediaPlayer();
try {
assert afd != null;
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.start();
}