« 2008年3月 | トップページ | 2008年5月 »

MIKU_TALK 使用コンテンツについて

MIKU_TALK を使用いただいているコンテンツを紹介します。

こちらは、宮沢賢治の「注文の多い料理店」の序章を喋らせているというもので、噂のMikuMikuDanceの3D画像と同期させています。流石です、MikuMikuDance の使いこなしテクニックをもう少し詳細に書いて欲しいかも・・・(笑)。

こちらは、「miku_talk012.plをexe化してGUIをつけてみた」のコンテンツです。mod_perl を使って GUI化して使いやすくしていただいています。これを見て、miku_talk20.pl を早く公開せねばと思いました。ちょっとソースコードを触ってマイナーなバグを潰してから公開しますのでお待ちください。

こちらは「初音ミクでゆっくりしていってね!!!」というコンテンツです。そういえば、自分も2chで有名な「吉野家コピペ」や「ここはひどいインターネッツですね」とかを喋らせてみたことがあります。何かミクに喋らせるのに適当なコピペがありましたらトライしてみてください。

| | コメント (0) | トラックバック (0)

ヤマハ株式会社・組込み信号処理ソフトウェア開発<研究・開発部門>

ヤマハ株式会社が組込み信号処理ソフトウェア開発者の求人を掛けています。
http://rikunabi-next.yahoo.co.jp/rnc/docs/cp_s01800.jsp?rqmt_id=0005554945

この求人の要旨を引用します。

仕事の内容    
高品位な事業・製品を創出するための信号処理技術の研究・開発

      
【具体的には】
●組込み信号処理ソフトウェア開発
●DSPアルゴリズム開発など

対象となる方
工学系・理学系大卒以上

      
【具体的には】
●いずれかの分野における業務(応用技術開発、製品開発、設計)経験をお持ちの方
組込みソフトウェア
デジタル信号処理(デジタルフィルタ・フーリエ変換など)
オーディオ・楽音信号処理技術
センサー情報処理
音声通信技術
超音波応用
※新しい技術の発想や発明に積極的で、特許としてまとめる能力をお持ちの方は、特に歓迎いたします。

仕事の内容が「信号処理技術」で、具体的には組込み信号処理等とすると、恐らくヤマハ MA-7シリーズの後継LSI(MA-9?) の開発ではないかと推定します。
http://smaf-yamaha.com/jp/what/soundchip_ma7.html

現在のMA-7の機能に加えて欲しい機能は、「VSQファイルを入力すると音声化する機能」「音声を入力するとVSQファイルに変換する機能」「メールの読上機能」「日本語音声の自動テキスト化」などです。VSQファイルの音声化機能を付けたら、MA-9 ではなく、LSI-VOCALOID2 と銘打って発売して欲しいと思いました。この求人に応募された方はご参考になさってください。

追記:ネットワーク常時接続の携帯電話が普及したならば、VSQファイルの音声化はLSI上の信号処理ではなく、WEB-APIを使っても可能ですね。ちょっと頭が固かったようです。

| | コメント (0) | トラックバック (0)

短答の季節

 このところ、朝の通勤電車内で弁理士短答式筆記試験の問題を広げて解いている人を見かけました。LECのバインダー式の問題集なんで、おそらく「短答実戦答練」の問題じゃないかと思いますす。今年の短答本試験まで、あと1月ちょっとしか無いんですね。
 バインダーを横から見て「3枝目が×」と判断したら、裏の答えも3枝目が×だったので、自分はまだちゃんと条文を覚えているなと思い、ホッとしました。
 通勤時間も惜しんでがんばって勉強されている方々には、是非とも受かって欲しいものです。

| | コメント (2) | トラックバック (0)

改造後の iPod mini その後

