2017年06月29日

ピアノの音階を鳴動する 〜楽譜と結びつけられるか〜

応援クリックを1日1回宜しくお願いいたします。




音階のボタンをクリックすると、その音階の音を鳴らす(鳴動する)アプリケーションを作成しました。
↓↓↓
音階


ピアノの鍵盤が88個あるそうで、その範囲だけラ0(A0)〜ド7(C7)まで設置しました。

また、全音符〜256分音符まで調整でき、BPMも設定できるようにしました。


聞く音の振動数の高さによって、反応する身体の範囲が違って、高い音ほど脳に響くそうなのですが、5あたりからそんな感じがあります。

また、聞こえる振動数の範囲$20\mathrm{Hz}$〜$20000\mathrm{Hz}$の下側の境界に近いラ0($27.5\mathrm{Hz}$)などは音量が小さくなっているような位、聞こえにくいです。

ちなみに、ド7(C7)は$4186\mathrm{Hz}$だそうで、まだまだ天井は遠い(はず)です。







今回鳴動に用いているのはWeb Audio APIという技術だそうで、<audio>タグとは異なるものです。

ユーザのアクション以外でも起動可能であることなど、より自由度が高いそうですが、詳細は他ブログのご参照を。



ソースコードの紹介

// この2行をplay()の外側に書いておくと、何回かクリックしたときのエラーが生じない。
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();

function play(offset, time) {
var audioDestinationNode = audioContext.destination;

var osciillatorNode = audioContext.createOscillator();
osciillatorNode.connect(audioDestinationNode);

// ここが音階の肝
osciillatorNode.frequency.value = parseInt(440 * Math.pow(Math.pow(2, 1 / 12), offset), 10);

osciillatorNode.start = osciillatorNode.start || osciillatorNode.noteOn;
osciillatorNode.start();

// ある時間が経つと終了
setTimeout(function () {
osciillatorNode.stop();
}, time);
}





$\mathrm{\TeX}$の技術に、MusixTeXという楽譜を出力するものがあるそうです。

それをinputとして、出力を音とするアプリケーションを作れるかと思い、音を出すことを調べました。

すると、Web Audio APIが見つかって、使ってみました。


楽譜は<canvas>タグを使ったりすることもできるそうで、

ある記法で文字列を入力すると演奏するJavaScriptのライブラリも発表されているそうです。

世の中の数式UIのように、五線譜に音符(♪)を配置していくようなアプリケーションが作れたらと思います。

(その後、試演奏と楽譜を出力する)

楽譜の読み方 - ぷりんと楽譜を参考にできるとは思うのですが、
http://www.piano.ru/scores/tchai/tchai-con-01-1.pdf
を書くことはできるのか。


はじめ、音階の表記法などが種々あることを知り、統一的なものはないかと思っていましたが、ピアノを基準とするということで収まっています。



タグ:IT 数式 web 技術

posted by Line Segment at 18:00 | Comment(0) | TrackBack(0) | ホームページ | このブログの読者になる | 更新情報をチェックする