AndroidアプリでMIDIファイル(SMF)を作成&再生するアプリを作る part.1
やりたいこと
Androidアプリで、任意のテンポ・音階のMIDIファイルを作成&再生したい。
参考にしたサイト
- 携帯アプリ開発記 MIDIファイルの作成と再生 … サンプルコード
- SMF(Standard MIDI File)フォーマット解説 | 技術的読み物 | FISH&BREAD … SMFの構造
- MIDIでの音符の高さと長さ - DTMハイパー初心者講座 … 分解能とは?
上記のサイトを読んで分かったこと
- できそう
- 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)は上記に加え以下の修正が必要だった
<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で権限付けたりとかは不要だった
次回は
- コードをよく理解していないので、ちゃんと読んでみる。
- 再生させる音階を動的に生成したい。