Cockatiel技術ブログ

株式会社ピュアサウンドのオーディオソリューション。いろいろ音を鳴らしています。

Xamarin

Xamarin(iOS/Android)オーディオ初級編 – 再生終了の検知

投稿日:2018年12月12日 更新日:

前回までで、AVAudioPlayerとMediaPlayerでオーディオファイルを鳴らし、再生位置の操作ができるようになりました。

Xamarin(iOS/Android)オーディオ初級編 – とりあえず鳴らしてみる
Xamarin(iOS/Android)オーディオ初級編 – 再生位置の操作

今回は初級編のシメとして、再生終了を受け取れるようにしてみましょう!

再生終了イベントを受け取る

Player側からアプリ本体側へ終了通知を送る、という流れになるのでデリゲートとイベントを活用して実装していきます。

方法 : インターフェイス イベントを実装する (C# プログラミング ガイド)

共通部分の実装

例によって共通部分から実装してみます。
デリゲートと、そのデリゲートを元にしたイベント変数を実装します。

iOSの実装

AVAudioPlayerにはFinishedPlayingいうイベントハンドラがあるので、そこに追加した処理の中で、インターフェース側のイベントハンドラを呼び出します。

自動補完機能のおかげで、イベントの定義も楽チンですね!

Androidの実装

Androidの方は少々やることが多いです。
まずクラスの継承にJava.Lang.ObjectMediaPlayer.IOnCompletionListenerを追加して、AVAudioPlayerのFinishedPlayingにあたるMediaPlayerのSetOnCompletionListenerメソッドを実装していきます。

SetOnCompletionListenerは引数としてIOnCompletionListenerを必要とし、さらにIOnCompletionListenerはじめ各種AndroidのインターフェースはJava.Lang.Objectを必要とするため、このような書き方になりました。

一応Java.Lang.Objectを継承せず、必要なものを自力実装でする手もなくはないでしょうが、ここは素直に継承する方向で進めます。

IOnCompletionListener継承時に必須のOnCompletionが、再生終了時に呼ばれる実際のメソッドです。

再び共通部分の実装

残りはユーザーインタフェースです。
まずxamlに表示用のLabelを追加します。

あとはAudioPlayer初期化の段で、終了イベントを受け取った時の処理を書いてきます。

Playメソッドにも手を入れて、演奏中は「Playing.」、停止したら「Finished.」と表示するようにしてみました。


実際に動かしてみると……

いい感じですね!

終わりに

再生終了を取得できると、次の曲に進むのかリピート再生するのかといった処理が行えますね。
あとは端末の音楽ライブラリにアクセスしたり、音量調整など実装してしまえば、もう基礎的なオーディオプレイヤーを作れてしまうのではないでしょうか。

ミドルウェアなどを使用しない小規模のゲームでも、AVAudioPlayerとMediaPlayerはよくBGM用途で使用されます。
処理を組み合わせて、例えば終了検知したらファイルの指定時間に戻す……といった「擬似途中ループ」も面白いかもしれませんね。

 

三回にわたる「Xamarin(iOS/Android)オーディオ初級編」でしたが、今回でひとまず終了となります。
お付き合いいただき、ありがとうございました!

-Xamarin
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2 × 2 =

関連記事

no image

Xamarin(iOS/Android)オーディオ初級編 – 再生位置の操作

前回はXamarinでiOSのAVAudioPlayer、AndroidのMediaPlayerを使って音を鳴らしてみました。 Xamarin(iOS/Android)オーディオ初級編 – とりあえず …

no image

Xamarin(iOS/Android)オーディオ初級編 – とりあえず鳴らしてみる

Cockatielでは今年9月ごろからXamarinを導入して、モバイル向けにあれこれと調査研究をしています。 Xamarin を利用した Visual Studio でのアプリ開発 | Visual …

no image

Xamarin(iOS/Android)オーディオ中級編-AndroidのSoundPoolを使ってみる

みなさま、おつかれさまです。 さて、これまで初級編としてXamarinでの簡単なオーディオ実装を解説してきましたが、もう一歩踏み込んだ内容に入っていきたいと思います。 まずはじめに注意点として、便宜上 …