日記 2009年2月

試験だー、逃げろー。

2月28日 土曜日

紅茶ばかり飲むせいで未だにインスタントコーヒーの粉末の適量がどれくらいなのか分からない。

JavaScriptで音声を再生する方法について

ゲーム作る上で音って大事だよね、ということで考えた結果をぐだぐだと。

JavaScriptにはデフォルトで音声を扱えるような機構がない。じゃあどうしようか、という話。

※サンプルコードのHTMLは最低限だけしか書いてないのでそのつもりで。

bgsound要素をDOMで弄る

HTMLの要素でbgsoundというのがあるので、これを弄って音を制御するという方法。

<script>
var sound = function(src){
  var bgsound = document.createElement("bgsound");
  bgsound.setAttribute("src", src);
  return{
    play:function(){
      document.body.appendChild(bgsound);
    },
    stop:function(){
      document.body.removeChild(bgsound);
    }
  }
}

var s = sound("sound.wav");
</script>
<body><input type="button" value="play" onclick="s.play();return false;">
<input type="button" value="stop" onclick="s.stop();return false;"></body>
長所
直感的。プラグインとかがいらない。
短所
IEしか対応していない(というかbgsound自体がIE独自要素)。bgsound自体はOperaも対応しているが、上記のコードでは制御できないっぽい。

embed要素をDOMで弄る

HTMLの要素でembedというのがあるので、これを弄って音を制御するという方法。bgsound要素の場合と似ているが設定する属性が違ったりする。

<script>
var sound = function(src){
  var embed = document.createElement("embed");
  embed.setAttribute("src", src);
  embed.setAttribute("hidden", true);
  embed.setAttribute("autostart", true);
  return{
    play:function(){
      document.body.appendChild(embed);
    },
    stop:function(){
      document.body.removeChild(embed);
    }
  }
}

var s = sound("sound.wav");
</script>
<body><input type="button" value="play" onclick="s.play();return false;">
<input type="button" value="stop" onclick="s.stop();return false;"></body>
長所
割とどのブラウザでも動く。
短所
QuickTimeプラグインのインストールが必要。ブラウザによってはタイムラグが大きい。

HTML5のaudio要素を弄る。

HTMLの次期仕様HTML5ではaudio要素という要素が新たに加わる。audioオブジェクトを弄って音声の再生ができる。

<script>
var s = new Audio("sound.wav");
</script>
<body><input type="button" value="play" onclick="s.play();return false;">
<input type="button" value="stop" onclick="s.stop();return false;"></body>
長所
シンプル。
短所
OperaとSafariしか対応していない。(Firefox3.1βも対応しているらしいが、上記のコードでは動かない。)

Flash経由で音声を再生する。

JavaScriptからFlash(ActionScript)の関数を利用できるので、あらかじめ音声制御用のFlashを作っておいてJavaScriptで操作するといったことが可能である。実際のコードとかはJavaScriptでMP3を再生するライブラリの作り方:CodeZineを参照されたし。

長所
どのブラウザでも大概動く。Flashにあらかじめ音声ファイルを埋め込んでおけばタイムラグも結構小さくなる(はず)
短所
Flash Playerプラグインのインストールが必要。ローカルでのテストがめんどいかも。最初からActionScriptでゲーム作れよ、という話になる。

現時点で一番妥当なのはFlash経由で再生する方法かな。こういうところで他力本願になってしまうのがJavaScriptの悲しい運命か・・・。

2月27日 金曜日

PC部で群れて来た。カオスここに極まる。

JS東方(JavaScriptで洋的な弾幕シューティングゲームを作る針で)

GoogleChromeで動作中

割と弾幕ゲーっぽい感じになってきた・・・と思う。

IE非推奨。FPS一桁ほぼ確実。canvas要素にデフォルトで対応していない都合で描画に時間を食うのが大きいと思う。

推奨ブラウザはGoogle Chrome、Safari。FirefoxとOperaはやや重い。描画エンジンの違いが大きいのだろうか。

2月22日 日曜日

