2010-12-12 2 views
1

私の問題は説明するのが少し難解です。新しいファイル(パス)は常にファイルがないと言います

私は自分のプロジェクト(とapkファイル)に区切られたresourcesフォルダを持っています。

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

私はすでに

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

でそれを使用することができますが、実際に私はSoundPoolにファイルをロードします。 私はこのようにそれを試してみました:私は私が必要とする見てきました「...エラーロード/ RESOURCを」このリンクを

load(String path, int) を:

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

...しかし、私は常にエラー情報を取得しますファイルの正しいパス

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

私の質問:どのようにパスが動作するようになりましたか。または、私の問題(AssetManagerでp.e.)のための他のアイデアはありますか?

Btw。私は、R.id.Viewのようなリソースを得るための特別なAndroidの方法があることを知っています...しかし、私の場合は、扱いにくいでしょう。

ありがとうございます!

答えて

5

個人的には、私は「リソース」としてWAVファイルが表示されません。あなたがそれらを「assets」フォルダに入れ、前述のAssetManagerを使用することをお勧めします。

これが私の作品...

があなたのbong1.wavファイルをコピーし... ...あなたのプロジェクトに

/assets/instruments/data/bongo/audio 

をフォルダ構造を作成します。

次のようにロードしてください。注: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

にです明らかにクラスパスパスではなくファイルシステムパスを期待しています。

URL#getPath()を使用してください。

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

これは私のケースでは機能しません。私は理由はわかりませんが、リソースはまだ見つかりません。それは非常に簡単になるので、残念です:) –

関連する問題