720mAH の充電池及び16GB CFカードに換装した iPod mini ですが、満充電でどのくらい連続再生できるか試してみました。再生する音楽は MP3 96Kbps です。

 1回目は2週間くらい前でした。11時間半くらいは連続再生できました。電池メーターは凡そリニアに変化してゆきました。結構正しく表示するものだと感心した覚えがあります。
 2回目は昨日に行いました。何故か7時間半くらいしか持ちませんでしたが、いわゆる電池のメモリー効果のせいかな? 毎日充電していたので、ちょっと電池がへたったのかもしれません。
 この iPod mini は第一世代なのですが、第二世代だと20時間くらい持つという噂がありますが本当でしょうか、だとすると第二世代の価値はかなり高いと思います。
 なお、第一世代は背面に容量の刻印が無いですが、第二世代は「4G」などのように容量の刻印があり、かつクリックホイールのマークが本体色と同一になっています。

| | コメント (0) | トラックバック (0)

MIKU_TALK 0.2.0 ソース (形態素解析パート)

 MIKU_TALK Ver. 0.2.0 の形態素解析パート ActionScript 3.0 のコードを貼ります。Flex SDK 2.0 でコンパイル可能です。ただし"(アプリケーションID)"の部分は、各自 Yahoo にアプリケーションIDを申請の上で、そのID文字列を入力する必要があります。

