Cockatiel技術ブログ

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

Xamarin

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

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

前回はXamarinでiOSのAVAudioPlayer、AndroidのMediaPlayerを使って音を鳴らしてみました。

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

ただ、流石にもうちょっと……こう……他にできることはないのかと。
再生だけしかできないプレイヤーなんて、シンプルにも程があります。

というわけで、今回はそれぞれの機能をもう少しだけ掘り下げてみましょう。

リファレンスを読む

それぞれのリファレンスに目を通してみます。

AVAudioPlayer Class – Xamarin
MediaPlayer Class – Xamarin

ふむ、結構いろいろできそうですね。
特にMediaPlayerの方はオーディオだけでなく動画も扱う関係で、プロパティもメソッドも様々あるのがわかります。

そんな中で、今回は音楽プレイヤーにも使えそうな再生位置の操作を行ってみようかと思います。

再生位置を操作する

前回のプロジェクトを引き継いで、実装を解説していきます。

共通部分の実装

インターフェースに要素を追加します。
現在位置(CurrentTime)は入力も出力もするの想定なので、プロパティにしちゃいましょう。
ついでに、ファイル全体の長さDurationプロパティも追加します。
「現在位置 / 全体の長さ」と表示できれば、より音楽プレイヤーっぽくなりそうですね!

iOSでの実装

先ほどインターフェースに追加した部分の実処理を書いていきます。
AVAudioPlayerには再生位置を示すCurrentTimeというそのものズバリなプロパティがあるので、その内容を読み書きすればOKです。

ちょっとnullチェックが煩雑な気がしなくもないですが、苦労せず書けました。
Durationプロパティも実装して、Playメソッド中でAVAudioPlayerのDurationプロパティを取得します。

Androidでの実装

MediaPlayerにも再生位置を示すCurrentPositionプロパティがあるのですが、read-onlyになっています。
なので、再生位置を書き換える場合にはSeekToメソッドを使います。

iOSとほぼ同じに書けますね。
一点、SeekToメソッドの引数はミリ秒なので、そこだけ変換を忘れずに!

Durationプロパティの処理もiOSと同様でOKです。

再度共通部分の実装

これでオーディオファイルの長さと現在位置の取得、再生位置の指定が行えるようになりました。
共通部分に時間表示のためのラベルと、シークバーがわりのスライダーを実装しましょう。

時間ラベルはタイマーを回して書き換えるようにします。
とりあえずインターバル0.05秒=20FPSあたりにしておきます。
スライダーに関しては、値をそのまま秒数としてCurrentTimeに入れることとします。

では、それぞれ動かして試してみます。

……ん?
どうやらiOSの方は長さと現在位置が秒で返ってくるのに、Androidの方はミリ秒で返ってくるみたいですね……
とりあえず今回は、秒で揃えることにしましょう。
Androidのコードを少し修正すれば……


いい感じですね!

終わりに

再生位置を操作できるだけで、一気にインタラクティブ性が増したのではないでしょうか。

現在できることだけでも、十分機能改善の余地はあります。
例えばシークバーは値=秒数として書きましたが、これを割合に変換すればより既存の音楽プレイヤーっぽくできます。
すでに全体の長さが取得できているので、問題なく変換できるはずです。
時間表示とスライダーの値とでデータバインディングを使って連動させるのも良いですね。

次回は再生終了の検知を行い、一旦この初級編の締めとしたいと思います。

-Xamarin
-,

執筆者:


comment

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

1 × 3 =

関連記事

no image

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

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

no image

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

前回までで、AVAudioPlayerとMediaPlayerでオーディオファイルを鳴らし、再生位置の操作ができるようになりました。 Xamarin(iOS/Android)オーディオ初級編 – とり …

no image

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

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