町田行って散髪したり例大祭のカタログ買ったり東方怪綺談のサントラ買ったり。

JS東方。弾の管理を配列から連結リストに変えたらバグったorz

処理の軽減の点でリストの導入は譲れないところなのだが、バグの原因がどの辺なのか見当がつかない・・・。

2月21日 土曜日

東方紅魔郷購入。あふれ出るカリスマとやらに会いたくなったので。

一ヶ月ほど放置していたJS東方の開発を再開。いつエターなるかもわからんが。

2月20日 金曜日

試験もとりあえず無難(?)に終了し、春休みに突入して正午起床、日がなニコ動といった具合に堕落の限りを尽くした生活を送っている次第です。家から一歩も出ないと日記のネタに困るよね。

脈絡もなく落書き。

笑い腋巫女

顔がうまく描けなかったんで視覚素子をハッキング攻殻ネタでごまかす。正直ごまかせてない。

2月16日 月曜日

今日が私の誕生日だということにメールで言われて気づいた。

ということで19歳になった。とうとう東方夢時空の岡崎夢美教授よりも年上になってしまったのか、とニッチ志向な感慨にふける。

誕生日プレゼントは転類の承認が欲しいです、教授。

今日は英語の試験。うちのクラスは当たりだったらしく、無難に終了。

明日は物理(電磁気学)。うぼぁ。

2月15日 日曜日

ネタができたので更新。

地霊殿Extra出現。わぁい!

買ってから1ヶ月以上立ったのか・・・。

2月14日 土曜日

ひさびさの更新。正直ネタがない。

試験残り二科目。電磁気学つらい・・・。

正直転類できるかどうか怪しい。うぼぁ。

ネタが無ければ作ればいいじゃないということでJavaScriptでゴリッと。

document.body
  .appendChild(document.createElement("table"))
    .appendChild(document.createElement("tbody"))
      .appendChild(document.createElement("tr"))
        .appendChild(document.createElement("td"))
          .appendChild(document.createTextNode("foolish"))
          .parentNode
        .parentNode
        .appendChild(document.createElement("td"))
          .appendChild(document.createTextNode("table"))
          .parentNode
        .parentNode
      .parentNode
      .appendChild(document.createElement("tr"))
        .appendChild(document.createElement("td"))
          .appendChild(document.createTextNode("creation"))
          .parentNode
        .parentNode
        .appendChild(document.createElement("td"))
          .appendChild(document.createTextNode("by DOM"));

汚いけどキレイ、みたいな。チェインおいしいです。

2月8日 日曜日

XSLTでBrainf*ckを実装できないかと考えてみたが、挫折。XSLTの変数って初期化した後変更できないんだね。それって定数では・・・。

じゃぁ変数を使わない言語だったら実装できるんじゃね?ということで関数型言語の実装を考え中。Unlamdaとか純Lispとかならできるんじゃないかと。ただ、まず関数型言語の文法を理解するのがきつい・・・。

ところで、XSLT自体が関数型言語っぽいという見方もあるらしい。へぇ。さらに言うとJavaScriptも関数型言語寄りな見方があるとか。JavaScriptはCの皮を被ったLispなんだそうで。

試験終わったらLispをもう一回勉強してみるか。・・・どこまでモチベが持つかね。

2月7日 土曜日

お絵描き。試験期間中ですよー。

行け、ファンネル!!

フランのアレってファンネルだよね。

なんだかんだで6〜7時間かかった。絵師としての適性はなさそうだ。足とか脚がうまく描けん。

2月1日 日曜日

鬱ですよー。

と、言わせたいがためにお絵描き。

鬱ですよー

描いたあとになって羽の仕様が違うことを知った。だらしねぇな。ついでに言うと髪のリボン書き忘れた。仕方ないね。

かれこれ二週間近く日記放置。別に特別忙しかった訳でもなくただネタがなかっただけです。アサヒるという手もあったがw

今週から本格的に期末試験期間に入るんで多分更新頻度は改善しないです。俺、この試験終わったら転類するんだ・・・。