2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

コード(和音)を五線譜上に表示するWebアプリを作った(TypeScript+React+Redux)

Last updated at Posted at 2021-09-30

作成物

ソースコード

使い方

コード名を入力すると五線譜上に音符が表示される。
入力欄の左の音符記号ボタンを押すとト音とへ音の切り替えが可能。

新しいビデオ.gif

動作確認済みOS

  • Windows10(20H2)

動作確認済みブラウザ

  • Microsoft Edge(Chromium)
  • Google Chrome

なぜ作ったか

ピアノの楽譜を作る際にギター譜に載っているコードをアルペジオにして(分解して)左手にあてると楽に楽譜が作れそうだと考えた。
しかし音楽理論が分からずコードも全然知らない、かつ検索しても見やすいコードのサイトが見当たらなかったため作成した。

TypeScript+React+Reduxを使った理由

TypeScript+Reactを学習していて、ちょうど状態管理方法としてReduxなるものが使われていると知ったため。

動作内容概略

入力したコード名と一致するデータが存在すれば音符記号を表示させる。記号1つに対してcssを1つ割り当てることによってコードにおける音ごとの表示を可能にした。

工夫した点

画像を一枚も使用することなく実装した点

画像を使うと楽に作れると思ったが、画像を使ってしまうとプログラマーとして負けた気持ちになると何故か思ってしまったため、画像は使用していない。
ト音記号とへ音記号と音符と♯と♭は文字を使用し、五線譜はcanvasで描画している。

コードを入力した時点で表示させるようにした点

Webアプリでは主にボタンを押した後に結果を表示させるような気がするが(偏見)、ボタンを押す手間がもったいないため、入力した時点で一致するコードが存在する場合に表示するようにした。

ト音とへ音の切り替えボタン

最初はト音でしか考えていなかったが、ピアノの左手にあてるのであればへ音が必要だと気が付き、ボタンで切り替えられるようにした。

大変だった点

Reduxの使用

今回初めてReduxを使ったのでまず概念を理解するのに苦労した。
React + Redux + TypescriptでサンプルWebアプリ - Qiita
この記事をかなり参考にさせていただいた。

CSSでの位置調整

約170個あるコードのそれぞれの音と記号に対する位置調整。170*1コードあたり大体4個の記号≒680個の位置調整を行っている。

実装しようと思えばまだ可能なこと

  • 異名同音(F♯に対するG♭など1)の実装:労力と成果物が釣り合わない
  • スマホ対応:CSSの対応のみでできそうだがPCが使えない状況で楽譜を作ることがない

今後勉強が必要な点

  • tsxにおいて繰り返し処理を使いdiv要素を並列に結合する方法(分からなかったため今回は無理矢理switch文を使って結合)
  • Reduxはstoreで一括状態管理するがコンポーネントへの受け渡しは引数(props)のバケツリレーでよいのか
  • Reduxにおいて全て関数コンポーネントで実装する方法

おわりに

取り掛かるまでは全くと言っていいほやる気がど出なかったが、始めてみれば特に問題なかった。やはり実際に始めることは大切だと感じた。
初めてWebアプリを作ってみたが、大体想像していたようなものが作成でき良かった。
便利そうなため可能であればReduxを使っていきたい。

参考文献

  1. 異名同音と書いているが音楽理論的にはF♯とG♭はおそらく名前だけでなく音も異なる

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?