Valley of Defilement

Androidアプリ開発などを行っています

AndroidアプリでMIDIファイル(SMF)を作成&再生するアプリを作る part.1

やりたいこと

Androidアプリで、任意のテンポ・音階のMIDIファイルを作成&再生したい。

参考にしたサイト

上記のサイトを読んで分かったこと

  • できそう
  • MIDIファイルはバイナリファイル。バイナリファイルをゴリゴリ作る処理となる(APIとかないの?)
  • 作ったファイルをMediaPlayerで再生させる
  • JetCreatorというAPIもあるようだが今回の目的には適していない気がする(参考
  • SMFとは・・

    Standard Midi File スタンダードMIDIファイル(Standard MIDI File、SMF)は、MIDI用ファイルフォーマットの一つである[1][2][3][4]。Format0/Format1/Format2の3タイプが存在する。一般的に用いられている拡張子は .mid。標準MIDIファイルとも呼ばれる。(Wikipedia

  • 今回の目的だとFormat0でよさそう

環境

参考サイトのコードが実行可能かやってみる

  • Nexus5 (Android 6.0.1)については以下の修正を行ったら動いた
    • ファイルパスをパッケージのパスに合わせて修正
fis = new FileInputStream("/data/data/<パッケージの参照を記載>/files/temp.mid");
  • Pixel 4a (Android 11)は上記に加え以下の修正が必要だった
    • MODE_WORLD_WRITEABLE は Android 6.0 以降で使用禁止となったモードらしいので変更(の割には Nexus5 (Android 6.0.1) で動いたけど)
<git diff>
@@ -48,7 +48,7 @@ public class MidiFileWriter {

         try {
             // ファイル作成
-            fos = context.openFileOutput(flname, Context.MODE_WORLD_WRITEABLE);
+            fos = context.openFileOutput(flname, Context.MODE_PRIVATE);
  • AndroidManifestで権限付けたりとかは不要だった

次回は

  • コードをよく理解していないので、ちゃんと読んでみる。
  • 再生させる音階を動的に生成したい。

【使い方・ヘルプ】イヤホン接続状態表示アプリ

■ アプリの概要
イヤホンジャックにイヤホンが接続されているか否かを表示する、Android向けのアプリです。
メディア音量(音楽やアプリの音量)を変更する機能も付いてます。
 
■ インストール方法
以下のURLからインストールしてください
 
■ 使い方
  • イヤホンの接続状態を確認する
アプリ画面、又は通知バーで接続状態を確認できます。
通知バーで接続状態を確認するには、アプリ画面の「通知バー表示」をONに設定してください。
 
  • 音量を変更する
アプリ画面下部より音量バーを操作
 
■ 不具合報告・ご要望
不具合やご要望につきましては、以下のページのコメント欄にて受け付けております。
 

【既知の不具合】

  • スマホのメモリが逼迫すると、通知バーの接続状態が消えてしまう
  •  → アプリ画面より「通知バー表示」をOFF/ONすることで再び表示できます
 
■ その他のアプリ
 

自作アプリ紹介


① イヤホン接続状態表示

  [ できること ]

  • イヤホンの接続状態(未接続 / 接続)を表示
  • イヤホン接続状態を通知バーに常に表示することも可能
  • メディア音量の変更

  f:id:leechmonger:20210526224120p:plain


ダークソウルIII トロフィーコンプリート補助

  [ できること ]

  • DARK SOULS IIIのトロフィーコンプリートに必要な指輪、魔術、奇跡、呪術を一覧表示
  • 入手したものにチェックマークを付けられる
  • 現在の達成率(%)を表示
  • 入手方法も記載しています

f:id:leechmonger:20210527224122p:plain

 

git diff、git show、git grep等を非対話的に使用する方法

掲題のそれを「ページャ」(pager)と呼ぶらしく、git の後ろにオプション「--no-pager」を付与することで、無効にできる(=最後まで出力するようになる。非対話的になる。)

  • git --no-pager diff
  • git --no-pager show
  • git --no-pager grep hoge

shellで自動化する際にハマったのでメモ。

【無料】AndroidでYoutubeをバックグラウンド再生する方法

Google謹製のYouTubeアプリはバックグラウンド再生できない(お金払えばできるみたいだけど)。

あるアプリを使えば可能となる。それが以下(Andoroid向け)。

ついでに動画再生開始時の広告も表示されなくなる。

<使い方>

アプリ起動時に表示されているYouTubeアイコンから飛ぶ。

あるいはurl欄で「YouTube」検索。