Yahoo! 形態素解析サービスをWEBアプリケーションで使うときのサンプルとしてお使いください。

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="init()">
<mx:Script>
  <![CDATA[
  import mx.controls.Alert;
  import flash.net.*;
//import flash.external.*;
  import mx.rpc.events.FaultEvent;
  import mx.rpc.events.ResultEvent;

  private var loader:URLLoader;
  default xml namespace = new Namespace("urn:yahoo:jp:jlp");

  private function init():void
  {
   write_sample();
  }

  private function request():void
  {
   yahoo_ma.text = "";

   if( sentence.text.length == 0 ) {
    Alert.show('自然文が入力されていません', 'Message');
    return;
   }
   if( 2000 <= sentence.text.length ) {
    Alert.show('自然文が2000文字を超えています'
    + sentence.text.length, 'Message');
    return;
   }

   var variables:Object = new Object();
   // variables.appid = "miku_talker";
   variables.sentence = sentence.text;
   yahoo_ma_service.send(variables);
  }

  private function delete_parenthesis():void
  {
   var work_sentence:String = "";
   var c:String = "";
   var isParenthesis:Number = 0;

   for(var i:Number=0; i<sentence.text.length; i++){
    c = sentence.text.charAt(i);
    if( c == "(" || c == "(" ) {
     isParenthesis++;
    } else {
     if( c == ")" || c == ")" ) {
      if( 0 < isParenthesis ) {
       isParenthesis--;
      }
     } else {
      if( isParenthesis == 0 ) {
       work_sentence += c;
      }
     }
    }
   }
   sentence.text = work_sentence;
  }

  private function setResponse(event:ResultEvent):void
  {
   var response:XML = yahoo_ma_service.lastResult as XML;
   var total_count:Number = response.ma_result.total_count;
   var filtered_count:Number = response.ma_result.filtered_count;

   for(var i:Number=0; i<total_count; i++){
    var surface:String   = response.ma_result.word_list.word[i].surface;
    var pos:String       = response.ma_result.word_list.word[i].pos;
    var reading:String   = response.ma_result.word_list.word[i].reading;
    var pronounce:String = reading;

    if( "0".charCodeAt(0) <= reading.charCodeAt(0)
    && reading.charCodeAt(0) <= "9".charCodeAt(0) ) {
     pronounce = pronounce_number(reading);
    } else {
     pronounce = pronounce_alphabet(reading);
    }
    if( pos == "助詞" ) {
     if( reading == "へ" ) {
      pronounce = "え";
     }
     if( reading == "は" ) {
      pronounce = "わ";
     }
    }
    if( pos == "名詞" ) {
     if( surface.charAt(0) == "・"
     ||  surface.charAt(0) == "…" ) {
      reading   = surface;
      pronounce = surface;
     }
    }
    pronounce = pronounce_tyouon(pronounce);
    yahoo_ma.text += surface + "\t"
        + pos       + ",,,,,,,"
        + reading   + ","
        + pronounce + "\n";
   }
  }

  private function pronounce_number(reading:String):String
  {
   var pronounce:String = "";
   var currentFigure:Number = reading.length;
   var pronounceFigure:Number = 1;

   if( currentFigure > 17 ) return "よめない";

   for(var i:Number = 0; i<reading.length; i++,currentFigure--) {
    if( reading.charAt(i) == "0" ) {
     if( reading.length == 1 ) pronounce += "ぜろ";
    }
    if( reading.charAt(i) == "1" ) {
     if( currentFigure % 4 == 1 ) pronounce += "いち";
     if( currentFigure % 4 == 0
     && 4 < currentFigure ) pronounce += "いっ";
    }
    if( reading.charAt(i) == "2" ) pronounce += "に";
    if( reading.charAt(i) == "3" ) pronounce += "さん";
    if( reading.charAt(i) == "4" ) pronounce += "よん";
    if( reading.charAt(i) == "5" ) pronounce += "ご";
    if( reading.charAt(i) == "6" ) pronounce += "ろく";
    if( reading.charAt(i) == "7" ) pronounce += "しち";
    if( reading.charAt(i) == "8" ) pronounce += "はち";
    if( reading.charAt(i) == "9" ) pronounce += "きゅう";

    if( reading.charAt(i) != "0" ) {
     if( currentFigure % 4 == 2 ) {
      pronounce += "じゅう";
      pronounceFigure = 1;
     }
     if( currentFigure % 4 == 3 ) {
      pronounce += "ひゃく";
      pronounceFigure = 1;
     }
     if( currentFigure % 4 == 0 ) {
      pronounce += "せん";
      pronounceFigure = 1;
     }
    }
    if( currentFigure ==  5 && pronounceFigure == 1 ) {
     pronounce += "まん";
     pronounceFigure = 0;
    }
    if( currentFigure ==  9 && pronounceFigure == 1 ) {
     pronounce += "おく";
     pronounceFigure = 0;
    }
    if( currentFigure == 13 && pronounceFigure == 1 ) {
     pronounce += "ちょう";
     pronounceFigure = 0;
    }
   }
   return pronounce;
  }
  private function pronounce_tyouon(pronounce_in:String):String
  {
   var pronounce:String = "";
   var a_gyou:String = "あかさたなはまやらわがざだばぱゃ";
   var i_gyou:String = "いきしちにひみりぎじぢびぴ";
   var u_gyou:String = "うくすつぬふむゆるぐずづぶぷゅ";
   var e_gyou:String = "えけせてねへめれげぜでべぺ";
   var o_gyou:String = "おこそとのほもよろをごぞどぼぽょ";

   if( pronounce_in.length==0 ) {
    return pronounce;
   }
   pronounce = pronounce_in.charAt(0);
   for(var i:Number = 1; i<pronounce_in.length; i++) {
    var c0:String = pronounce_in.charAt(i-1);
    var c1:String = pronounce_in.charAt(i);

    if((0 <= a_gyou.indexOf(c0,0) && c1 == "あ")
    || (0 <= i_gyou.indexOf(c0,0) && c1 == "い")
    || (0 <= u_gyou.indexOf(c0,0) && c1 == "う")
    || (0 <= u_gyou.indexOf(c0,0) && c1 == "お")
    || (0 <= e_gyou.indexOf(c0,0) && c1 == "い")
    || (0 <= e_gyou.indexOf(c0,0) && c1 == "え")
    || (0 <= o_gyou.indexOf(c0,0) && c1 == "う")
    || (0 <= o_gyou.indexOf(c0,0) && c1 == "お")) {
     pronounce += "ー";
    } else {
     pronounce += c1;
    }
   }
   return pronounce;
  }

  private function pronounce_alphabet(reading:String):String
  {
   var pronounce:String = "";

   for(var i:Number = 0; i<reading.length; i++) {
    var c:String = reading.charAt(i);
    var cOut:String = "";

    if( c == "A" || c=="A" || c=="a" || c=="a" ) cOut = "えい";
    if( c == "B" || c=="B" || c=="b" || c=="b" ) cOut = "びい";
    if( c == "C" || c=="C" || c=="c" || c=="c" ) cOut = "しい";
    if( c == "D" || c=="D" || c=="d" || c=="d" ) cOut = "でえ";
    if( c == "E" || c=="E" || c=="e" || c=="e" ) cOut = "いい";
    if( c == "F" || c=="F" || c=="f" || c=="f" ) cOut = "えふ";
    if( c == "G" || c=="G" || c=="g" || c=="g" ) cOut = "じい";
    if( c == "H" || c=="H" || c=="h" || c=="h" ) cOut = "えいち";
    if( c == "I" || c=="I" || c=="i" || c=="i" ) cOut = "あい";
    if( c == "J" || c=="J" || c=="j" || c=="j" ) cOut = "じぇい";
    if( c == "K" || c=="K" || c=="k" || c=="k" ) cOut = "けい";
    if( c == "L" || c=="L" || c=="l" || c=="l" ) cOut = "える";
    if( c == "M" || c=="M" || c=="m" || c=="m" ) cOut = "えむ";
    if( c == "N" || c=="N" || c=="n" || c=="n" ) cOut = "えぬ";
    if( c == "O" || c=="O" || c=="o" || c=="o" ) cOut = "おお";
    if( c == "P" || c=="P" || c=="p" || c=="p" ) cOut = "ぴい";
    if( c == "Q" || c=="Q" || c=="q" || c=="q" ) cOut = "きゅう";
    if( c == "R" || c=="R" || c=="r" || c=="r" ) cOut = "あある";
    if( c == "S" || c=="S" || c=="s" || c=="s" ) cOut = "えす";
    if( c == "T" || c=="T" || c=="t" || c=="t" ) cOut = "てい";
    if( c == "U" || c=="U" || c=="u" || c=="u" ) cOut = "ゆう";
    if( c == "V" || c=="V" || c=="v" || c=="v" ) cOut = "ぶい";
    if( c == "W" || c=="W" || c=="w" || c=="w" ) cOut = "だぶりゅ";
    if( c == "X" || c=="X" || c=="x" || c=="x" ) cOut = "えっくす";
    if( c == "Y" || c=="Y" || c=="y" || c=="y" ) cOut = "わい";
    if( c == "Z" || c=="Z" || c=="z" || c=="z" ) cOut = "ぜっと";
    if( c == "%" || c=="%" ) cOut = "ぱーせんと";
    if( c == "#" || c=="#" ) cOut = "しゃーぷ";
    if( c == "@" || c=="@" ) cOut = "あっと";
    if( c == "\\"|| c=="¥" ) cOut = "えん";
    if( c == "$" || c=="$" ) cOut = "どる";
    if( c == "&" || c=="&" ) cOut = "あんど";
    if( cOut == "" ) cOut = c;
    pronounce += cOut;
   }
   return pronounce;
  }

  private function error(event:FaultEvent):void
  {
   yahoo_ma.text = event.toString();
  }

  private function clear_sentence():void
  {
   sentence.text = "";
  }

  private function write_sample():void
  {
   sentence.text = "今日の天気は、一日中晴れ。";
  }

  private function clear_yahoo_ma():void
  {
   yahoo_ma.text = "";
  }

  private function submitCgi():void
  {
   if( yahoo_ma.text.length == 0 ) {
    Alert.show('形態素が入力されていません', 'Message');
    return;
   }
   var mylines:Number = 0;
   for(var i:Number = 0; i<yahoo_ma.text.length; i++) {
    var c:String = yahoo_ma.text.charAt(i);
    if( c == "\n" ) mylines++;
   }
   if( 1200 <= mylines ) {
    Alert.show('形態素が1200個を超えています', 'Message');
    return;
   }
   var myVars:URLVariables = new URLVariables();
   myVars.myText1 = yahoo_ma.text;
   myVars.debug   = "0";

   var myReq:URLRequest = new URLRequest();
   myReq.url = "../cgi-bin/miku_talk/miku_talk020.cgi";
   myReq.data = myVars;
   myReq.method = "POST";
   navigateToURL(myReq,"_top");
  }
]]>
</mx:Script>

