AndroidFacadeAPI

メディアプレイヤー

このエントリーをはてなブックマークに追加
最終更新日 2016-12-31

次に示すのは、メディアファイルを操作する例です。 コンテキストメニューに操作メニューを追加し、mp3 ファイルの再生や停止を実行します。

import android
droid = android.Android()
droid.addContextMenuItem("Play", "menu", 1)
droid.addContextMenuItem("Pause", "menu", 2)
droid.addContextMenuItem("Seek", "menu", 3)
droid.addContextMenuItem("Loop on", "menu", 4)
droid.addContextMenuItem("Loop off", "menu", 5)
droid.addContextMenuItem("Info", "menu", 6)
droid.addContextMenuItem("Exit", "menu", 9)
droid.mediaPlay("/sdcard/sample.mp3", "default", False)
while True:
    event = droid.eventWaitFor("menu")
    if event.result["data"] == 1:
        droid.makeToast("Play")
        if droid.mediaIsPlaying().result == False:
            droid.mediaPlayStart()
    elif event.result["data"] == 2:
        droid.makeToast("Pause")
        if droid.mediaIsPlaying().result == True:
            droid.mediaPlayPause()
    elif event.result["data"] == 3:
        droid.makeToast("Seek")
        droid.mediaPlaySeek(30000)
    elif event.result["data"] == 4:
        droid.makeToast("Loop on")
        droid.mediaPlaySetLooping(True)
    elif event.result["data"] == 5:
        droid.makeToast("Loop off")
        droid.mediaPlaySetLooping(False)
    elif event.result["data"] == 6:
        droid.makeToast("Info")
        print droid.mediaPlayInfo().result
    elif event.result["data"] == 9:
        break
droid.mediaPlayClose()
droid.clearContextMenu()

まず、操作対象のファイルをロードするために mediaPlay() を呼び出します。 mediaPlay() の引数は順に、メディアファイルのURL、メディアファイルのタグ(識別名)、すぐに再生するかどうかのフラグで、第2、第3引数は省略可能です。 第2引数を省略した場合はデフォルトタグとして "default" を使用し、 第3引数を省略した場合は True を使用します。 今回の例では第3引数に False を指定し、停止状態でロードします。

コンテキストメニューから[Play]を実行すると、まず mediaIsPlaying() を呼び出して再生中かどうかをチェックし、 再生中ではない場合に mediaPlayStart() を呼び出してメディアファイルを再生します。

コンテキストメニューから[Pause]を実行すると、まず mediaIsPlaying() を呼び出して再生中かどうかをチェックし、 再生中の場合に mediaPlayPause() を呼び出してメディアファイルを停止します。

コンテキストメニューから[Seek]を実行すると、mediaPlaySeek() を呼び出してミリ秒単位で再生位置を設定します。 今回の例では再生位置を30秒後に設定します。

コンテキストメニューから[Loop on]または[Loop off]を実行すると、mediaPlaySetLooping() を呼び出してループ再生を有効または無効にします。

コンテキストメニューから[Info]を実行すると、mediaPlayInfo() を呼び出してメディア情報を表示します。 mediaPlayInfo() は以下の値を返します。

項目 説明
url メディアファイルのURL
looping ループ再生が有効かどうかのフラグ
tag メディアファイルのタグ
position 現在の再生位置(ミリ秒)
duration 再生時間(ミリ秒)
loaded メディアファイルをロードしているかどうかのフラグ
isplaying 再生中かどうかのフラグ

最後に、mediaPlayClose() を呼び出してメディアファイルをクローズします。

なお、上記の API はすべて引数としてメディアファイルのタグを指定できます。 タグを省略した場合はデフォルトタグとして "default" を使用します。

ところで、mediaPlay() の第2引数に独自のタグを指定することで、連続して複数のメディアファイルをロードすることができます。 この時 mediaPlayList() を呼び出すことで、現在ロードしているメディアファイルのタグリストを取得できます。

import android
droid = android.Android()
droid.mediaPlay("/sdcard/sample1.mp3", "sample1", False)
droid.mediaPlay("/sdcard/sample2.mp3", "sample2", False)
tags = droid.mediaPlayList().result
for i in tags:
    print i

media イベント

メディアファイルの再生が完了すると、"media" イベントが発生します。 次に示すのは、メディアファイルの再生が完了するまでイベント待機する例です。 再生が完了すると、メディアファイルのタグをトーストで表示します。

import android
droid = android.Android()
droid.mediaPlay("/sdcard/sample.mp3")
event = droid.eventWaitFor("media")
droid.makeToast("complete : " + event.result["data"]["tag"])
droid.mediaPlayClose()