2017年01月29日

楽譜付きの動画を作る方法

 先日公開した「楽譜付きの動画」の作り方メモ。iMovie か何かを使って、音声ファイルに静止画をくっつけていくのが簡単なんだろうけど、何となくコマンドラインでやりたくて、いろいろ模索しました。

 結論から言えば、ffmpeg を使えばできる。Mac 用の ffmpeg は、osxexperts からバイナリをもらってきた。

 まず、楽譜を画像化しないといけない。全部同じ大きさにしないといけないのが地味に面倒。ImageMagick を使うのが簡単かな。楽譜を A5 横サイズの pdf に整形し、次のコマンドで 960×680 ピクセルの png に変換。img-1.png, img-2.png,... という連番のファイルができる。

$ convert -density 116 score.pdf -extent 960x680 img.png

 この静止画を指定時間ずつ表示する動画を作るには、次のようにすればよい。

$ ffmpeg \
-loop 1 -t 14.9 -i img-1.png \
-loop 1 -t 28.2 -i img-2.png \
-loop 1 -t 27.7 -i img-3.png \
-filter_complex "[0:v][1:v][2:v] concat=n=3:v=1:a=0 [v]" \
-map "[v]" -pix_fmt yuv420p -y out.mp4

 -t オプションで指定しているのが、各静止画の表示時間。ポイントは filter_complex です。[0:v][1:v][2:v] で、「0番目・1番目・2番目のストリームのビデオソース」を指定し、concat=n=3:v=1:a=0 [v] で「3つの入力を結合してビデオストリームを1つ(名前が [v])、オーディオストリームを0個」作る。そして -map "[v]" で結合後のストリームを指定し、その後のオプションに従って out.mp4 に書き出す。

 このコマンドラインを手動で打ち込むのは骨が折れる。せっかくシーケンサを使っているんだから、ここはシーケンサに計算させたい。このため、シーケンサ (Alchemusica) を開き、タイミング計算用のトラックを作成して、楽譜を切り替える位置にダミーのイベントを置いて行く。

 Alchemusica は(誰も知らないと思うけど)実は Ruby インタプリタを内蔵している。Window メニューから Ruby Console を開いて、次のように打ち込むと、トラック5(今回使ったタイミング計算用トラック)中のイベントの時刻が秒単位で取得できる。

% self.track(5).each { |e| puts self.tick_to_time(e.tick) }
14.856236
43.048685
70.757131
82.84784
...(中略)...
250.062446

 これを利用して、コマンドラインを自動生成させる。

% i = 0; last = 0.0; self.track(5).each { |e| t = self.tick_to_time(e.tick); printf "-loop 1 -t %.1f -i img-%d.png \\\n", t-last, i; last = t; i += 1 }; print "-filter_complex \""; i.times { |j| print "[#{j}:v]" }; print " concat=n=#{i}:v=1:a=0 [v]\" \\\n"
-loop 1 -t 14.9 -i img-0.png \
-loop 1 -t 28.2 -i img-1.png \
-loop 1 -t 27.7 -i img-2.png \
-loop 1 -t 12.1 -i img-3.png \
...(中略)...
-loop 1 -t 8.8 -i img-19.png \
-filter_complex "[0:v][1:v][2:v][3:v][4:v][5:v][6:v][7:v][8:v][9:v][10:v][11:v][12:v][13:v][14:v][15:v][16:v][17:v][18:v][19:v] concat=n=20:v=1:a=0 [v]" \

 生成されたコマンドラインを、次のシェルスクリプトの指定位置に貼付けて保存する。これを実行すれば、指定したタイミングで画像が切り替わる動画ができあがる。

#!/bin/sh
ffmpeg \
...(先ほどの出力)...
-map "[v]" -pix_fmt yuv420p -y out.mp4

 ここまではまだ画像だけなので、次にオーディオデータと結合する。

$ ffmpeg -i out.mp4 -i audio.mp3 -vcodec copy -y movie.mp4

 できました。全部コマンドラインで制作したので、制作過程をシェルスクリプトの形で残しておけるのは便利。

タグ:音楽 DTM
posted by toshinagata at 01:46| 日記

2017年01月28日