<mx:HTTPService id="yahoo_ma_service"
  url="http://api.jlp.yahoo.co.jp/MAService/V1/parse?appid=(アプリケーションID)"
  method="POST" resultFormat="e4x"
  result="setResponse(event)"
  fault="error(event)">
</mx:HTTPService>

<mx:Panel title="自然文を元に形態素解析  MIKU_TALK Ver. 0.2.0"
width="100%" height="50%" id="main_panel" layout="vertical">
  <mx:HBox width="100%" height="85%">
   <mx:Label text="自然文"/>
   <mx:TextArea id="sentence" width="100%" height="100%" backgroundColor="#EEFFEE" wordWrap="true">
    <mx:text></mx:text>
   </mx:TextArea>
  </mx:HBox>
<mx:HBox width="100%" height="15%">
  <mx:Button label="形態素解析" click="request()"/>
  <mx:Button label="括弧削除" click="delete_parenthesis()"/>
  <mx:Button label="消去" click="clear_sentence()"/>
  <mx:Button label="例文" click="write_sample()"/>
</mx:HBox>
</mx:Panel>
<mx:Panel title="形態素を元にVSQ生成" width="100%" height="50%" id="sub_panel" layout="vertical">
  <mx:HBox width="100%" height="85%">
   <mx:Label text="形態素"/>
   <mx:TextArea id="yahoo_ma" width="100%" height="100%" backgroundColor="#EEFFEE" wordWrap="true">
    <mx:text></mx:text>
   </mx:TextArea>
  </mx:HBox>
   <mx:HBox width="100%" height="15%">
    <mx:Button label="VSQ生成" click="submitCgi()"/>
    <mx:Button label="消去" click="clear_yahoo_ma()"/>
   </mx:HBox>
