日経平均株価の下落ぶりをMIDIサウンドで味わう (コマンドラインでMIDI生成)
ここ3か月の日経平均株価の下落ぶりをMIDIで表現した。
こちらからダウンロード
http://www.name-of-this-site.org/coding/midi/Kabuka.mid
最後の方で底辺を転げ落ちているのがわかる。
※これは,Yahoo!株価に掲載されている株価データの数値を,スクリプトでMIDIに変換したものです。
株価をMIDIデータに変換するために作ったスクリプト
スクリーンショット
ソースコードは下記の通り。
ここからHTA形式のファイルをダウンロードできる。
http://www.name-of-this-site.org/coding/midi/kabuka.hta
<html> <head> <title>Yahoo!株価の変動をMIDIに変換</title> </head> <body bgcolor="#ccddcc"> <center> <br> 株価データをコピー&ペーストして下さい。(<a href=http://table.yahoo.co.jp/t?s=998407&y=0&z=>こちらのページ</a>から) <br><br> <textarea rows=25 cols=100 id="txt_pasted"></textarea> <br><br> <input type="button" value=" MIDIに変換 " onclick="trans()"> <br><br> <!-- ここにリンクが生成されます --> <div id="div_mid"></div> </center> <script language="JavaScript"> function trans() { // 定数 var ForReading = 1; // 読み込み var ForWriting = 2; // 書き込み(上書き) var ForAppending = 8; // 書き込み(追記) //--------入力内容を解析---------- // 前処理 if( txt_pasted.innerText.length < 1 ) { alert( "株価を入力してください。" ); return; } else { div_mid.innerHTML = ""; } // 行に分ける var arr_pasted = txt_pasted.innerText .replace( "\r\n", "\n" ) .split( "\n" ) ; //alert( arr_pasted.length ); // 各行ごとに株価を保存 var arr_kabuka = []; var temp_num; for( var i = 0; i < arr_pasted.length; i ++ ) { temp_num = parseFloat( ( arr_pasted[ i ] .split( "\t" ) )[4] .replace( ",", "" ) ); if( temp_num > 0 ) { arr_kabuka.push( temp_num ); } } //alert( arr_kabuka.length ); //alert( arr_kabuka[ arr_kabuka.length - 1 ] ); //--------MUSデータ作成---------- // 最大値,最小値 var max; var min; max = min = arr_kabuka[ 0 ]; for( var i = 1; i < arr_kabuka.length; i ++ ) { if( max < arr_kabuka[ i ] ) { max = arr_kabuka[ i ]; } if( min > arr_kabuka[ i ] ) { min = arr_kabuka[ i ]; } } // 高低差 var diff = max - min + 1; // div0 防止 var one_step = diff / 35; // この高低差に,o5 c からo1 d の7×5=35段階を割り当てる var sounds = ["d","r","m","f","s","l","c"]; var str_musdata = ""; var now; var step_num; var octave; var onkai; for( var i = 0; i < arr_kabuka.length; i++ ) { now = arr_kabuka[ arr_kabuka.length - 1 - i ]; step_num = parseInt( ( now - min ) / one_step ); octave = Math.floor( step_num / 7 ) + 1; onkai = sounds[ step_num % 7 ]; str_musdata += "o" + octave + " " + onkai + "16 " ; } //--------MUSファイル書き込み---------- // 書き出し var base_name = "kabuka_temp"; var mus_name = base_name + ".mus"; var mid_name = base_name + ".mid"; var fs = new ActiveXObject( "Scripting.FileSystemObject" ); fs.createTextFile( mus_name ); var tw = fs.OpenTextFile( mus_name, ForWriting ); tw.WriteLine( "%150 P14 R80 V100" ); // 14:シロフォン // 109:カリンバ tw.WriteLine( str_musdata ); tw.close(); //alert( "MUSデータを書き出しました" ); // MIDI作成 fs.DeleteFile( mid_name ); var ws = new ActiveXObject("WScript.Shell"); ws.Exec( "muse " + mus_name + " *o" ); // 完成を通知 //alert( "変換しました" ); //div_mid.innerHTML = "<a href='" + base_name + ".mid'>MIDIを聞く</a>"; div_mid.innerHTML = '<OBJECT ID=sound1 CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" WIDTH=150 HEIGHT=45>' + '<param name="src" value="' + mid_name + '"><param name="PlayCount" value="1"><param name="ClickToPlay" value="true"><param name="ShowControls" value="true">' + '<param name="ShowAudioControls" value="true"><param name="ShowPositionControls" value="true"><param name="ShowTracker" value="true">' + '<param name="autostart" value="true"><param name="mute" value="false"><embed src="' + mid_name + '" type="application/x-mplayer2" ShowControls="1" ShowAudioControls="1" ShowPositionControls="1" ShowTracker="1"' + ' WIDTH=150 HEIGHT=45 AUTOSTART="1" PlayCount="1" ClickToPlay="1" mute="0"></OBJECT>' ; // WSHからの呼び出し // var fs = WScript.CreateObject( "Scripting.FileSystemObject" ); // HTAからの呼び出し // var fs = new ActiveXObject( "Scripting.FileSystemObject" ); // http://www2f.biglobe.ne.jp/~takan/javac/js/wsh/obj_fso.htm // objectタグ生成 // http://www.interq.or.jp/blue/inside/sourcemake/sourcemaker_w.html // 注:Yahoo サービス利用規約 // http://docs.yahoo.co.jp/docs/info/terms/ } </script> </body> </html>
使い方:
- Museをダウンロードしてインストールする。
- http://homepage3.nifty.com/~atomic/ -> [MUSE WORLD]
- muse.exe と同じフォルダに,上のスクリプトを設置。(kabuka.hta等の名前で保存)
- HTAファイルをダブルクリックで起動し,Yahooファイナンスから株価データをコピペ
- http://table.yahoo.co.jp/t?s=998407&y=0&z=
- 日経平均でなくてもOK
- 「変換」ボタンを押下するとMIDIが聞けます。
MuseはフリーのMIDIシーケンサ。
コマンドラインでMMLからMIDIをコンパイルすることもできる。
muse musファイル名 *o