2011-04-04 23 views
1

嗨我正在編寫一個Android應用程序,將播放一組音頻文件,我可以通過該應用程序提供音頻文件,並允許用戶創建和播放自己的音頻。我遇到的問題是我不知道在哪裏存儲文件。如果我將它們存儲在外部(sdcard)位置,我不確定如何在安裝我的應用程序時將這些文件發送到用戶的外部存儲。我想我可以在資產和自定義聲音的外部。無法播放音頻資源「它可能是壓縮」

當我嘗試做到這一點但是我得到以下錯誤:java.io.FileNotFoundException:該文件不能作爲文件描述符打開;這大概壓縮

這裏是我的代碼:

try { 
       Constants.mPlayer = new MediaPlayer(); 
       AssetFileDescriptor afd = this.getApplicationContext().getAssets().openFd("songid.mus"); 
       Constants.mPlayer.setDataSource(afd.getFileDescriptor()); 
       Constants.mPlayer.prepare(); 
       Constants.mPlayer.start(); 
      } catch (Exception e) { 
       Log.e("", "prepare() failed", e); 
      } 

任何意見或建議?

謝謝! Radha

回答

1

作爲快速解決方案,您可以通過將文件名更改爲songid.mp3avoid compression

該帖子的作者還建議通過延長與-0選項aapt在命令行:

First, you can give your asset file an extension in the list above. While this does not necessarily make sense, it can be an easy workaround if you don’t want to deal with aapt on the command line. The other option is to pass a specific extension to the -0 flag, such as -0 db, to disable compression for assets with that extension. You can pass the -0 flag multiple times, and each time with a separate extension, if you need more than one type to be uncompressed.

如果你喜歡冒險的感覺,你可以嘗試與調用aapt腳本來代替aaptthis post中的-0 mus一樣。

+0

謝謝馬修!我把名字從songid.mus改爲了songid.3gp。這解決了我的第一個例外。非常感激。在這一點之後,我確實得到了另一個異常,我想描述任何與我犯同樣錯誤的人。 :-)我得到了一個「java.io.IOException:準備失敗:狀態= 0x1」我花了一段時間才發現我需要添加一個開始和持續時間: – Radha 2011-04-05 02:58:31

0

謝謝馬修!我把名字從songid.mus改爲了songid.3gp。這解決了我的第一個例外。非常感激。

在這一點之後,我確實得到了另一個異常,我想描述任何與我犯同樣錯誤的人。 :-)我有一個java.io.IOException: Prepare failed.: status=0x1

我花了一段時間才能弄清楚,我需要添加一個開始和持續時間,以及:

Constants.mPlayer = new MediaPlayer(); 
AssetFileDescriptor afd = this.getApplicationContext().getAssets().openFd("songid.3gpp"); 
long start = afd.getStartOffset(); 
long end = afd.getLength(); 
Constants.mPlayer.setDataSource(afd.getFileDescriptor(), start,end); 
Constants.mPlayer.prepare(); 
Constants.mPlayer.start(); 

它的工作原理!謝謝!