読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

日経平均株価の下落ぶりをMIDIサウンドで味わう (コマンドラインでMIDI生成)

sound HTA 小ネタ WSH/JScript 作品 グラフ描画


ここ3か月の日経平均株価の下落ぶりをMIDIで表現した。

こちらからダウンロード
http://www.name-of-this-site.org/coding/midi/Kabuka.mid


最後の方で底辺を転げ落ちているのがわかる。



※これは,Yahoo!株価に掲載されている株価データの数値を,スクリプトでMIDIに変換したものです。

日経平均株価
http://table.yahoo.co.jp/t?s=998407&y=0&z=

株価を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.exe と同じフォルダに,上のスクリプトを設置。(kabuka.hta等の名前で保存)
  • 「変換」ボタンを押下するとMIDIが聞けます。

MuseはフリーのMIDIシーケンサ。

コマンドラインでMMLからMIDIをコンパイルすることもできる。

コマンドプロンプトから

muse musファイル名 *o