ZIPファイル内の音楽ファイルの再生について

825 views
Skip to first unread message

ふるちん

unread,
Mar 1, 2013, 5:22:51 AM3/1/13
to android-g...@googlegroups.com
ZIPファイルで圧縮されたファイルを読み込む音楽再生機能付き画像ビュワーを開発中でして、
その中で、ZIPファイル内の音楽ファイルを直接読み込んで再生したいと考えています。

しかしながら、直接音楽ファイルを再生しようとすると、
MediaPlayerでerror(1, -2147483648)が発生し、
音声が再生されないという状況になっています。

音楽再生のクラスは、
音声を再生するためのクラスsoundと
zipファイルからとったデータをFile型で返すクラスmeltFileName
zipファイルからとったデータをInputStream型で返すクラスAudioMeltFile
の3つで構成しています。

  //SEを再生する
    public void sound(){
   //音声ファイルがあればファイルクラスを生成
   mediaPlayerFileMP3 = meltFileName(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) + ".mp3");
   mediaPlayerFileWAV = meltFileName(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) +".wav");
   mediaPlayerFileOGG = meltFileName(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) +".ogg");
   
   try{
//音声ファイルがあるかどうかを確認
    if(mediaPlayerFileMP3 != null){
    mediaPlayerFile = AudioMeltFile(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) + ".mp3");
    }else if(mediaPlayerFileWAV != null){
    mediaPlayerFile = AudioMeltFile(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) +".wav");
    }else if(mediaPlayerFileOGG != null){
    mediaPlayerFile = AudioMeltFile(zipPath, zipFile + File.separator + Integer.toString(pageNo) + "_" + Integer.toString(tapNo) +".ogg");
    }
   
    //MediaPlayer型の変数を生成
      mediaPlayer = new MediaPlayer();

       mediaPlayer.setDataSource(IOUtils.toString(mediaPlayerFile));
      mediaPlayer.setDisplay(holder);
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
       
       //プレイヤーの準備
    mediaPlayer.prepare();
   
    //プレイヤーの再生
    mediaPlayer.start();
    }catch(Exception e){
    Log.d("ERROR",""+e);
    }
    }

  //zipファイルからとったデータをFile型で返す
    public static File meltFileName(String zipPath, String file){
    File result = null;
    try{
    //zipファイルを抽象化
    ZipFile zipFile = new ZipFile(zipPath);
   
    //zipファイルの中身を抽象化
    final ZipEntry entry = zipFile.getEntry(file);
   
    if(entry != null){
    result = new File(entry.getName());
    }
    }catch(Exception e){
    }
return result;
    }

    //zipファイルからとったデータをInputStream型で返す
    public static InputStream AudioMeltFile(String zipPath, String file){
    InputStream result = null;
    try{
    //zipファイルを抽象化
    ZipFile zipFile = new ZipFile(zipPath);
   
    //zipファイルの中身を抽象化
    final ZipEntry entry = zipFile.getEntry(file);
   
    if(entry != null){
    result = zipFile.getInputStream(entry);
    }
    }catch(Exception e){
    }
return result;
    }

前回にも同じような内容を投稿したのですが、
自分の力が未熟なため、未だに解決できていません。
ですので、大変申し訳ないのですが、
どなたかアドバイスをいただけないでしょうか。

田代透

unread,
Mar 1, 2013, 5:35:59 AM3/1/13
to android-g...@googlegroups.com

MediaPlayerでerror(1, -2147483648)

このエラーの理由を調べれば解決できる問題では無いですか?

2013/03/01 19:23 "ふるちん" <furu...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 

ふるちん

unread,
Mar 1, 2013, 5:46:43 AM3/1/13
to android-g...@googlegroups.com
Toru様

> MediaPlayerでerror(1, -2147483648)
> このエラーの理由を調べれば解決できる問題では無いですか?

おっしゃる通りなのですが、
いくらGoogle検索を行ってもそのエラー部分の記述が見つからなかったため
こちらに投稿させていただきました。

言葉が足りず申し訳ないです。

さわださとし

unread,
Mar 1, 2013, 6:10:35 AM3/1/13
to android-g...@googlegroups.com
さわだです。

MediaPlayerのソースを読んでみれば、ヒントがあるかもしれませんね。


2013年3月1日 19:46 ふるちん <furu...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>



--
さわださとし http://www.satoshis.com/

飯塚康至

unread,
Mar 1, 2013, 6:23:48 AM3/1/13
to android-g...@googlegroups.com
お疲れ様です。飯塚です。あまり良く読んでませんが
http://stackoverflow.com/questions/12290601/android-4-0-4-webview-mediaplayer-error-1-2147483648-using-audio-tag-and-l
ファイルへのアクセス権のようなこと書いてありました。

そんなこともない気がするのでOutOfResourcesかもしれないですね。検索で日本語だとこのくらいの情報です。
https://www.google.co.jp/search?q=error(1%2C+-2147483648)&oq=error(1%2C+-2147483648)&sourceid=chrome&ie=UTF-8#q=android+mediaplayer+error+codes+2147483648&hl=ja&lr=lang_ja&sa=X&ei=h44wUZO6FYmLkwW4yoDYCA&sqi=2&ved=0CCwQuAE&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=5ac759d9277a7555&biw=1920&bih=955

Zipが原因か分からないので、一旦Zipを切り離してみてはいかがでしょうか。

2013年3月1日 20:10 さわださとし <sato...@gmail.com>:
以上、宜しくお願いします。

飯塚 康至

ふるちん

unread,
Mar 1, 2013, 7:32:02 AM3/1/13
to android-g...@googlegroups.com
さわだ様


>MediaPlayerのソースを読んでみれば、ヒントがあるかもしれませんね。 
いろいろなMediaPlayerのソースをみたところ
バイナリデータを1バイトずつ読み取ってからじゃないと
ダメだということが分かり、なんとか解決しました。

アドバイスありがとうございました。

Kazuhiko Kobayashi

unread,
Mar 1, 2013, 7:32:31 AM3/1/13
to android-g...@googlegroups.com
InputStreamを渡しても駄目です。
ランダムアクセスを要求するのでpipeを作っても駄目です。
方法は以下の3つしか無いと思います。
1.ファイルをテンポラリファイルに展開してそれを渡す。
2.http又はrtspサーバーを自前で立てて、そのurlを渡す。
3.自前でデコーダを書く。

探せばサンプルが見つかると思います。

2013年3月1日金曜日 19時22分51秒 UTC+9 ふるちん:

ふるちん

unread,
Mar 1, 2013, 7:34:39 AM3/1/13
to android-g...@googlegroups.com, iiz...@aa.mbn.or.jp
飯塚様


わざわざエラーメッセージのサイトを教えていただきありがとうございます。
結局、エラーメッセージの部分は関係なかったのですが、
自分の情報収集の甘さを知る一つのきっかけとなりました。

おかげさまで、なんとか解決できました。
どうもありがとうございました。


Reply all
Reply to author
Forward
0 new messages