2014-09-26

9月終了番組

忙しさにかまけて切りに切りまくった今期ですが、最後まで見て面白かったなと思ったのは次の三つでしょうか。

  • グラスリップ
  • 月刊少女 野崎くん
  • ベイビーステップ

グラスリップは、一話を見たときは良くあるテキトーな青春グループ恋愛もの(誰と誰がくっつくか、というだけで延々話を消費してこれといって中身がないもの)なのかなと思ってスルーしかけたのですが、意外と中身がありました。

野崎くんは、「千代ちゃんかわいい」というだけですね。ええ。……いや、コメディなので、色々と可笑しかったです。

ベイビーステップは、勉強が得意な主人公が真面目に考えながらテニスに打ち込む話です。スポーツものとしてはちょっと変わってますよね。

2014-08-29

指定したディレクトリ下にあるwavファイルの合計時間(python)

wavファイルの合計時間が欲しかったのだけどsoxとかではあんまりうまく出来ないみたいなので自分で書いてみた。バイナリファイルの処理なので、なんとなくPython。

import sys
import os
import struct
import fractions

if len(sys.argv) != 2:
    print "Usage: python %s <directory>" % sys.argv[0]
    quit()

dir = sys.argv[1]
files = [y for y in [os.path.join(dir, x) for x in os.listdir(dir)] if os.path.isfile(y) and os.path.splitext(y)[1].upper()==".WAV"]

totalSeconds = fractions.Fraction()
for file in files:
    print file
    f = open(file, 'rb')
    riff = f.read(4)
    if riff == "RIFF":
        riffSize, riffType = struct.unpack('<I4s', f.read(8))

        samplesPerSec = 0
        blockSize = 0
        while True:
            chunkType,chunkSize = struct.unpack('<4sI', f.read(8))

            if chunkType == "fmt ":
                formatId,channels,samplesPerSec,bytesPerSec,blockSize,bitsPerSample = struct.unpack('<HHIIHH', f.read(chunkSize))
            elif chunkType == "data":
                totalSeconds += fractions.Fraction(chunkSize / blockSize, samplesPerSec)
                break
            else:
                f.seek(chunkSize, os.SEEK_CUR)

    f.close()

print "totalSeconds " + str(float(totalSeconds))
print "totalMinutes " + str(float(totalSeconds / 60))

なんて書いてみたら、後からwaveライブラリなんてものがあることに気がついたorz。

import wave
w = wave.open("a.wav")
w.getframerate()
w.getnframes()

みたいな感じでサンプリングレートとサンプル数が取得できるんだって。

2014-07-20

2014-07夏の新番組

とりあえず一通り見終わりました。

  • △MX :07/02(水) 23:30~ 幕末Rock
  • ○MX :07/02(水) 24:00~ Free! - Eternal Summer
  • △MX :07/03(木) 22:30~ グラスリップ
  • △MX :07/03(木) 23:00~ 白銀の意思 アルジェヴォルン
  • △MX :07/03(木) 24:00~ 東京喰種トーキョーグール
  • △TBS:07/03(木) 25:46~ RAIL WARS!
  • △TBS:07/03(木) 26:26~ 普通の女子校生が【ろこどる】やってみた。
  • △TX :07/05(土) 10:00~ プリパラ
  • △MX :07/05(土) 24:00~ ALDNOAH ZERO
  • △MX :07/05(土) 25:00~ 少年ハリウッド
  • ○NTV:07/05(土) 26:35~ ばらかもん
  • △MX :07/06(日) 22:00~ 人生相談テレビアニメーション「人生」
  • -MX :07/06(日) 22:30~ さばげぶっ!
  • △MX :07/06(日) 23:00~ スペース☆ダンディ シーズン2
  • ○MX :07/06(日) 24:00~ アカメが斬る!
  • △TX :07/06(日) 25:10~ 月刊少女 野崎くん
  • ×TX :07/06(日) 25:40~ DRAMAtical Murder ドラマティカルマーダー
  • ×TX :07/06(日) 26:40~ 闇芝居 新シリーズ
  • ○MX :07/07(月) 24:00~ アオハライド
  • ○TX :07/07(月) 25:35~ ハナヤマタ
  • -TX :07/07(月) 26:05~ Re :␣ハマトラ
  • △MX :07/08(火) 24:30~ モモキュンソード
  • ○MX :07/09(水) 22:00~ ヤマノススメ セカンドシーズン
  • ×MX :07/09(水) 24:30~ まじもじるるも
  • ○MX :07/09(水) 25:05~ LOVE STAGE!!
  • ○CX :07/10(木) 25:10~ 残響のテロル
  • ○CX :07/10(木) 25:40~ PSYCHO-PASS サイコパス 新編集版
  • △MX :07/11(金) 25:35~ 六畳間の侵略者!?
  • △MX :07/11(金) 25:35~ 東京ESP
  • △CX :07/11(金) 26:10~ 信長協奏曲 -のぶながコンツェルト-
  • △TBS:07/11(金) 26:35~ 黒執事 Book of Circus
  • ×MX :07/14(月) 24:30~ 精霊使いの剣舞

