質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

399閲覧

音声ファイル再生処理で、MediaPlayer.Error発生時の対処方法

yusuke2721

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/06/12 07:46

下記のメソッドを作成し、タイマー処理内で定期的に、判定に応じた数秒のmp3ファイルを再生しています。

正常にmp.Completion処理に入った場合は、次回の音声再生も実行されるのですが、
一度mp.Error処理に入ってしまった場合、アプリを再起動しない限り毎回Errorとなり音声ファイルが再生されず、苦慮しています。

C#

1private Task<bool> PlayAsync(int resid) 2{ 3 var compSource = new TaskCompletionSource<bool>(); 4 _IsPlaying = true; 5 6 try 7 { 8 using (var mp = MediaPlayer.Create(this, resid)) 9 { 10 mp.Completion += (_, __) => 11 { 12 _IsPlaying = false; 13 compSource.TrySetResult(true); 14 }; 15 16 mp.Error += (_, __) => 17 { 18 _IsPlaying = false; 19 compSource.TrySetResult(false); 20 }; 21 22 mp.Start(); 23 } 24 } 25 catch (Exception ex) 26 { 27 Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 28 } 29 return compSource.Task; 30}

xamarin開発にお詳しい方がいらっしゃれば、ご教示いただけませんでしょか。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

MediaPlayerにusingを使用せず、
Completion内にMediaPlayer.Release();を記述すると
Errorに入ることがなくなりました

C#

1private Task<bool> PlayAsync(int resid) 2{ 3 var compSource = new TaskCompletionSource<bool>(); 4 _IsPlaying = true; 5 6 try 7 { 8 var mp = MediaPlayer.Create(this, resid); 9 mp.Completion += (_, __) => 10 { 11 _IsPlaying = false; 12 compSource.TrySetResult(true); 13 mp.Release(); 14 }; 15 16 mp.Error += (_, __) => 17 { 18 _IsPlaying = false; 19 compSource.TrySetResult(false); 20 mp.Release(); 21 }; 22 23 mp.Start(); 24 } 25 catch (Exception ex) 26 { 27 Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 28 } 29 return compSource.Task; 30}

投稿2018/06/13 06:24

yusuke2721

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問