Skip to content

Posts

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()) }

マークダウンでMMLを書く

とりあえずリポジトリを作成して、VS CodeのDev Containerで開発できるようにした。 timidityはコンテナ内で実行しても出力デバイスが見つからないとかで動かなかった。 SMFの仕様は、Wikipedia見ても具体的にどうなのって感じで、脚注のリンク先も公式以外は消えてしまっていた。 エンデ Read more

MMLとマークダウンの組み合わせ

どうせ方言が多いなら、ということで自分ならどうするか考えてみた。 で、タイトルのとおりマークダウン記法と組み合わせるといい感じになるんじゃないかなー、と。 具体的には|で区切れるようにする。|はマークダウンだとテーブルになるので、VS Codeとかでプレビューしたときに見やすくなるのではないか。 テーブルの Read more

MML再生サービス

こんなページを見つけた。 MMLの楽譜を作成しMIDIやMP3に変換・再生 ネット音楽教室 こないだやりたいと思っていたことがすでに実現されていたとは。 ところで、MMLって方言が結構あるようで、標準化はされてないのだろうか。 音階やオクターブ上下などはどこも同じだけど、コードとかループなんかは特に表記が揺れ Read more

mml-iteratorのソースを読む

runvnc/music1: A simple way to play with MML (Music Macro Language). Enter MML in text area and press play button. は、中身はmohayonao/mml-emitter: MML(Music Macro Language) event emitter for Web Audio API.で、そこからmohayonao/mml-iterator: MML(Music Macro Language) Iteratorを使っているので、mml-iteratorを読んでみた。 とてもシンプルで読みやすいソースだと思った。 他 Read more

WSL2でmidi再生

MMLを再生するために何が必要か考えてみた。 MMLから直接再生できるのが良いけれど、大変そうなので既存の何かがあれば使っていきたい。 midiファイルを再生するアプリはTiMidityというのがよさそう。 timidityとSoundFontをインストール $ sudo apt install timidity freepats fluid-soundfont-gm fluid-soundfont-gs 参考 FrontPage - KemaSoft 適当なmidiファイル Read more