</mx:Panel>
</mx:Application>

関数について解説します。

private function init():void
このswfファイルが起動したときに呼び出され、例文 "今日の天気は一日中晴れ" を自然文入力部分に設定しています。

private function request():void
形態素解析ボタンを押したとき、Yahoo! 形態素解析サービスで、自然文を形態素に解析します。

private function delete_parenthesis():void
括弧を削除します。

private function setResponse(event:ResultEvent):void
形態素解析サービスの処理の後に呼び出され、XML形式をCSV形式に変換します。

private function pronounce_number(reading:String):String
数字を平仮名で読みます。

private function pronounce_tyouon(pronounce_in:String):String
長音で発音する平仮名文字列を検出します。
(ぼおかろいど→ぼーかろいど)

private function pronounce_alphabet(reading:String):String
アルファベットを平仮名で読みます。

private function error(event:FaultEvent):void
形態素解析のエラーのときの処理です。

private function clear_sentence():void
自然文入力部をクリアします。

private function write_sample():void
自然文入力部に例文を入力します。

private function clear_yahoo_ma():void
形態素解析部をクリアします。

private function submitCgi():void
形態素解析部をCGIに渡します。

| | コメント (0) | トラックバック (0)

ソフトウエア実験室(MIKU_TALK)の移転について

今、sp-land のサーバーが完全にダウンしていますね。
今後の MIKU_TALK の安定運用の為、「和泉聡のソフトウエア実験室」は、本格的に infoseek に移転することにしました。

http://akira-izumi.hp.infoseek.co.jp/

