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で権限付けたりとかは不要だった

次回は

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