2017年06月30日

円周率$\pi$を演奏する 〜数の世界を音楽に対応させてみる〜

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




円周率の各桁(0〜9)をド3〜ラ4に対応させて演奏(?)するアプリケーションを作成しました。
↓↓↓
円周率$\pi$



これは、かつて作成したアプリケーションの円周率$\pi$音階を用いて作成しました。

FC2サーバでも1発でアップロードできるように(笑)、.htmlファイルが1MB以下になるように円周率$\pi$を10000000桁抽出しました。

また、円周率$\pi$の各桁において、0をド3、1をド#3、・・・、9をラ4に対応させ、それらの音階をWeb Audio APIで鳴動させます。


円周率に意味があるとして、ひたすら桁を追うという試験的なものですが、演奏する場面としては、円について何かを得ようとするときにはどうぞ。






ソースコードとしては、鳴動の関数を繰り返して呼び出すときにsetIntervalを用いて、ループ変数をインクリメントしつつ呼び出すという形です。

変数を.charAt()に入れて円周率$\pi$の桁を得ます。



Web Audio APIについて、setIntervalで繰り返して呼び出しています。

setIntervalのタイミングと鳴動する関数内でstop()するまでの時間を同じにしておくと、各音の間でプツップツッという音が入って余り心地よくはないです。

1回だけ音を鳴動させるだけのときはあまり気にもならないほどでしたが、連続して規則的に現れると気になりそうです。

それを和らげるために、鳴動する関数の内部でstop()するまでの時間をsetIntervalの繰り返しのタイミングの0.8倍としています。

修正しないときよりはプツッ音がマシになっています。

ただし、それでも現れるので、演奏アプリケーションというまでは少し遠そうです。

Web Audio APIで成功されてる方もいらっしゃるので、いける話ではあります。
↓↓↓
音楽の理論のページ




タグ:IT web 技術 数学

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

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) | ホームページ | このブログの読者になる | 更新情報をチェックする

2017年06月28日

円周率を33554433桁表示する 〜基本的な神秘に触れてみる〜

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




円周率$\pi$を表示するアプリケーションを作成しました。
↓↓↓
円周率$\pi$表示


Special Thanks to スーパーπでして、33554433桁を計算してくれます。

33554433桁というのは、小数点も1文字とすると、33554433+1文字になります。

もしくは、「3.」の後に33554433-1文字の数が続きます。

スーパー$\pi$は、当時42億桁計算できるアプリケーションを家庭のWindowsでも計算できるようにしたもので、3000万桁で公開したそうです。

なぜ33554433という数字かは不明ですが、大量ですね(・_・;)。






私が作成したアプリケーションはFC2サーバにアップしてあります。

無料版で使っているため、アップロードするファイルは全て1MB以下にする必要があります。

3000万桁の数字は3000万文字になり、1つのHTMLファイルに書くと、1MBはゆうに超えていきます。

そのため、円周率の一部を記した1MB以下のjsファイルをいくつも作り、それらを読み込んでJavaScriptで文字列連結して、円周率を表示しています。

この方法はFC2サーバならずとも有用な方法かも知れません。(再利用可能な部品が機能の種類ごとに細かく分割されている場合など)



ちなみに、円周率は円と直径の比です。 \[ 円周:直径=\pi:1 \]
円はまっすぐな平面に描かれた2次元の図形ですが、美や対称性の概念として有名です。

ある1点から等しい距離にある点の集合です。

このような概念は1次元では、2点となります。

3次元では球面となります。


1次元でいうところの2点は、線分(英語ではline segment)を2本つなげた端点となります。

3次元でいうところの球面も、その特徴的な量(面積、体積)に現れる数($\pi$)は2次元でいうところの円が元になっていると言っていいでしょう。

その根拠が、4次元、5次元、6次元、7次元、$\cdots$でも同様の$n$次元超球面を考えることができ、基本的なところが2次元でのそれから出発していると思われるからです。

その意味で、「円」周率が代表的な数学定数になっているのは納得かと思われます。

直交する他の次元も含めて等距離にある点の集合からなる空間の広がりを考えるときの量です。


円周率には超越数や無理数など様々な特徴がありますが、そんな身近なところにそういった数があるこの世は恵まれているかも知れません。




タグ:IT web 数学

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