你可以从assets文件夹中播放mp3文件吗?

时间:2013-05-28 15:15:19

标签: android

我将所有声音存储在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文件夹中删除一些文件,它可以正常工作。如果将它们保存为文件,我想要跳过同样的问题。

4 个答案:

答案 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)

enter image description here

开始声音

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();
}