こちらのサイトでもMIKU_TALK は今まで通りにお使いいただけますし、@nifty にもミラーサイトを立ち上げる予定です。但し、@nifty にミラーを作るのはちょっとだけ面倒です。

そのあたりの技術解説を含めて当該ブログに記載してゆきます。

| | コメント (0) | トラックバック (0)

伊藤ハム「女子高生」を商標登録

伊藤ハム「女子高生」を商標登録 「一体何の目的」とネットで話題
http://www.j-cast.com/2008/04/10018757.html

IPDLで「女子高生」を検索すると2件がヒットしました。いずれも伊藤ハム株式会社の出願です。以下に検索結果を引用します。

(111) 【登録番号】 第4341989号
(151) 【登録日】 平成11年(1999)12月10日
(210) 【出願番号】 商願平10-97778
(220) 【出願日】 平成10年(1998)11月13日
  【先願権発生日】 平成10年(1998)11月13日
  【最終処分日】
  【最終処分種別】  
  【出願種別】  

  【商標(検索用)】 女子高生
(541) 【標準文字商標】 女子高生
(561) 【称呼】 ジョシコーセイ
(531) 【ウィーン図形分類】

(732) 【権利者】
  【氏名又は名称】 伊藤ハム株式会社

  【類似群】 30A01 32F06
  【国際分類版表示】 第7版
(500) 【区分数】
(511) (512) 【商品及び役務の区分並びに指定商品又は指定役務】
30 べんとう,ぎょうざ,しゅうまい,ピザ,ミートパイ,菓子及びパン


(111) 【登録番号】 第4341990号
(151) 【登録日】 平成11年(1999)12月10日
(210) 【出願番号】 商願平10-97789
(220) 【出願日】 平成10年(1998)11月13日
  【先願権発生日】 平成10年(1998)11月13日
  【最終処分日】
  【最終処分種別】  
  【出願種別】  

  【商標(検索用)】 女子高生
(541) 【標準文字商標】 女子高生
(561) 【称呼】 ジョシコーセイ
(531) 【ウィーン図形分類】

(732) 【権利者】
  【氏名又は名称】 伊藤ハム株式会社

  【類似群】 32F01 32F04 32F10
  【国際分類版表示】 第7版
(500) 【区分数】
(511) (512) 【商品及び役務の区分並びに指定商品又は指定役務】
29 肉製品,加工野菜及び加工果実,カレー・シチュー又はスープのもと

ここで、村上総裁の意見について検討してみます。

「女子高生」が登録されている以上、「女子高生」を題材にしたサイトは末尾に「※『女子高生』は伊藤ハムの商標登録です。」と書かなくてはいけないのかもしれない。

 伊藤ハムの登録商標「女子高生」の使用について触れるならば、「女子高生は伊藤ハムの登録商標です」という一文を入れる必要があります。慣用商標となり識別力を失うのを防ぐためです。例えば、料理番組で「ここで味の素を一振りして・・・」と、登録商標を一般名詞のごとくに言うと「味の素株式会社からTV局に「うまみ調味料と言って下さい」というクレームが入るそうです。後発的に商標法3条1項2号に該当することにより、商標無効とされる恐れがある為です。
 しかし、女子の高校生という一般的概念を表示する場合、伊藤ハムの登録商標としての使用態様ではありません。よって何ら注釈を付与する必要はありません。

テレビアニメ「ヤッターマン」のキャラのボヤッキーが「全国の女子高生の皆さん」と簡単には言えなくなる日が来ている、などと説明。そして、サブマリン商標登録の可能性を示唆している。

 アニメキャラクターが「全国の女子高生の皆さん」と言う場合、伊藤ハムの登録商標としての使用態様ではありません。よって何ら制約を課せられる事はありません。

