npmを公開してました
こんにちは、不破です。 (だいぶ前に)自作npmを公開したので、紹介させていただきます!
私が通っているフィヨルドブートキャンプのJavascriptのプラクティスに「npm パッケージの作成」というものがあります。作るnpmの内容は自由で、各々作りたいものを作って公開します。
作成したnpmの概要
music-scale-and-play-soundというnpmを作成しました!その名の通り音楽に関するnpmです。
キー(調)とスケール(音階)を選択して、そのスケールに含まれている音階を表示した上で音を再生するという内容です。
※スケールについてはこちらに書いてあります
例1: Cメジャースケール→ C,D,E,F,G,A,B
例2: Eドリアンスケール→ E,F♯,G,A,B,C♯,D
なぜ作ったか?
1. Javascriptで音を再生できたら面白そう
今までRubyやRailsを中心に学習してきましたが、音とか画像とか映像とかメディア系のものはあんまり扱ってこなかったなぁと気づいてしまいました。私は音楽が好きなので音に関するnpmを作りたいと思いました。
2. スケールを弾く練習の際に、キーを変えるとわからなくなってしまう問題解消のため
いつもCのキーで練習しがちで、キーが変わると途端にこのスケールを弾くにはどの音を弾いたら良いのかこんがらがってしまうんですよね。。
難しかったところ
特に難しかったのは音を再生する箇所です。
当初はスケールが1音ずつではなく全て同時に再生されてしまい、解決するのがちょっと大変でした。 1音再生したら処理を止めて、再生し終わったら次の音を再生する処理を走らせて…という感じです。 やはりJavascriptの非同期処理は難しい!ちょこちょこ復習していますが、まだいまいち掴みきれていない感じがします。
(あと、著作権的な問題が気になって、再生する音を一つ一つ自分で弾いて録音したのが地味に面倒でしたww)
余談
当初はスケールを再生するnpmではなく、ランダムに和音を再生してコード名を当てるクイズにしようかと思っていました。 が、使用しようとしていたnpmが非常に古い&音を同時に複数個再生できないらしく、作るものを変えることになりました。
そのため今のnpmの内容にしたのですが、相変わらずweb-audio-engine
を使用していたため、エラーコードが出てしまうことがあり別のnpmを使うことになりました。(もう最後の動作確認のあたりだったのに…)
結局wavファイルを再生するnpmを使うことにしました。
(web-audio-engine
はコード上で音を生成できるので、音のwavファイルを作る必要がなかったのがメリットでした。)
何か外部のものを活用するときは、現在でもメンテナンスされているものを選びましょう!という教訓でした。
(今思い返すとnode-wav-player
使えば音を同時再生できるから和音当てクイズ作れましたね。。行き当たりばったり感すごい)