WORK
楽譜PDFの自動移調ツール
楽譜のPDFを読み取ってデータにし、演奏する楽器に合わせて移調できるツールです。結果は画面で確認・編集してから出力でき、楽器が変わるたびに手で書き直す手間をなくしました。
概要
楽譜の PDF をデータに変え、楽器ごとに移調し、編集してから出力する仕組みです。読み取り、移調、編集、出力を、画面の操作として一つの流れにしています。画面では利用者が楽器と内容を確認し、変換そのものは API が受けます。紙の楽譜を見ながら手で移調していた作業を、データにしたうえで楽器別にやり直せるようにしています。
PDF を渡すと、楽譜データへの読み取り、楽器の選択、移調、編集、出力がこの順で進みます。画面は利用者が楽器と内容を確認する場所で、変換の処理は API が受けます。紙に戻って書き直す前に、データ上で移調の結果を見られます。出力の直前まで、同じデータに対して編集を重ねられます。移調の結果は、出力の前に画面で確認します。
課題
紙や PDF の楽譜は、楽器が変わるたびに手で移調していました。読み取り、移調、清書、出力が別々で、どの段階の譜面が最新かも、手元のファイルと紙を見比べて判断していました。楽器を一つ変えるだけで、同じ楽譜をもう一度書き起こす必要がありました。途中で音の高さや表記を直したいときも、移調の前の原稿と後の原稿が分かれて残っていました。
楽器が一つ変わるだけで、譜面を最初から書き起こしていました。移調前の原稿と移調後の原稿が別々の紙やファイルになり、どちらを直せばよいかが分かりませんでした。読み取りのミスがあっても、移調が終わったあとで元の PDF と見比べる必要がありました。出力の形式が変わるたびに、清書の手順も変わっていました。
対応
まず PDF を読み取り、楽譜データにします。読み取ったデータに対して楽器を選び、その楽器に合わせて移調します。移調した内容は画面で確認し、必要な箇所を編集してから出力します。読み取りから出力までを画面の手順として通し、楽器が変わるたびに紙へ戻らなくて済むようにしています。出力の前に、データ上で内容を見直せるようにして、移調と編集を同じ流れの中に置いています。
PDF を読み取った結果を楽譜データとして保持し、そのデータに対して楽器を指定して移調します。移調後の内容は画面で確認し、音の高さや表記を編集してから出力します。読み取り、移調、編集、出力の途中結果を、紙の束ではなくデータの状態として残します。楽器を変えるときは、同じ読み取り結果から移調をやり直せるようにしています。
構成
楽譜の読み取りと移調の処理は Python、画面は TypeScript です。画面はブラウザで操作を受け、変換と出力は API が実行します。画面と API は分けてあり、PDF の受け取りから楽譜データへの変換、楽器別の移調、編集結果の出力を API 側の処理として繋いでいます。実行環境は Docker で、画面と API をまとめて起動できます。紙の譜面をデータとして持つところと、利用者が楽器を選ぶ画面を、役割で分けています。
Python は PDF の読み取りと移調の処理を担い、TypeScript は利用者が操作する画面を担います。画面はファイルの指定、楽器の選択、編集、出力の指示を受け、API がその指示を処理へ渡します。Docker は画面と API を同じ環境で起動します。紙の譜面をデータにする処理と、人が確認する画面を分けているのが、この構成の中心です。