「伊藤ハムはすでに、単なる食品メーカーではなく、巨大な女子高生ライセンスホルダーになるでしょう。世界同時株安の今、買うべき銘柄は伊藤ハムです。きっと....。」

 伊藤ハムは指定商品に係わる「女子高生」の文字商標を使う権利しか有しておらず、いわゆる「女子高生コンテンツ」のライセンスは何ら有していません。よって、女子高生コンテンツのライセンスホルダーとなる可能性は全くないと思われます。
 また、伊藤ハムは1999年12月10日に商標登録して以来、何ら「女子高生」の商標の使用をしておらず、何人も不使用取消審判(商標法50条)にて商標登録を取り消すことが可能です。

※本当は、出願だけで登録されてないっぽいうえに、一般名詞に近いから請求もできないだろーし、商標分類なども違うので、サイトやコンテンツに対する影響はないと思います。知らんけど。

 「女子高生」は出願だけではなく商標登録されています。また、一般名詞であるか否かは商品と商標との関係で決まります。この場合、指定商品に於いて「女子高生」は一般名詞ではありませんので、差止請求等の商標権の行使は可能です。

 例えば、商品「りんご」に「Apple」は一般名詞ですが、商品「コンピュータ・携帯音楽プレーヤー」に「Apple」は一般名詞ではありません。よって、Apple Computer Japan は、第三者がコンピューターや携帯音楽プレーヤーに「Apple」という名称を付与するのを差止めることが可能です。

| | コメント (0) | トラックバック (0)

ソフトウエア実験室のミラーサイト開設

今までは、sp-land にソフトウエア実験室を開設していたのですが、ちょっとコンテンツが重くてサーバ管理の方に申し訳なかったですね。

和泉聡のソフトウエア実験室 @sp-land
http://akiraizumi.sv1.sp-land.net/

そういう訳で、infoseek にソフトウエア実験室のミラーサイトを開設することにしました。こちらは割と軽く動いてくれると思います。今後はこちらをメインにバージョンアップする予定です。

和泉聡のソフトウエア実験室 @ infoseek
http://akira-izumi.hp.infoseek.co.jp/

| | コメント (0) | トラックバック (0)

On line Vocaloid

あの「初音ミク」の「VOCALOID」オンライン版が本邦初公開
http://bb.watch.impress.co.jp/blog/archives/2008/04/macvocaloid.html

これは面白い取り組みですね。
 PCアプリケーションとして実装したならば、OSの縛りを脱却するのは難しいです。開発工数はOS数に比例して増加します。しかし、販売本数はWindows が圧倒的で、Mac OS X ユーザーはごく少数(現在は3~5%)ですので、Macintosh の開発費用を回収するのは難しく、よって営業的な判断により Windows 版のみを開発するという場合が多いです。
 しかし、WEBアプリケーションとして実装したならば、OSの縛りを超えてマルチOS対応するのは、それほど難しいことではありませんし、OS数に比例して開発工数が増加することはありません。よって、開発工数を削減し、かつミュージシャンやクリエータの比率が高い Mac OS X ユーザーを取り込むには、On line Vocaloid というアプローチが良いと思われます。
 更に、バグ対応が迅速にできるとか、規約違反の○×△な音声ファイルを作成しているユーザーをすぐさま特定できるとかいう効果もあります。
 余談ですが、自分も MIKU_TALK WEBアプリケーションで、「卑猥な言葉を喋らせようとするとミクが怒る(ミクの怒った顔が表示される)」機能を付けようかと思ったのですが、かえって、「怒った顔が見たくてヒワイな言葉を入力する」ユーザーが出てきて、火に油を注ぐような気がしましたので止めました。(笑) Yamaha さんも、On line Vocaloid に同様に機能を実装される場合にはご一考ください。

追記:
昨年度10月の自分のブログで、"VOCALOID WEB-API" について記載していましたね。どこのブログで見つけたのかはもう探れませんでした。リンクを貼っておけばよかったですね。
http://akira-izumi.cocolog-nifty.com/patent/2007/10/vocaloid_8b20.html

| | コメント (0) | トラックバック (0)

« 2008年3月 | トップページ | 2008年5月 »