「木管四重奏のためのソナチネ」(自作曲 DTM)

 昔作曲した「木管四重奏のためのソナチネ」を YouTube に上げました。

 「音楽に合わせて楽譜を表示する」のをやっと実現しました。楽譜が見えるっていいですねえ(自己満足)。

 楽譜を IMSLP で公開している。たまに、「演奏するよ(したよ)」というメールが届くことがある。1年に1回あるかないかぐらい。毎回外国の人で、日本の人から連絡をもらったことは一度もない。IMSLP は英語が読めないと使いにくいので、言葉の壁があるのかな。新曲を探すことにあまり熱心でない、というのもあるかも知れない。もっとも、IMSLP で気に入った曲を探し出すのは(たとえ英語ができたとしても)骨が折れる作業だとは思うけど。

 ふと思い立って、YouTube で検索してみたら、実演の動画を公開してくれている人がいました。

 楽譜にテンポを指定してないので、すごく遅いテンポで演奏されてる。第1楽章は 2/2 で書くべきだったかな。4/4 で Allegro moderato だと、そりゃあこうなるよね。

タグ:音楽 DTM
posted by toshinagata at 10:18| 日記

2017年01月23日

さくらブログのスマホ対応

 このブログ、スマホで見た時に「タイトルだけ」しか見えないのが気になっていたので、デザインを修正しました。参考にしたのは下の記事。そのものズバリ。

さくらブログをレスポンシブ化

 簡単に手順をメモしておく。最初に、スマホ専用サイトから PC サイトへのリダイレクトを設定。スマホサイトの「コンテンツ」を「自由形式」のみにして、その内容を次のようにする。

<SCRIPT LANGUAGE="JavaScript">
<!--
document.cookie = 'force_pc=1; max-age=15768000; path=/';
document.cookie = 'force_sp=0; max-age=15768000; path=/';
location.href=location.pathname; 
setTimeout("autoLink()",1000);
// -->
</SCRIPT>

 「スマートフォン専用ページを表示」という案内を消す。

#iphone-link{display: none !important;}

 PC サイトの HTML に Viewport 設定の追加。

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">

 CSS にメディアクエリを追加。

@media screen and (min-width : 0px) and (max-width : 767px){
#container{width: 100%}
#content{width: 100%}
.blog{width:100%; margin-left:auto; margin-right:auto;overflow:hidden}
#links{width: 100%}
}

 「移転のお知らせ」も外して、こんな感じになった。本文が横幅いっぱいに表示される。

タグ:スマホ
posted by toshinagata at 21:41| 日記

2017年01月22日

丸善名古屋店にお出かけ

 半年に一度の定例になった、家族での丸善名古屋店へのお出かけ。家族四人がそれぞれ好き勝手に本を買って、総計20冊ほど。会計に15分ぐらいかかりました。

 自分が今回買った本たち。

  • 「セヴラック ピアノ作品集A」(舘野泉・久保晴代編、音楽之友社)
    半年前に買った舘野さんの「ひまわりの海」で紹介されていたセヴラックの作品集。今回、丸善で楽譜が売られていることに初めて気がついて、棚に近づいたらこれが目に飛び込んで来た。まるで、買いなさい、と言わんばかりに。
  • 「クラシックの真実は大作曲家の『自筆譜』にあり!」(中村洋子著、DU BOOKS)
    音楽の大福帳」というブログの記事を抜粋して本にしたものだそうです。本のタイトルがなんだかイマイチだけど、中身は読み応えがある。Chapter 6 のアファナシエフへの傾倒と近年の演奏への失望、それから「商業的に消費される」音楽への批判は必読。
  • 「最後の秘境・東京藝大」(二宮敦人著、新潮社)
    話題の本ですが、掛け値なしに面白い。ほんとに凄い人がいっぱいいて、それが日常になっている世界。日本に一つぐらいこういう世界があってもいいじゃないか。一つで十分だけど。
  • 「ユリイカ (2016/11) 特集・こうの史代」
    活字が小さくて老眼には辛いけど、内容はものすごく濃い。評論を先に読むんじゃなくて、こうのさんの作品をもっと読まないといかんな。
posted by toshinagata at 21:46| 日記

2017年01月21日