第一話の段階で特に目を引いたものはありませんでした。

2014-06-30

伊藤園の緑茶ティーバッグ

最近、伊藤園の緑茶のティーバッグを色々試しています。これまでに次の三種類を飲みました。

どれも十分美味しいと思います。味の評価としては、

深蒸し=ぞっこん>抹茶入り

という感じですね。価格相応です。

抹茶入りは伊右衛門みたいな味がします。いかにも抹茶でごまかされたという感じがしてしまいますが、安いことを考えれば妥当かもしれません。

ぞっこんは最近ペットボトルのおまけでティーバッグが付いていたので、飲んだ方も多いと思います。とにかくまろやかさを前面に出したような味ですね。

深蒸しはちゃんと深蒸し茶っぽい香りと味がします。綺麗な緑色、強い甘みと弱めだが確かに感じる渋みのバランス。

どれを買っても後悔はしないと思います。

個人的にはやっぱり普段から飲み慣れている深蒸し茶が好きかなぁ。

深蒸しだと20袋で36gと書いてますね。お茶屋さんで1000円/100gくらいで買った方が安いのですが、いつも全部飲みきる前に悪くなってしまうので、それを考えるとそんなに高くはないのかも。

2014-06-22

白と黒のとびら: オートマトンと形式言語をめぐる冒険

Amazonで見かけて最初の数ページ読んでみて、続きが気になったので購入しました。

白と黒のとびら: オートマトンと形式言語をめぐる冒険

なかなか読ませるじゃないですか。ちゃんと魔法使いの弟子の成長物語になっています。最後まで一気に読んでしまいました。

物語中では「オートマトン」とかその手の専門用語は極力出てこないようになっていて、物語中の設定に従った用語に置き換えられています。
なので知識の無い人でも小難しい単語に翻弄されることはありません。
一応巻末で物語中に出てきた概念と計算理論での概念との対応付けや、それについて詳しく学びたい場合の参考文献が紹介されています。
私はこのあたりの理論は大学や独学で少しかじったり、プログラミング言語などを製作する上で必要な部分を多少知っていたりするだけですが、物語を読みながら「ああ、これはε遷移のことを言ってるんだな」とか記憶を呼び起こされながら読みました。
でもそういう知識が無くても普通に物語として読めるのでは無いかと思います。

後半になるにつれて少し難しくなっていきますが、そういう所は適当に流して読んでも問題ないと思います。
時間があれば、主人公が直面する問題について一緒に解きながら読んでみても面白いかもしれません。

この手の抽象的な理論は、身近な応用と結びつけるとより分かりやすくなると思うのですが、そういった例は自動販売機の例くらいでしょうか。
そういう例がもっとあると、読んだ後にもっとスッキリするのかなぁと思いました。

