未分類

任意の時間帯になると自動で再生し、指定の時間一時停止できるメトロノーム


人間というのはどうもやる気を生み出すことはできず

システムに沿ってやり始めた方が良いと聞きました。

まぁ、薄々わかっちゃいましたけど

大学の教授とかが言ってくれると

広まってくれるのでありがたいですよね。


さて、ということで早速、

やる気が出ないのだったらもういっそ

時報が鳴ったら筆取るようなシステム作っちゃおうとですね。


指定の時間帯、指定の音楽(メトロノーム)を流しつつ

5分毎に時報音を流し、かつ、Bluetoothスピーカーの

再接続ボタンを押すと、任意の分数だけ

再生を一時停止できるアプリを作ってみました。


導入は自己責任ですので

セキュリティ的に心配でしたら

下記のタスク参考にして

自分で組んでくださいませ。



用意するもの

①使わなくなったスマホ(android8以上)

②本アプリ(もしくはtasker)

https://www.dropbox.com/scl/fi/dzxxme1hdc4et451bm3bt

③bluetoothスピーカー

④メトロノーム&時報音

https://www.dropbox.com/scl/fi/7uifj5ob7azfm9qvtoed2


①Bluetoothスピーカーとスマホを接続して

スマホに本アプリ(もしくはtasker)と、時報音を入れます。

②要求される権限(音声再生するのでファイル権限と

bluetooth検索するので位置権限と

シーン表示するので画面の上書き表示)を承諾します


③アプリの自動起動と、バックグラウンド実行をオンにします


④時間帯指定して、音声ファイル指定して、bluetooth指定して終了。


bluetoothスピーカーの再接続ボタンを押すことで

音声停止タスクが作動し、

待機時間で設定した分、メトロノームの再生が止まります。

(長押しで接続/再接続の切り替えでしたら、

switchbotとかの指ボタン使って

物理的に長押しすればよろしいかと)


60bpmのメトロノームで流れ去っていく今を実感し

その過ぎ去った1秒が、もう二度と還ってこないことを惜しみつつ

5分起きに鳴る時報音に心を委ねることで

「やる気」とやらを動かしてあげてください。



では「good lack」ということで、

以下タスクの内容です。


────────────────────────────



プロジェクト: 時報


Profiles

プロファイル: 無名

状態: でない 実行中のタスク [ 名前:停止 ]

時刻: 開始 %Start 繰返し 30分 終了 %End

状態: 変数の値 [ %Start 値あり & %End 値あり ]




開始 タスク: 再生

設定:既存タスクを破棄する

A1: 音楽再生 / Music Play [

ファイル: %Music

始点: 0

ループ: オン

出力先: メディア音

すぐに次のタスクに進む: オン ]

If 条件開始 [ %Music 値あり ]


A2: 待機 / Wait [

ミリ秒: 200

秒: %Sec

分: %Min

時間: 0

日: 0 ]


A3: 音楽を止める / Music Stop [

ディレクトリ消去: オン

エラーが発生しても継続:オン ]

If 条件開始 [ %TIME > %End | %TIME eq %End ]




プロファイル: 無名

設定: Priority: 10

イベント: Bluetooth 接続 [ 出力変数:* 名前:%Bluetooth 住所から地図:* ]

状態: 変数の値 [ %Bluetooth 値あり ]




開始 タスク: 停止

設定: 既存タスクを破棄する


A1: 停止 / Stop [

タスク: 再生 ]


A2: 音楽を止める / Music Stop [

エラーが発生しても継続:オン ]


A3: 待機 / Wait [

ミリ秒: 0

秒: 0

分: %Wait

時間: 0

日: 0 ]

If 条件開始 [ %Wait 値あり ]


A4: 音楽再生 / Music Play [

ファイル: %Music

始点: 0

ループ: オン

出力先: メディア音

すぐに次のタスクに進む: オン ]

If 条件開始 [ %TIME < %End ]






タスク: Mp3の長さ計測


A1: 変数を設定 / Variable Set [

名前: %file_path

これに: %Music

構造を出力 (JSONなど): オン ]


A2: Java 関数 / Java Function [

リターン / Return: mmr

Class または Object: MediaMetadataRetriever

関数: new

{MediaMetadataRetriever} () ]


A3: Java 関数 / Java Function [

Class または Object: mmr

関数: setDataSource

{} (String)

引数 1 (String): %file_path ]


A4: Java 関数 / Java Function [

リターン / Return: %duration_ms

Class または Object: mmr

関数: extractMetadata

{String} (int)

引数 1 (int): 9 ]


A5: 複数の変数名をセット [

名前: %Min

%Sec

値: %duration_ms/1000/60

%duration_ms/1000 % 60

計算する: オン

四捨五入する桁: 0

構造を出力 (JSONなど): オン ]




タスク: 起動時


A1: 権限を要求 / Ask Permissions [

必要な権限: android.permission.WRITE_EXTERNAL_STORAGE

android.permission.READ_EXTERNAL_STORAGE

android.permission.ACCESS_FINE_LOCATION

android.permission.SYSTEM_ALERT_WINDOW ]