「華やかなメヌエット」(シャブリエ作曲)

 去年の年末あたりから、この曲をピアノでさらっております。楽譜は音楽之友社の「シャブリエ・アルバム」。

 曲頭の "Allegro franco" ってなんですかね。"Franco" なんて聞いたことないぞ。Google 翻訳で調べてみると、英語の free, frank あたりが出てくるけど、「自由に」っていう感じじゃないし。ずっと下の方に出てくる意味で "straightforward" とか "forthright"、つまり「率直な」というのがあるんで、こっちの方かな。

 最初に譜読みしていて戸惑ったのがここ。左手の最後の八分音符、Bb-D じゃないんだ。ミスプリントじゃないかと思ったけど、二回出てくるところがどちらもこうなっているし、IMSLP に出ている Enoch 版も同じだから、これが正しいんでしょうね。確かに、Bb-D だと次が C#-E なのは増二度進行でちょっとまずいし、B-D では右手の Bb と対斜を起こすから、これしかないか。でも、ちょっと弾きにくいです。

 あと、ここどう弾いたらいいのかよくわからない。"poco rubato" と指示されて、クレッシェンドで、両手のアルペジオがごちゃごちゃ入ってきて、少しゆっくりにしたいところなんだけど、左手の下には pressez(急げ)って書いてある。ここで遅くして、次の小節でいったんインテンポに戻して、それから2小節後のフェルマータに向けて riten. したくなりません?

 この曲はラヴェルがオーケストラ用に編曲しています。「古風なメヌエット」の元ネタ、という感じですね。シャブリエはよくわからないところも多いけど、なかなか面白い。ばしっと決まるとかっこいいし。

タグ:音楽
posted by toshinagata at 17:37| 日記

2017年01月17日

MachiKania BASIC の仕様を調査

 MachiKania が動き出したので、BASIC の仕様をちょっと調べてみた。マニュアルが公開されているのだけど、細かいところがよくわからなかったんです。

 同一名の変数はメモリ領域を共有している。つまり、変数には実は型の概念はなく、同じ 32 ビットデータを整数/単精度実数/文字列(のアドレス)としてそれぞれ解釈している。

A#=1:PRINT A
-->1065353216 ($3F800000 = 1.0 as binary 32)
A$="ABCDE":PRINT A
-->-1610603508 ($A000240C は文字列のアドレス)
A#=1:PRINT A$
-->Exception ($3F800000 を文字列アドレスとして解釈)

 整数型変数が正しいメモリアドレスを指している場合、それに (式) をつけると「整数型変数へのポインタ」としてメモリ内容にアクセスすることができる。書き込みも可能。このへんは、Tiny BASIC 系の雰囲気がある。正式に仕様としては公開されていないが、便利に使えそう。

A$="ABCDE":A(0)=$50515253:PRINT A$
-->SRQPE (最初の4バイトが置き換わった)

 もちろん PEEK() 関数、POKE 文を使えば1バイト単位の読み書きが可能。

A$="ABCDE":POKE A,$53:PRINT A$
-->SBCDE (最初の1バイトが置き換わった)
POKE A+2,$51:PRINT A$
-->SBQDE (さらに3バイト目が置き換わった)

 MachiKania の配列については、BASIC コンパイラ作者の Katsumi さんが「MachiKania type Z で使われている多次元配列の実装について」という解説を書いておられる。それによると、A(x,y,z) という配列の場合、A, A(x), A(x,y) のそれぞれにポインタを格納しておいて、添字が1つ増えるごとに次のポインタを参照する仕組みになっている。この実装から想像できる通り、MachiKania の配列は実質的にはメモリアドレスへのポインタとなっている。

DIM A(1):PRINT A
-->-1610603420 ($A0002464)
POKE A,$FF:PRINT A(0)
-->255 (最下位バイトが 0xFF になった)
PRINT A(2) (範囲外の添字)
-->3487026 (無意味な値が入っている)

 文字列の実装がどうなっているのか興味がある。コンパイラのソースコードを見たところ、「一時的に使う文字列」へのポインタを保持する領域が用意されており、BASIC の1行分を実行するごとにこの領域をクリアしているらしい。あちこちに PIC32 のアセンブラが使ってあって、完全には読めていない。

posted by toshinagata at 23:06| 日記

2017年01月15日