少し疑問に思ったのは、偽クフ語と万能機械について。偽クフ語の詩集は万能機械に入れる命令を表しているということだと思うのですが、それは偽クフ語をそのまま万能機械に入力すると言うことなのでしょうか。万能機械は、入力された偽クフ語を構文解析して実行する? 
偽クフ語は、作中において手作業で解析をしていましたが、字句の区切りを見つけるのが難しく、また、かなり曖昧な部分が出る言語です。
なので、実際に万能機械を作るとしたら、どのようになるのだろうというのが気になりました。
おそらく命令として有効な文にはさらなる制約があるのでしょうね。

2014-06-11 ,

HTML5 Audio要素の使い方(JavaScript)

JavaScriptでHTML5のAudio要素を使う方法について、軽くおさらいします。

仕様書:

WHATWGの最新
4.7.6 The audio element — WHATWG HTML Living Standard — Last Updated 9 June 2014
W3Cの最新
4.7.7 The audio element — HTML 5.1 Nightly A vocabulary and associated APIs for HTML and XHTML Editor's Draft 10 June 2014
W3CのCR
4.8.7 The audio element — HTML5 A vocabulary and associated APIs for HTML and XHTML W3C Candidate Recommendation 17 December 2012

WHATWGとW3Cの関係とかバージョン違いとかありますが、リンク先が変わってしまうと嫌なので以下ではW3CのCRへリンクします。

[NamedConstructor=Audio(),
 NamedConstructor=Audio(DOMString src)]
interface HTMLAudioElement : HTMLMediaElement {};

DOM的には new Audio(url) (urlは省略可能)という形で HTMLAudioElement というインタフェースを持つオブジェクトを生成できます(他にもdocument.createElement("audio")という形で生成できたりもします)。

HTMLAudioElementインタフェースはHTMLMediaElementを継承しただけのものなので、具体的な中身(メソッドやプロパティ)についてはそちらを参照します。

Audioの場合、基本的な使い方は次のようになるでしょうか。

  1. audio = new Audio() または new Audio(url) または document.createElement("audio")
  2. audio.preload = "none" または "metadata" または "auto" (デフォルトはauto) 4.8.10.5 Loading the media resource
  3. audio.src = url または source1 = document.createElement("source"); source1.src = url; source1.type = 'audio/ogg; codecs="vorbis"'; audio.appendChild(source1) (どのリソースが使われるかはresource selection algorithmを参照)
  4. audio.load() //ロード(不要なことも多い) (media element load algorithm)
  5. audio.addEventListener("loadedmetadata", function(e){ alert("長さは" + audio.duration + "秒です。");}, false); 4.8.10.6 Offsets into the media resource
  6. audio.play(); //currentTimeの位置から再生(audio.autoplay次第では不要)(audio.endedのときだけは最初から再生になるので注意)
  7. audio.pause(); //currentTimeの位置で停止
  8. audio.currentTime = audio.duration / 2; //半分の所へシーク
  9. audio.volume = 0.5; //音量
  10. audio.playbackRate = 2.0; //倍速再生
  11. audio.loop = true; //ループ再生(終端に到達したら最初から)
  12. audio.muted = true; //ミュート
  13. alert(audio.paused ? "停止中" : "再生中");
  14. if(audio.error != null){alert("エラーコード:" + audio.error.code);} 4.8.10.1 Error codes
  15. audio.src = "";

部分的なループは難しそうです。厳密でなくても良いのならtimeupdateイベントを使ってできると思います。

イベントの一覧については 4.8.10.16 Event summary に書いてあります。

仕様書を読んでみるともっと詳しく面白いこと書いてあります。

2014-06-10

シドニアの騎士OP

シドニアの騎士面白いよねー。というわけでOPのCD購入。

少し変わった構成の曲ですよね。最初は軍歌っぽい部分がイモっぽいなぁと思っていたのですが、カッコいい部分もあって何度も聞いているうちにやみつきになりました。

私も「もぅそぅシドニッアッ」と聞こえた口ですが、歌詞カードを見てはじめてなんと言っているのか知りました。うーん、まぁ、納得。

何となくヒロイックエイジのOPを思い出したり。歌い手と宇宙ものというくらいしか共通点はありませんが。