2017-01-04 6 views
0

pathからmp3ファイルを再生するためのコードがあります。私はと呼ぶと、私のfilePathの値が何であるべきかわからないが。MediaPlayerクラスのSetDataSourceを使用して、アセットまたは生のフォルダからmp3ファイルをロードします

私のオーディオファイルは、assetsrawというフォルダに保存されています。しかし、私はオーディオファイルを格納するための最良の場所が何であるかわからないのですか?また、どちらのフォルダからもパスにアクセスする方法がわかりません。

protected MediaPlayer player; 

public void StartPlayer(String filePath) 
{ 
    if (player == null) { 
    player = new MediaPlayer(); 
    } else { 
    player.Reset(); 
    player.SetDataSource(filePath); 
    player.Prepare(); 
    player.Start(); 
    } 
} 

助けてください。

+0

パラメータとして 'string'を使用する必要がありますか?あなたの解決策はファイルの名前を使用して動作する可能性がありますか? – Demitrian

答えて

0

メディアファイルをアセットとして追加する場合は、AssetManagerを使用してAssetFileDescriptorを取得する必要があります。 のインスタンスは、Android.App.Contextの資産プロパティ(Activityなど)にアクセスすると利用できます。だから、Activityサブクラスで、あなたのelse句で、次の操作を行うことができます。私はあなたのオーディオは実行されませんこれは、原因あなたのelse句に最初の時間を再生しないことを言っているんしかし

AssetFileDescriptor afd = Assets.OpenFd("filenameinAssetsfolder.mp3"); 
player = new MediaPlayer(); 
player.Reset(); 
player.SetDataSource(afd.FileDescriptor); 
player.Prepare(); 
player.Start(); 

そのメソッドが呼び出されたときにMediaPlayerがnullの場合あなたのの.apkでコンパイルされますオーディオファイルを保存するために、両方のassetsrawフォルダを使用することができますhttps://developer.xamarin.com/guides/android/application_fundamentals/resources_in_android/part_6_-_using_android_assets/

+0

これはAssetフォルダ内の最後の曲を再生しますが、私はAssetフォルダに複数の曲があるとは言及していませんでした。 – KillGeek

+0

私は解決策を見つけたplayer.SetDataSource(afd.FileDescriptor、afd.StartOffSet、afd.Length); – KillGeek

+0

解決策を見つけるのに役立ったとしても、回答を受け入れてください。この場合は、assetsフォルダ内のファイルを検索して作業する方法を示しています。 – jgoldberger

0

:AssetManager詳細について

if (player == null) 
{ 
     player = new MediaPlayer(); 
} 
AssetFileDescriptor afd = Assets.OpenFd("filenameinAssetsfolder.mp3"); 
player.Reset(); 
player.SetDataSource(afd.FileDescriptor); 
player.Prepare(); 
player.Start(); 

:あなただけのこの操作を行う必要がありそうです。

しかし、パラメータとしてfilePathを使用することに関する戦略を検討する必要があります。代わりに、string fileNameまたはint resourceを使用することを検討してください。

assetsまたはrawフォルダからファイルを取得するには、AndroidのfilePathを使用してファイルを取得することはできません。代わりに、これはAsssetManagerを使用するか、hereのようにResourceを使用して行われます。

else節が不要なため、コードを少し最適化しました。

資産フォルダ

assetsフォルダからファイルにアクセスしようとするときは、ファイルの名前で(thisがあなたのActivityContextです)this.Assetsから静的メソッドOpenFdを使用する必要があります。これは次のようにあなたがDataSourceとして使用することができますAssetFileDescriptor返します。

protected MediaPlayer player; 

public void StartPlayer(string fileName) 
{ 
    if (player == null) 
     player = new MediaPlayer(); 

    var fileDescriptor = Assets.OpenFd(filename); 

    player.Reset(); 
    player.SetDataSource(fileDescriptor.FileDescriptor); 
    player.Prepare(); 
    player.Start(); 
} 

生のフォルダ

またものの、あなたが与えられたの自動生成idを指していることを必要とするrawフォルダを使用することができますResourceresourceyouraudiofilerawフォルダ内の音声FIEの名前である(Resource.raw.youraudiofileによってアクセスすることができるrawフォルダ内のオーディオファイルを指す

protected MediaPlayer player; 

public void StartPlayer(int resource) 
{ 
    if (player == null) 
     player = MediaPlayer.Create(this, resource); 

    player.Reset(); 
    player.Prepare(); 
    player.Start(); 
} 

:これはMediaPlayerの静的Create方法を使用して行われ)。

rawフォルダーをthe Xamarin documentationに追加する方法について詳しく読むことができます。

関連する問題