MachiKania type Z 作った

 だいぶ前に部品だけ調達してあった MachiKania type Z をようやく作りました。MachiKania は、PIC マイコンワンチップで BASIC を走らせるワンボードコンピュータです。

 部品は「オレンジピコショップ」で購入。今回は手っ取り早く動かすため、専用基板で組み立てた。1時間半ぐらいで完成。最初全然動かなくて「おかしい、おかしい」と騒いでいたが、よく見たら PIC の IC ソケットを仮止めしたまま残りの足をハンダ付けしてなかった、という超絶アホなミスを発見。修正したらちゃんと動きました。

 制作の時は、抵抗の数・種類が多いので、間違えないように注意した。部品表を印刷して、こんな風に刺しておき、R1 から順番に取り付けて行った。

 モニタは秋月の 4.3 インチ液晶。Amazon で売られている激安液晶だと同じサイズでもっと安いのですが、秋月で入手できるのは安心感があります。

 ポータブル化するために、同じく秋月で「昇圧型スイッチング電源モジュール LMR62421 キット」を調達し、エネループ4本 (4.8 V) から +12 V を作るようにした。エネループ4本は MachiKania 本体への給電にも使う。

 MachiKania type Z のウェブサイトから最新ファイルをダウンロードして、SD カードにコピーする。Mac だと ._ で始まる余分なファイルがくっついてきて邪魔なので、Finder でコピーする時は注意。まあ、Mac 使いの人ならよくわかっている話だとは思いますが。なお、bootloader.hex は PIC マイコンに書き込むファームウェアなので、SD カードにコピーする必要はない。

 パックマン動きました。若干色にじみがあるけど、そういう仕様だということで。

 残念ながら、肝心の BASIC がまだ動かせてません。PS/2 キーボードを認識しないのです。サンワサプライの SKB-KG3BKN なんだけど、"Init PS/2...Keyboard Not Found" と表示されて、そのままエディタの画面に入ってしまう。抵抗を交換すればいい、という話を聞いたので、もう少し調査が必要。

 1/16 追記:キーボードは認識することもあるようです。再現性について、引き続き調査中。

posted by toshinagata at 13:26| 日記

2017年01月13日

中村俊輔がジュビロ磐田に来た!

 いやはや、本当に実現してしまいました。年末から噂が流れていて、まさかそんなことは、と思っていたのだが、そのまさかだった。

 元川悦子さんのサッカー記事は、選手やチームへの共感がいつもにじみ出ていて好きなんだけど、これも本当にいい記事ですね。ジュビロは J2 に落ちる少し前ぐらいからすっかり存在感が薄れてしまっていたが、中村俊輔の加入で注目度が一気に上がるだろうし、そうなれば選手のモチベーションも格段に上がってくる。ぜひ磐田の街を元気にして欲しい。

タグ:サッカー
posted by toshinagata at 22:41| 日記

2017年01月12日

新種テナガザル、スカイウォーカー?

 ナショナルジオグラフィックより、「新種テナガザルを発見、スター・ウォーズから命名」。へえ、まだ新種の霊長類が発見される、なんてことがあるんだ。ミャンマー東部から中国南西部の森林で発見、とのこと。中国すごいな。地球も案外広いんだな、と感じる。

 ナショジオって実はちゃんと見たことないんだよな。サイエンス好きの一般人は、ナショジオが好きな人と日経サイエンスが好きな人に分かれるんじゃないかと思う。何となくだけど。日経サイエンスは昔定期購読していたことがあった(まだ「日経」がついてなくて「サイエンス」という誌名だった)。「メタマジック・ゲーム」が連載されていた頃だった。

タグ:科学
posted by toshinagata at 22:15| 日記

2017年01月10日

RADWIMPS「棒人間」

 坊が映画「君の名は。」を見に行って以来、RADWIMPS にハマっている。中でも「棒人間」がお気に入りらしい。RADWIMPS の歌は、楽曲よりも歌詞に特徴があるんですね。ことばが好きな坊(ときどき無駄なヘリクツをこねるが)には、「棒人間」の歌詞が特に刺さったようだ。

 難解な言葉が次々と出てきますねぇ。内容もキツイよこれ。一見ノーテンキな音楽とのギャップがすごい。

僕は人間じゃないんです 本当にごめんなさい
そっくりにできてるもんで よく間違われるのです
...
笑顔と同情と謙遜と自己犠牲、朝起床に優しさと
優に1億は超えそうな 必要事項を生きるのです
しかしまったくもってその甲斐もなく 結局モノマネはモノマネでしかなく
一人、また一人と去ってゆき 人間が剥がれ落ちるのです

 それで、せっかくギターを習っているんだから、弾き語りをしたい、ということになり、各種ウェブサイトや YouTube で「棒人間」のコードを調べて、目下練習中。習っているのはクラシックギターなので、コードをじゃかじゃか弾くスタイルにはあまり慣れていない。ちょっと時間がかかりそうな感じだが、まあすぐにできるようになるでしょう。しかし、小学生にこれウケるのか?

 コードを一つ一つ本に出ているタブ譜で確認しているのだが、構成音をちゃんと理解しといた方がええよ、と余計なアドバイスをした。あまりピンと来てないみたい。ヒメもコードはわからん、と言ってるしなあ。そんなに難しいですかね。

 参考になるかな、と思って、こんなのを作ってみた(余計にわからんようになるかも)。

posted by toshinagata at 20:28| 日記