投稿者: nishimotz

  • 1998年とニコニコ動画

    「あの仕事はむかし誰々がやった仕事の真似だ」みたいな話はよく出てきます。あまり好きではないのですが、あえて私もそういうスタンスであの「ニコニコ動画」について考察してみることにしました。

    1998年のはじめごろ、電話の自動応答サービスで音声を録音して、ウェブサーバからそれを聴取できる、というサービスを知り、そのころ私が主宰していたメーリングリストのメンバーたちと「どんな遊びに使えるのか」と試していました。その途中でこんなことに気づきました。

    ある人によって録音された音声を別の人が再生しながら、それに「うん」「そうだね」などとコメントをする。そのやりとりを録音して、さらに別の人に聞いてもらう。そうすると、なんとなく「時間と空間を超えて会話が成り立った」ような感じがしたのです。

    その「感じ」を追い求めて、私は「非同期音声会議」の研究・開発を始めました。

    この仕事については続きがあり、特許(特願2000-37349 特開2001-230773 会議システム)も出願したのですが、審査請求に至りませんでした。システムも継続運用するには至りませんでした。

    その後、やっぱり「ウェブのフォームを埋めたりメールで連絡するよりも音声の方が手っ取り早いなあ」と思うことはますます多くなる今日この頃。

    そして、私が1998年に発表した「時間と空間を超える疑似リアルタイム性」は「ニコニコ動画」の字幕機能として世に受けいられていることを思い、今こそ「非同期通信+音声入力」で面白いことができる&便利なものが作れるのではないかなあ、と思っています。

  • 国際会議への参加

    1日から12日まで出張し、フランスのパリとオーストリアのリンツで行われた国際会議に参加してきました。メール対応が滞ってしまったことなど、皆様にご迷惑をかけたことをお詫びします。発表内容はここ何年か東京女子大学と共同で行ってきた視覚障害者支援技術に関する研究でした(西本の発表リスト)

    Acoustics ’08 Paris では私はポスター発表で早口音声の知覚に関する報告をしたところ、du Poux 先生のグループの研究(文献など)を教えていただいたり、Univ. Washington の Richard Wright 先生に興味を持って聞いていただくなど、貴重な情報を得ました。

    ICCHP 2008 Linz は障害者支援技術に関する隔年の国際会議で、私が幹事をやっている福祉情報工学研究会に近い雰囲気でした。私は視覚障害者と対面朗読者の対話についての発表をして、座長を含む何人かの視覚障害者にも聞いていただきました(論文へのリンク)。発表者はヘッドセットをつけて音声をストリーミング配信。他には国際手話言語の通訳つきセッションもありました(ストリーミングのページへのリンク)

    予稿集は約1300ページで、支援技術の実践的な事例、プロジェクト紹介、各国の行政の取り組みなど幅広い内容です。擬人化エージェントによる高齢者や知的障害者の支援、視覚障害者のための音楽教育、といった発表もありました。

    様々な場面でフランス語やドイツ語がわからなくて不便な思いをしました。一方で、観光地や料理店などでは日本語の看板をちらほら見かけました。書店では日本のコミックがたくさん売られていました。もっと世界中のことを考えて仕事をしなくてはいけないなあと改めて感じました。

    以上、今後の活動や研究に行かしていきたいと思います。

    • [追記 2008-07-15] ICCHPの論文へのリンク(Springer)を追加しました。
  • C++Builder 2007 でのウィンドウメッセージ処理

    エンバカデロによる買収が決まったCodeGearですが、個人的には応援しています。

    Delphi は使いやすく、情報も豊富なのですが、私はとっくに Pascal よりも C++ に慣れてしまったので、できれば C++ Builder をメインに使いたいところです。

    Delphi の参考書や資料の多くは VCL について説明しているので、そのノウハウのかなりの部分は使えます。

    しかし C++ Builder に固有の話題についての情報はとても少ないのが現状です。

    Windowsプログラミング逆引きクロス大辞典

    Windowsプログラミング逆引きクロス大辞典

    「Windowsプログラミング逆引きクロス大辞典」にはTurbo DelphiとTurbo C++というかたちで、VB6 や .Net との比較がなされています。

    Turbo C++はC++Builderだと思って読むことができるので、CodeGear RAD Studio 2007を使う上で重宝しそうです。

    Delphi で「メッセージメソッド」と呼ばれている機能の実現方法が今日やっとわかりました。忘れないように書いておきます。

    mciSendString を使って mp3 ファイルを再生して、再生終了のメッセージを MCI から受け取る例です。

    VCLフォームアプリケーションにボタンをひとつ貼り付けて、以下のように記述。

    mmsystem.h をインクルードしないと MM_MCINOTIFY が未定義になります。

    C:\tone_a.mp3 を用意してボタンを押すと、音声再生が終了したらメッセージボックスが表示されます。

    //---------------------------------------------------------------------------
    // Unit1.h
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    // by nishimotz
    #include <mmsystem.h>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE 管理のコンポーネント
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    private:	// ユーザー宣言
    void __fastcall MMMCINotify(TMessage &Msg);
    BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(MM_MCINOTIFY, TMessage, MMMCINotify)
    END_MESSAGE_MAP(TForm);
    public:		// ユーザー宣言
    __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    //---------------------------------------------------------------------------
    // Unit1.cpp
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    mciSendString("open \"c:\\tone_a.mp3\" type Mpegvideo alias mp3", NULL, 0, 0);
    mciSendString("play mp3 notify", NULL, 0, Form1->Handle);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MMMCINotify(TMessage &Msg)
    {
    ShowMessage("done.");
    mciSendString("close mp3", NULL, 0, 0);
    }
    

    END_MESSAGE_MAP(TForm) の後ろのセミコロンを忘れて、しばらくはまりました。

    VCL_MESSAGE_HANDLER に関する情報は RAD Studio のヘルプでも CodeGear のサイトでも見つけることができず、個人の方のウェブサイトを参考にさせていただきました。