むらかみの雑記帳

Android とか iOS とかソフトウェア開発に関するネタ帳

iPad用電子楽譜アプリを作り始めました

なんと 9年ぶりのブログ記事ですw

ピアノ演奏のためにiPad で電子楽譜のアプリを幾つか使っています。

最初は PiaScore から始め、いまは Newzik をメインで使っています。 PiaScore はまぁまぁ良かったのですが、iPadバイス間で楽譜が同期できないのが我慢できず、Newzik に移行しました。 Newzik はクラウドで楽譜が同期できるので良いです。

本当は iPad 2台使って見開き表示したいのですが、PiaScore / Newzik どちらもできません。 いろいろ探した限りでは、これができるのは forScoreforScore/Cue の組み合わせだけですね。

ただこれは WiFi 接続が必須なので、自宅で使う分には良いのですが、演奏会では使えないです。 テザリングすればできるのですが、演奏前にそんなのセットアップしてる余裕ないし、演奏中に切れたりしたら目も当てられない。

ということで自分のニーズに完全に合致するものがなさそうなく、自分で作るしかなさそうなので、試作を始めました。

要件

自分にとって必要な要件は以下。

1) 譜めくりペダルを離したときにページめくりできること

既存アプリはすべてペダルを踏んだ瞬間にページがめくられるようになっていて、離したときにめくるようになっていません。

これだと、ページめくりをするちょっと前に左足をペダルの上に移動して浮かせておかないといけません。これがやりにくい。 離したときにめくるようになっていれば、先にペダルを雑に踏んでおいて、めくりたいときに離せばいいだけです。

2) iPad2枚並べてBluetooth接続で見開き表示ができること

これは上に書いたとおりです。Bluetooth 接続だけで見開き表示させたいです。

3) 片ページずつめくれること

2枚見開きにしたときに片ページずつめくれるようにしたいです。

具体的には、1/2 ⇛ 3/4 ⇛ 5/6 とめくるのではなくて、1/2 ⇛ 3/2 ⇛ 3/4 ⇛ 5/4 ⇛ 5/6 という順にめくってほしい。 このめくり方だと、割と雑に(早めに)めくっても大丈夫です。これは紙の楽譜ではできないことです。

NewZik は半ページめくりという機能があるのに、何故か横画面にして見開き表示にするとこれ効かないんですよね。。。(意味不明)

4) 複数デバイスで楽譜を同期できること

これは必須。

特に iPad 2台で Bluetooth 接続で見開き表示する場合、両方のデバイスに同じファイルを入れておく必要があります(たぶん)。 forScore/Cue では WiFi で画像転送してるっぽいのですが、Bluetooth でそんな大きなデータを送れないので、ページ切り替えの信号だけ 送る、ということになるはずです。

とはいえ、実装めんどくさすぎるので iCloud Drive そのまま使うことになるかな。。。

試作

iOS の PDFView を使えば簡単に PDF を表示できるので、これを使ってアプリ作り始めています。 (古い StoryView ではなくて新しい SwiftUI ベースで始めたのですが、全然勝手が違うので苦しんでいるところ)

ソースコードGithub においてあります。とりあえず公開状態にしてますが、あとで閉めるかも。

とりあえず、試作して 1) はできることがわかりました。

私は DONNER と LEKATO の譜めくりペダルを持っているのですが、どちらもデフォルトではペダルを踏んだときにキー押下開始(pressesBegan)・終了(pressesEnded)の2つのイベントが連続で上がってくるようになっています。ペダル踏みっぱなしにしても、です。

なんですが、REPEAT スイッチをオンにしておけば、踏んだときに pressesBegan、離したときに pressesEnded が呼ばれることがわかりました。 なので、pressesEnded のほうを拾ってページめくりすればやりたいことが実現できます。