2017-06-25 21 views
0

を形成果たしはxamarinでダウンロードmp3を、私は、ファイル「test.mp3」をプレイすることができる午前

AudioManager.Audio.Manager.PlaySound("test.mp3");

を呼び出すことで、私のPCLプロジェクトの「リソース\サウンド\」フォルダにリソースとして追加今私は私のwebapiサービスからダウンロードしたオーディオファイルを再生しようとしています。私は、ファイルを格納するファイルとPCLStorageライブラリをダウンロードするにはRestSharpライブラリを使用しています:

try 
      { 
       var fileId = new Guid("test2"); 
       IFolder rootFolder = FileSystem.Current.LocalStorage; 
       IFolder resources = await rootFolder.CreateFolderAsync("Resources", CreationCollisionOption.OpenIfExists); 
       IFolder soundsFolder = await rootFolder.CreateFolderAsync("Sounds", CreationCollisionOption.OpenIfExists); 
       IFile myFile = await soundsFolder.CreateFileAsync($"{fileId}.mp3", CreationCollisionOption.ReplaceExisting); 
       using (var stream = await myFile.OpenAsync(fileAccess: FileAccess.ReadAndWrite)) 
       { 

       var request = new RestRequest($"{fileId}"); 
       var client = new RestClient(); 
       client.BaseUrl = new System.Uri("http://10.0.2.2/MyApp.WebApi/api/"); 
       var bytes = client.DownloadData(request); 
       foreach (var myByte in bytes) 
       { 
        stream.WriteByte(myByte); 
       } 
      } 
     } 
     catch (Exception e) 
     { 

     } 

私もルートディレクトリにファイルを保存しようとしたが、これも動作しません。

ファイルは、私が(エラーなし)限り、うまくダウンロードしているようです。しかし、私はまだアンドロイドエミュレータ上のファイルを見つけることによってこれを確認する方法を見つける必要があります。私はまず何とかプレイストアをインストールして、アンドロイドエミュレータ上のファイル構造を見るためにESファイルエクスプローラをダウンロードする必要があると思います。

問題は、埋め込みリソースで行ったのと同じ方法でサウンドファイルを再生しようとすると動作しないということです。

AudioManager.Audio.Manager.PlaySound("test2.mp3");

私はこれが原因アンドロイドエミュレータ上の「どこか」に埋め込まれたリソースを移行するためにコンパイル時に起こる魔法のだと思います。 私の主な問題は、私は何のパスが

  • は、ファイルを読み込むファイル(しようとした資源/サウンドやルートを)書く

    に使用することを理解していないということです
( リソース/サウンドやルートを試してみました)

ファイルを再生できるようにする

+0

問題は何ですか?ファイルを保存することはできませんか、再生できません。 –

+0

プラグインを使用してPCLでサウンドを再生していますか?はいの場合は、正確に –

+0

あなたがテストしているプラ​​ットフォームも教えてください? "Resources \ Sounds"とは、PCLまたはプラットフォームフォルダのものですか? –

答えて

1

AudioManagerライブラリはサウンドが常にアセットであることを前提としています。それに は、それが次の行使ってAssetFileDescriptorを構築しようとしNewSound method in the android codeです:

Forms.Context.Assets.OpenFd(filePathにします)。

このメソッドは、(コンパイルされたリソースの)assetsフォルダに対してファイルパスを必要とし、そうでなければFileNotFoundExceptionをスローすると思います。この例外はスローされましたが、私のpclコードのcatch文には達しませんでした。

私はAssetFileDescriptorではなくファイルパスでSoundPool.LoadAsyncを使用していますが、これは私の問題を解決します。

Yay!

関連する問題