новый файл (путь) всегда говорит, что файла нет - PullRequest
1 голос
/ 12 декабря 2010

мою проблему немного сложно описать.

У меня есть отдельная папка ресурсов в моем проекте (и в apk-файле).

String path = "/resources/instruments/data/bongo/audio/bong1.wav";  

Я уже могу использовать его с

url = StreamHelper.class.getClassLoader().getResource( path );
url.openStream();

но на самом деле я хочу загрузить файл в SoundPool. Я попробовал это так:

SoundPool soundPool = new SoundPool(  5, AudioManager.STREAM_MUSIC, 0 );  
soundPool.load ( path, 1 );

... но я всегда получаю информацию об ошибке: «ошибка загрузки /resourc..."

load (String path, int) По этой ссылке я видел, что мне нужен правильный путь для файла

File file = new File( path );
if( file.exists() ) 
     //always false but i thing if it would be true soundPool.load should work too

Теперь мой вопрос: как устроен этот путь. Или есть другая идея для моей проблемы (например, с AssetManager)?

Btw. Я знаю, что есть специальные способы получения ресурсов Android, например R.id.View ... но в моем случае это было бы непросто.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 12 декабря 2010

Лично я не вижу файлы WAV как «ресурсы», и я бы посоветовал вам поместить их в папку «активы» и использовать AssetManager, как вы упомянули.

Это работает для меня ...

Создайте структуру папок в вашем проекте ...

    /assets/instruments/data/bongo/audio

... затем скопируйте туда файл bong1.wav.

Используйте следующую команду для загрузки.ПРИМЕЧАНИЕ: НЕ ставьте «/» перед «инструментами» при указании пути к soundPool.load () ...

    // Declare globally if needed
    int mySoundId;
    SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0 );
    AssetManager am = this.getAssets();

    //Use in whatever method is used to load the sounds
    try {
        mySoundId = soundPool.load(am.openFd("instruments/data/bongo/audio/bong1.wav"), 1);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Используйте это для воспроизведения ...

    soundPool.play(mySoundId, 1, 1, 0, 0, 1);
1 голос
/ 12 декабря 2010

Очевидно, он ожидает путь к файловой системе, а не путь к классам.

Используйте URL#getPath() для его получения.

soundPool.load(url.getPath());
...