A2: シーンの表示 / Show Scene [

名前: 時間 

表示方法: ダイアログ

横方向の位置: 100

縦方向の位置: 100

アニメーション: システム

終了ボタンを表示する: オン

キーガードの上に表示する: オン

すぐに次のタスクに進む: オン

Allow Outside Boundaries: オン

Blocking Overlay +: オン

Overlay +: オン ]




タスク: Bluetooth機器設定


A1: Bluetooth 情報 / Bluetooth Info [

種類: ペアリング済みデバイス

タイムアウト (秒): 5 ]


A2: リストのダイアログ / List Dialog [

モード: 項目を一つ選ぶ

タイトル: 動作させたいBluetooth(オーディオ機器)は?

項目: %bt_name()

経過後 (秒数) で閉じる: 30

見えるうちで最初の項目番号: 0 ]


A3: 変数を設定 / Variable Set [

名前: %Bluetooth

これに: %ld_selected

構造を出力 (JSONなど): オン ]


A4: フラッシュ表示 / Flash [

文字: %Bluetooth が選択されました

すぐに次のタスクに進む: オン

Dismiss On Click: オン ]





タスク: mp3ファイル設定


A1: ファイルを一覧 / List Files [

ディレクトリ: /storage/emulated/0

選択を並べ替える: アルファベット(昇順)

変数の配列: %Folder

Use Global Namespace: オン ]


<長押しされた時(2)>

A2: ファイルを一覧 / List Files [

ディレクトリ: %ld_selected

選択を並べ替える: アルファベット(昇順)

変数の配列: %Folder

Use Global Namespace: オン ]

If 条件開始 [ %ld_long eq true ]


<ラベル>

A3: リストのダイアログ / List Dialog [

モード: 項目を一つ選ぶ

タイトル: 音声ファイル選択

項目: %Folder

経過後 (秒数) で閉じる: 30

見えるうちで最初の項目番号: 0

文字: 再生させたいmp3ファイルを選択してください。

(長押しするとフォルダの階層が下がります)

]


A4: 行き先 / Goto [

種類: アクションラベル

ラベル: 長押しされた時(2) ]

If 条件開始 [ %ld_long eq true ]


A5: 変数を設定 / Variable Set [

名前: %Check

これに: %ld_selected

構造を出力 (JSONなど): オン ]


A6: Simple Match/Regex [

種類: 正規表現

文字: %Check

正規表現: \Q.mp3\E ]


A7: 変数を設定 / Variable Set [

名前: %Music

これに: %Check

構造を出力 (JSONなど): オン ]

If 条件開始 [ %mt_match_found eq true ]


A8: タスク実行 / Perform Task [

名前: Mp3の長さ計測

優先度: %priority

構造を出力 (JSONなど): オン ]

If 条件開始 [ %Music 値あり ]


A9: フラッシュ表示 / Flash [

文字: %Music が選択されました

すぐに次のタスクに進む: オン

Dismiss On Click: オン ]

If 条件開始 [ %Music 値あり ]


A10: フラッシュ表示 / Flash [

文字: ファイル形式が正しく(mp3では)ありません

長く: オン

すぐに次のタスクに進む: オン

Dismiss On Click: オン ]

If 条件開始 [ %mt_match_found eq false ]


で、シーン内蔵タスクはこんな感じ。

───────────────────

A1: 要素の調査 / Test Element [

シーンの名前: 時間 

要素: 時1

調査: 値

結果の保存先: %Time1 ]


A2: 要素の調査 / Test Element [

シーンの名前: 時間 

要素: 分1

調査: 値

結果の保存先: %Time2 ]


A3: 要素の調査 / Test Element [

シーンの名前: 時間 

要素: 時2

調査: 値

結果の保存先: %Time3 ]


A4: 要素の調査 / Test Element [

シーンの名前: 時間 

要素: 分2

調査: 値

結果の保存先: %Time4 ]


A5: 要素の調査 / Test Element [

シーンの名前: 時間 

要素: wait

調査: 値

結果の保存先: %Wait ]


A6: 待機 / Wait [

ミリ秒: 100

秒: 0

分: 0

時間: 0

日: 0 ]


A7: 複数の変数名をセット [

名前: %Start

%End

値: %Time1.%Time2

%Time3.%Time4

構造を出力 (JSONなど): オン ]


A8: 待機 / Wait [

ミリ秒: 100

秒: 0

分: 0

時間: 0

日: 0 ]


A9: フラッシュ表示 / Flash [

文字: Bluetooth機器の設定が済んでいません

長く: オン

Dismiss On Click: オン ]

If 条件開始 [ %Bluetooth 値なし ]


A10: フラッシュ表示 / Flash [

文字: 再生する音声ファイルの設定が済んでいません

長く: オン

Dismiss On Click: オン ]

If 条件開始 [ %Music 値なし ]


A11: フラッシュ表示 / Flash [

文字: Bluetooth機器の設定が済んでいません

再生する音声ファイルの設定が済んでいません

長く: オン

Dismiss On Click: オン ]

If 条件開始 [ %Bluetooth 値なし & %Music 値なし ]


A12: シーンの破棄 / Destroy Scene [

名前: 時間  ]



  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る