Skip to content

Posts

MML実装

おとといあげた実装したいコマンド群、あとはタイと繰り返しと和音を残すところまできた。 ちょっと今の作りだとやりにくくなってきたからリファクタリングしたい気持ち。 ノートオンオフを一つのメソッドにしてしまっているのを何とかしないとタイと和音ができない気がする。

Inspiron再セットアップ

InspironにDellのOSリカバリーツール使ったら、途中で先に進まなくなってWindows起動しなくなってしまった。 Surface Goでリカバリー用USB作って何とか復旧。 ただしWindows11Homeだと同じところで落ちたので、Windows11Sモード版で入れなおした。 設定 Sモード解除 タッチパッドの Read more

MML仕様

それなりになってきたので、文法的なところもちゃんと決めていきたい。 MMLの標準化がされていないのは前に調べた通りなので、仕方ない。 記号 意味 備考 cdefgab 音階 +, # 半音上げ 音階の直後に書く - 半音下げ 音階の直後に書く . 符点 ^ タイ r 休符 l 省略時音長 o オクターブ > 1オクターブ上げ < 1オクターブ下げ v ベロシティ 0~12 Read more

mdmml

SMFのこと何もわかっていなかった。 2トラック目の音が出ないのは、1トラック目のlength指定が間違っていたせい。 音色が変わらないのは、プログラムチェンジだけ書いてMSB/LSBがなかったせい。 とりあえず形になってきた。 参考ページ: SMF(Standard MIDI File)フォーマット解説 | 技術的読み物 | FISH&BREAD DTM技術情報 - 5 Read more

mdmml

とりあえず Timidity で再生できるSMFを吐き出すことはできるようになったのだけれど、なんか違う。 複数トラック作成しても、1トラック分しか再生されてないように聞こえる。 プログラムチェンジを入れても音色が変わらない。 何が間違っているのか・・

args

昨日のgo runとgo testで挙動が違うのは、os.argsのインデックスが間違っていただけだった・・ os.args[0] はコンパイルしたバイナリで、欲しかったものはos.args[1] でとれた。 なんか初歩的なところで時間溶かした。。

hexdump

SMF出力を確認したくて、hexdump使ったところ、2バイト単位の出力(しかもリトルエンディアン)なのね。 -Cオプション付ければ1バイト単位になるけど、右側にASCII文字も出る。 これのASCIIなし版が見たいんだけど、そういうオプションはないみたい。 $ go run main.go ../../testdata/test.md | hexdump -C 00000000 4d 54 68 64 00 00 00 06 00 01 00 03 03 c0 Read more

mdmml

昨日マークダウンからMMLを抜き出すところをとりあえず作ったので、 今日はMMLをSMF形式に変換するところを作る。 なかなか思ったように動いてくれない。。 go test と go run で挙動が違うのなんでだ・・

マークダウンでMMLを書く

マークダウンからテーブル部分をmmlとして読み込むところを作っていたら日付が変わってしまって毎日更新に穴があいてしまった。

マークダウンでMMLを書く

main.go と、とりあえず固定値を返すパッケージを書いた。 package main import ( "fmt" "os" "github.com/umemak/mdmml" ) func main() { src, err := os.ReadFile(os.Args[0]) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } mm := mdmml.NewMDMML(src) os.Stdout.Write(mm.SMF()) }