(58)【調査した分野】(Int.Cl.,DB名)
第1キャラクタが発話すべき第1音声、及び、当該第1音声の文字内容を示す第1文字列を指定する第1指令と、第2キャラクタが発話すべき第2音声、及び、当該第2音声の文字内容を示す第2文字列を指定する第2指令と、が含まれるスクリプトを記憶する記憶部と、
前記スクリプトに含まれる前記第1指令及び前記第2指令を順番に解釈する解釈部と、
前記解釈部によって解釈された前記第1指令若しくは前記第2指令に従って、前記第1音声若しくは前記第2音声を再生する音声再生部と、
前記解釈部によって解釈された前記第1指令若しくは前記第2指令に従って、前記第1文字列若しくは前記第2文字列を、再生される前記第1音声若しくは前記第2音声と同期させて表示する表示制御部と、を備え、
前記解釈部は、解釈を開始した前記第1指令に、前記第1音声の再生を途中で終了させるための打ち切り情報が含まれている場合に、当該打ち切り情報により定まる打ち切りタイミングに合わせて、前記第2指令の解釈を開始する、
ことを特徴とする端末装置。
前記解釈部は、前記打ち切りタイミングに、前記第2音声における先頭の前記無音区間内まで微小に巻き戻してから、前記増幅率を標準値に再設定した状態で前記第2音声の再生を再開させる、
ことを特徴とする請求項4に記載の端末装置。
第1キャラクタが発話すべき第1音声、及び、当該第1音声の文字内容を示す第1文字列を指定する第1指令と、第2キャラクタが発話すべき第2音声、及び、当該第2音声の文字内容を示す第2文字列を指定する第2指令と、が含まれるスクリプトを記憶する端末装置における音声再生方法であって、
前記スクリプトに含まれる前記第1指令及び前記第2指令を順番に解釈する解釈ステップと、
前記解釈ステップにて解釈された前記第1指令若しくは前記第2指令に従って、前記第1音声若しくは前記第2音声を再生する音声再生ステップと、
前記解釈ステップにて解釈された前記第1指令若しくは前記第2指令に従って、前記第1文字列若しくは前記第2文字列を、再生される前記第1音声若しくは前記第2音声と同期させて表示する表示制御ステップと、
解釈ステップは、解釈を開始した前記第1指令に、前記第1音声の再生を途中で終了させるための打ち切り情報が含まれている場合に、当該打ち切り情報により定まる打ち切りタイミングに合わせて、前記第2指令の解釈を開始する、
ことを特徴とする音声再生方法。
第1キャラクタが発話すべき第1音声、及び、当該第1音声の文字内容を示す第1文字列を指定する第1指令と、第2キャラクタが発話すべき第2音声、及び、当該第2音声の文字内容を示す第2文字列を指定する第2指令と、が含まれるスクリプトを記憶するコンピュータを、
前記スクリプトに含まれる前記第1指令及び前記第2指令を順番に解釈する解釈部、
前記解釈部によって解釈された前記第1指令若しくは前記第2指令に従って、前記第1音声若しくは前記第2音声を再生する音声再生部、
前記解釈部によって解釈された前記第1指令若しくは前記第2指令に従って、前記第1文字列若しくは前記第2文字列を、再生される前記第1音声若しくは前記第2音声と同期させて表示する表示制御部、として機能させ、
前記解釈部は、解釈を開始した前記第1指令に、前記第1音声の再生を途中で終了させるための打ち切り情報が含まれている場合に、当該打ち切り情報により定まる打ち切りタイミングに合わせて、前記第2指令の解釈を開始する、
ように機能させることを特徴とするプログラム。
【発明を実施するための形態】
【0013】
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、スマートフォン等の端末装置において、アドベンチャーゲームの進行を制御する実施形態を説明するが、この他にも、例えば、ノート型パーソナルコンピュータ、ゲーム機器、PDA(Personal Digital Assistant)などの情報処理装置において、アドベンチャーゲームの進行を制御する場合にも、同様に本発明を適用することができる。また、後述するように、本発明は、アドベンチャーゲーム以外にも適用可能である。
すなわち、以下に記載する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素または全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
【0014】
(全体構成)
本発明の実施形態に係る端末装置300を含むゲームシステム100の全体構成を、
図1に示す。図示するように、ゲームシステム100は、ゲームサーバ200と、端末装置300とがインターネット900を介して通信可能に接続されて構成されている。
なお、図中では簡略化しているが、端末装置300は、利用するユーザに応じて、多数存在しているものとする。
【0015】
ゲームサーバ200は、例えば、サーバ装置(サーバ用コンピュータ)等であり、端末装置300と通信し、管理に必要な情報を収集する。例えば、ゲームサーバ200は、端末装置300のユーザ情報、及び、端末装置300にて実行されるアドベンチャーゲームに関する情報を収集して管理する。
【0016】
端末装置300は、例えば、スマートフォン等であり、アドベンチャーゲームをプレイするユーザに使用される。つまり、端末装置300には、アドベンチャーゲームのアプリ(アプリケーション)がインストールされている。
【0017】
(情報処理装置の概要構成)
本発明の実施形態に係る端末装置300が実現される典型的な情報処理装置400について説明する。
【0018】
情報処理装置400は、
図2に示すように、CPU(Central Processing Unit)401と、ROM(Read Only Memory)402と、RAM(Random Access Memory)403と、記憶デバイス404と、表示デバイス405と、通信デバイス406と、操作デバイス407と、を備える。
【0019】
CPU 401は、情報処理装置400全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。
【0020】
ROM 402には、電源投入直後に実行されるIPL(Initial Program Loader)が記録され、これが実行されることにより、所定のプログラムをRAM 403に読み出してCPU 401による当該プログラムの実行が開始される。
【0021】
RAM 403は、データやプログラムを一時的に記憶するためのもので、記憶デバイス404から読み出したプログラムやデータ、その他、通信に必要なデータ等が保持される。
【0022】
記憶デバイス404は、SSD(Solid State Drive)やハードディスク等であり、種々のデータを記憶する。例えば、記憶デバイス404は、情報処理装置400全体の動作制御に必要なオペレーティングシステムのプログラムや各種のアプリケーションや付随するデータ等を記憶する。
【0023】
表示デバイス405は、例えば、LCD(Liquid Crystal Display)等の表示装置と、その表示装置に表示するための画像情報を記憶するVRAM(Video Random Access Memory)と、画像情報を処理するための画像処理部とを含んで構成されている。この画像処理部は、記憶デバイス404から読み出されたデータや、CPU 401にて処理されたデータを加工処理した後、これをVRAMに格納するなどして、画像情報を生成する。
【0024】
通信デバイス406は、移動体通信網や無線LAN(Local Area Network)等を利用して無線通信を行う。なお、通信デバイス406は、有線LAN等を利用して有線通信を行ってもよい。
【0025】
操作デバイス407は、タッチスクリーンやタッチパッド、ボタンやキーボード、若しくは、マウス等であり、ユーザの操作を受け付ける。なお、音声によって、ユーザの操作を受け付けてもよい。
【0026】
以下、上記情報処理装置400において実現される端末装置300の構成等について、
図3〜
図6を参照して説明する。情報処理装置400に電源が投入されると、端末装置300として機能させるプログラムが実行され、本実施形態に係る端末装置300が実現される。
【0027】
(端末装置の概要構成)
図3は、本発明の実施形態に係る端末装置300の概要構成を示すブロック図である。図示するように、端末装置300は、操作受付部310と、送受信部320と、記憶部330と、制御部340と、表示部350とを備え、アドベンチャーゲームの進行を制御する。
【0028】
操作受付部310は、ユーザからの各種操作を受け付ける。例えば、操作受付部310は、タッチスクリーン等から得られる情報に基づいて、ユーザからの操作を受け付ける。
例えば、ゲーム中のキャラクタ同士の会話において、セリフが切り替わる度(より詳細には、次のセリフが発話される前)に停止する通常モードの場合に、操作受付部310は、セリフの切り替えを指示するためのタップ操作を受け付ける。
上述した操作デバイス407等が、このような操作受付部310として機能しうる。
【0029】
送受信部320は、インターネット900を介して、ゲームサーバ200との間で、種々の情報を送受信する。
例えば、送受信部320は、アドベンチャーゲームの進行に応じて、新たなスクリプトや、そのスクリプトにて指定される音声ファイル、及び、画像ファイル等をゲームサーバ200から受信する。また、送受信部320は、ゲーム中におけるユーザの選択操作等の情報をゲームサーバ200に送信する。
上述した通信デバイス406等が、このような送受信部320として機能しうる。
【0030】
記憶部330は、アドベンチャーゲームの進行制御等に必要な種々の情報を記憶する。
例えば、記憶部330は、アドベンチャーゲームのアプリを記憶すると共に、そのアプリのデータとして、ゲーム管理情報331、及び、スクリプト332を記憶する。
【0031】
ゲーム管理情報331は、アドベンチャーゲームにおいて使用される音声ファイル(音声データ)、画像ファイル(画像データ)等を管理すると共に、ゲームにおける進行状況等も管理する。
なお、音声ファイルには、仕様上の制約により、先頭及び末尾に無音区間が含まれている。例えば、音声ファイルにおいて、先頭には、約200ミリ秒(0.2秒)の無音区間が含まれ、また、末尾には、約700ミリ秒(0.7秒)の無音区間が含まれている。
更に、ゲーム管理情報331にて管理される進行状況には、例えば、ゲームに登場するキャラクタ間の親密度等のパラメータ値が含まれている。
【0032】
スクリプト332は、ゲーム中におけるキャラクタ同士の会話を規定するファイルであり、例えば、指令(タグ等)、画像ファイル名、音声ファイル名、及び、文字列(セリフ等)が記述されている。
【0033】
具体的に、スクリプト332には、
図4に示すように、指令CMD1,CMD2等が記述されている。
これら指令CMD1,CMD2は、何れも発話指令(voiceタグ)であり、ゲームのキャラクタにセリフを発話させるための指令である。つまり、指令CMD1は、キャラクタAに、「今日は、雨が降るみたいですよ。」というセリフを発話させるために、音声ファイル(キャラA_123.wav)を再生させる指令である。また、指令CMD2は、キャラクタBに、「あっ、飴も買わなくちゃ!」というセリフを発話させるために、音声ファイル(キャラB_234.wav)を再生させる指令である。
また、指令CMD1には、指令CMD2に記述されていない「Qtime=1780」という記述が含まれている。この記述における「Qtime」は、音声ファイルの再生を途中で終了させるための打ち切り情報である。また、「1780」という値は、音声ファイルを終わりまで再生した時間よりも短い短縮値である。つまり、「Qtime=1780」の場合では、音声ファイルの再生から1780ミリ秒(1.78秒)が経過した後に、その再生を打ち切ることが規定されている。なお、打ち切り情報による音声再生の打ち切りの詳細は、後述する制御部340において説明する。
また、指令CMD2の末尾には、指令CMD1に記述されていない[w]という記述が含まれている。この[w]は、ユーザの入力操作を待機するための待機指令(waitタグ)であり、セリフが発話された後に停止させる役割を担っている。つまり、CMD2の「あっ、飴も買わなくちゃ!」というセリフの発話が終わっても、待機指令が記述されているため、次の指令(セリフ)には進まずに、入力操作を待機することになる。なお、セリフが順次切り替わって行くオートモードの場合では、待機指令が記述されていても、次の指令に進むようになっている。また、指令CMD1に待機指令が記述されていても、打ち切り情報が優先され、待機指令は、読み飛ばされるものとする。
これらのような指令CMD1,CMD2の記述定義(voiceタグ等)は、一例であり、他の記述定義で、発話指令や待機指令を表してもよい。
【0034】
記憶部330は、アドベンチャーゲームのアプリ以外に、他のアプリ等も記憶している。
上述した記憶デバイス404等が、このような記憶部330として機能しうる。
【0035】
図3に戻って、制御部340は、端末装置300全体を制御する。
例えば、制御部340は、進行制御部341、解釈部342、音声再生部343、表示制御部344、及び、計時部345を備え、アドベンチャーゲームの進行を制御する。
【0036】
進行制御部341は、ユーザの操作に応じて、ゲームの進行を適宜変化させる。
例えば、進行制御部341は、複数項目の選択肢をユーザに提示し、その中からユーザに選択された項目に応じて、解釈部342に解釈させるためのスクリプトを変更したり、ゲームにおけるパラメータ値(一例として、キャラクタ間の親密度)を増減させたりする。
【0037】
解釈部342は、進行制御部341によるゲームの進行に応じて、スクリプトに記述された指令を順番に解釈する。
例えば、解釈部342は、上述した
図4に示すスクリプト332を解釈する場合に、通常であれば、先に、指令CMD1を解釈し、キャラクタAの音声ファイル(キャラA_123.wav)の再生等を終えた後に、指令CMD2を解釈する。
なお、解釈部342は、解釈を開始した指令に、打ち切り情報が含まれていると、例えば、次の指令を先読みするなどし、打ち切り情報により定まる打ち切りタイミングに合わせて、次の指令の解釈を開始する。
具体的に、指令CMD1には、「Qtime=1780」という打ち切り情報が含まれているため、解釈部342は、指令CMD1を解釈すると、直ちに指令CMD2を先読みし、打ち切りタイミング(音声再生から1780ミリ秒後)に合わせて、先読みした指令CMD2の解釈を開始する。
なお、このようなスクリプトの解釈に伴う音声再生等の様子については、他の構成(音声再生部343、表示制御部344、及び、計時部345)を説明した後に説明する。
【0038】
音声再生部343は、解釈部342によって解釈された指令に従って、音声を再生する。
例えば、解釈部342によって、指令CMD1が解釈されると、音声再生部343は、キャラクタAの音声ファイル(キャラA_123.wav)を再生する。また、解釈部342によって、指令CMD2が解釈されると、音声再生部343は、キャラクタBの音声ファイル(キャラB_234.wav)を再生する。なお、上記の解釈部342により打ち切りタイミングに合わせて、指令CMD2が解釈された場合であれば、音声再生部343は、再生中のキャラクタAの音声ファイルを途中で打ち切り、代わりに、キャラクタBの音声ファイルを再生することになる。
【0039】
表示制御部344は、解釈部342によって解釈された指令に従って、セリフを示す文字列を、音声再生部343により再生される音声と同期させ、ゲーム画面に表示する。
例えば、解釈部342によって、指令CMD1が解釈されると、表示制御部344は、キャラクタAのセリフである文字列(今日は、雨が降るみたいですよ。)を所定の表示速度で徐々に表示させていく。また、解釈部342によって、指令CMD2が解釈されると、表示制御部344は、キャラクタBのセリフである文字列(あっ、飴も買わなくちゃ!)を所定の表示速度で徐々に表示させていく。なお、上記の音声再生部343により、再生中のキャラクタAの音声ファイルが途中で打ち切られ、キャラクタBの音声ファイルが再生された場合であれば、表示制御部344は、徐々に表示させていたキャラクタAのセリフ(文字列)を途中で打ち切り、代わりに、キャラクタBのセリフを徐々に表示させていくことになる。
【0040】
計時部345は、解釈部342が解釈した指令に、打ち切り情報が含まれている場合に、その指令の解釈に従って再生される音声について、再生開始からの経過時間を計時する。
例えば、指令CMD1のように、「Qtime=1780」という打ち切り情報が含まれている場合に、計時部345は、音声再生部343により音声ファイル(キャラA_123.wav)の再生が開始されてからの経過時間を計時する。
【0041】
このような構成の制御部340におけるスクリプト(
図4に示すスクリプト332)の解釈に伴う音声再生等の様子について、
図5を参照して、より具体的に説明する。
まず、解釈部342が指令CMD1を解釈すると、時間T1にて、音声再生部343は、キャラクタAの音声ファイル(キャラA_123.wav)の再生を開始する。また、同時間T1にて、表示制御部344は、キャラクタAのセリフである文字列(今日は、雨が降るみたいですよ。)の表示を開始する。
なお、指令CMD1には、「Qtime=1780」という打ち切り情報が含まれているため、計時部345は、時間T1から経過時間の計時を開始する。また、解釈部342は、指令CMD2を先読みする。
【0042】
そして、計時部345が打ち切りタイミングである1780ミリ秒まで計時すると(1780ミリ秒の少し前でもよい)、解釈部342は、先読みした指令CMD2の解釈を開始する。
この指令CMD2の解釈に伴って、先の音声ファイル(キャラA_123.wav)の再生が途中で打ち切られ、時間T2にて、音声再生部343は、キャラクタBの音声ファイル(キャラB_234.wav)の再生を開始する。つまり、キャラクタAが「今日は、雨」と発話している途中で、キャラクタBが「あっ、飴も買わなくちゃ!」と割り込み発話することになる。同様に、キャラクタAのセリフの表示が途中(今日は、雨)で打ち切られ、同時間T2にて、表示制御部344は、キャラクタBのセリフである文字列(あっ、飴も買わなくちゃ!)の表示を開始する。
【0043】
このように、指令CMD1に打ち切り情報が含まれている場合に、解釈部342が、例えば、指令CMD2を先読みするなどし、打ち切りタイミングに合わせて、指令CMD2の解釈を開始することで、先の音声ファイル(キャラA_123.wav)による音声の再生途中で、後の音声ファイル(キャラB_234.wav)による音声を割り込み発話させることが可能となる。
なお、先の音声ファイルの再生を途中で打ち切り、続けて、後の音声ファイルの再生を開始するにあたり、後の音声ファイルにおける先頭の無音区間が再生されることになる。この先頭の無音区間は、約200ミリ秒と短時間であり、割り込み発話に違和感を与えるほどではない。
【0044】
それでもなお、後の音声ファイルにおける先頭の無音区間を再生しないようにしてもよい。以下、
図6を参照して、具体的に説明する。以下では、音声再生部343において、少なくとも2つの音声ファイルをミキシング再生可能であり、また、各音声ファイルを再生する際に、増幅率を設定できる場合を一例として説明する。なお、増幅率は、再生時の増幅率として説明するが、再生により出力される出力音の増幅率であってもよい。
まず、上記の
図5と同様に、解釈部342が指令CMD1を解釈すると、時間T1にて、音声再生部343は、キャラクタAの音声ファイル(キャラA_123.wav)の再生を開始する。そして、計時部345は、時間T1から経過時間の計時を開始する。また、解釈部342は、指令CMD2を先読みする。
【0045】
この指令CMD2を先読みすると、解釈部342は、先の音声ファイル(キャラA_123.wav)の打ち切りタイミング前に、後の音声ファイル(キャラB_234.wav)における先頭の無音区間Mの終わりを音声再生部343に検出させる。具体的に解釈部342は、後の音声ファイルに対する再生時の増幅率を最低値(一例として、増幅率=0)に設定した状態で、音声再生部343に後の音声ファイルの再生を開始させ、先頭の無音区間Mの終わりとなる位置Pを検出させる。そして、解釈部342は、その状態で、音声再生部343に、後の音声ファイルの再生を一時停止させる。なお、音声再生部343は、先頭の無音区間M内まで微小に巻き戻した後に、音声ファイルの再生を一時停止してもよい。
やがて、打ち切りタイミングになると、解釈部342は、後の音声ファイルに対する再生時の増幅率を標準値に再設定した状態で、時間T2にて、音声再生部343に後の音声ファイルの再生を再開させる。つまり、音声再生部343は、後の音声ファイルを位置Pから再生することになる。なお、同時間T2にて、音声再生部343は、先の音声ファイルの再生を打ち切ってもよく、また、先の音声ファイルに対する再生時の増幅率を最低値にして再生を終わりまで続けてもよい。
【0046】
この場合、無音区間が再生されないため、先の音声ファイルによる音声再生の途中から、一切の間を空けることなく、後の音声ファイルによる音声を割り込み発話させることが可能となる。その際、後の音声ファイルにおける先頭の無音区間の終わりを検出する過程で、不必要な音声の出力を防止することも可能となる。
【0047】
制御部340は、この他にも、アドベンチャーゲームを進行させる制御に必要な各種処理を適宜実行する。
上述したCPU 401等が、このような制御部340として機能しうる。
【0048】
図3に戻って、表示部350は、アドベンチャーゲームにおける各種画面を表示する。
例えば、表示部350は、表示制御部344によって生成されたゲーム画面等を表示する。具体的に、表示部350は、
図7(a),(b)に示すようなゲーム画面GGを表示する。なお、
図7(a),(b)のゲーム画面GGは、一例として、セリフ領域SA1,SA2だけが異なる画面である。
図7(a)のゲーム画面GGにおけるセリフ領域SA1には、上述した
図5における時間T1から時間T2の直前までのキャラクタAのセリフである文字列(今日は、雨が)が表示されている。なお、キャラクタAのセリフが途中までセリフ領域SA1に表示されるのと並行して、音声再生部343によって再生される音声ファイル(キャラA_123.wav)によるキャラクタAの音声も、同様に途中まで出力されることになる。
図7(b)のゲーム画面GGにおけるセリフ領域SA2には、
図5における時間T2以降のキャラクタBのセリフである文字列(あっ、飴も買わなくちゃ!)が表示されている。なお、キャラクタBのセリフがセリフ領域SA2に表示されるのと並行して、音声再生部343によって再生される音声ファイル(キャラB_234.wav)によるキャラクタBの音声も、出力されることになる。
つまり、
図5における時間T2の直前まで、
図7(a)のゲーム画面GGが表示され、
図5における時間T2になると、
図7(b)のゲーム画面GGに切り替わり、表示部350においても、割り込みのセリフが表現されることになる。
上述した表示デバイス405等が、このような表示部350として機能しうる。
【0049】
(端末装置の動作)
以下、
図3に示すような構成の端末装置300の動作について
図8を参照して説明する。
図8は、本実施形態に係る音声再生処理の流れを示すフローチャートである。この音声再生処理は、キャラクタ同士の会話のためのスクリプト332が記憶部330から読み出されるに伴って開始される。
【0050】
まず、端末装置300は、指令を解釈する(ステップS11)。
つまり、制御部340(解釈部342)は、例えば、
図4に示すようなスクリプト332に記述された指令を解釈する。
【0051】
端末装置300は、音声ファイルが再生中であれば、その再生を打ち切る(ステップS12)。
すなわち、制御部340は、新たな指令を解釈する際に、先の指令に基づく音声ファイルが再生途中である場合に、その音声ファイルの再生を打ち切る。
【0052】
端末装置300は、解釈した指令において指定された音声ファイルの再生を開始する(ステップS13)。
例えば、スクリプト332に記述された指令CMD1が解釈された場合、制御部340(音声再生部343)は、キャラクタAの音声ファイル(キャラA_123.wav)の再生を開始する。
【0053】
端末装置300は、解釈した指令に、打ち切り情報があるか否かを判別する(ステップS14)。
例えば、制御部340(解釈部342)は、スクリプト332に記述された指令CMD1のように、「Qtime」という打ち切り情報が含まれているかどうかを判別する。
【0054】
端末装置300は、打ち切り情報があると判別すると(ステップS14;Yes)、経過時間の計時を開始する(ステップS15)。
つまり、制御部340(計時部345)は、上記のステップS13にて再生が開始された音声ファイルについて、再生開始からの経過時間を計時する。
【0055】
端末装置300は、次の指令を先読みする(ステップS16)。
例えば、スクリプト332の指令CMD1を解釈している場合に、制御部340(解釈部342)は、次の指令CMD2を先読みする。
この際、制御部340は、上述した
図6を参照して説明したように、指令CMD2に指定されている音声ファイル(キャラB_234.wav)における先頭の無音区間Mの終わりとなる位置Pを検出し、その音声ファイルの再生を一時停止させてもよい。
【0056】
端末装置300は、打ち切りタイミングになるまで待機し(ステップS17;No)、打ち切りタイミングになると(ステップS17;Yes)、上述したステップS11に処理を戻す。
例えば、スクリプト332の指令CMD1を解釈している状態であれば、打ち切りタイミング(音声ファイルの再生から1780ミリ秒後)に合わせて、ステップS11に処理を戻すことで、指令CMD2を解釈することになる。そして、後続するステップS12にて、先の音声ファイルの再生が途中で打ち切られ、代わりに、上述したステップS13にて、後の音声ファイルの再生が開始されることになる。
【0057】
また、上述したステップS14にて、打ち切り情報がないと判別された場合(ステップS14;No)に、端末装置300は、音声ファイルの再生が終了したか否かを判別する(ステップS18)。
つまり、制御部340は、ステップS13にて開始した音声ファイルの再生が終了したがどうかを判別する。
【0058】
端末装置300は、再生が終了していないと判別すると(ステップS18;No)、そのまま待機する。一方、再生が終了したと判別すると(ステップS18;Yes)、端末装置300は、オートモードであるか否かを判別する(ステップS19)。
つまり、制御部340は、セリフが順次切り替わって行くオートモードであるかどうかを判別する。
【0059】
端末装置300は、オートモードであると判別すると(ステップS19;Yes)、後述するステップS21に処理を進める。
【0060】
一方、オートモードでないと判別した場合(ステップS19;No)に、端末装置300は、入力操作を待機する(ステップS20)。
つまり、制御部340は、音声ファイルの再生を終えた後、ユーザからの入力操作を待機する。
【0061】
そして、端末装置300は、次の指令があるか否かを判別する(ステップS21)。
つまり、制御部340は、
図4のようなスクリプト332に、次の指令が記述されているかどうかを判別する。
【0062】
端末装置300は、次の指令があると判別すると(ステップS21;Yes)、上述したステップS11に処理を戻す。
一方、次の指令がないと判別した場合(ステップS21;No)に、端末装置300は、音声再生処理を終える。
【0063】
このような音声再生処理によって、第1指令に打ち切り情報が含まれている場合に、制御部340(解釈部342)が、第2指令を先読みし、打ち切りタイミングに合わせて、第2指令の解釈を開始することで、第1指令で指定された音声(第1音声)の途中で第2指令で指定された音声(第2音声)を割り込み発話させることが可能となる。
【0064】
この結果、スクリプトを用いて音声再生を行う場合でも、割り込み発話を適切に成立させることができる。
【0065】
(他の実施形態)
上記の実施形態では、スクリプトの指令において、打ち切り情報の値を固定値にて設定しておく場合について説明したが、ゲームの進行に応じて、打ち切り情報の値を加工し、打ち切りタイミングを変動させるようにしてもよい。
例えば、アドベンチャーゲームでは、ゲーム中に提示される選択肢(行動、アイテム等)を、ユーザがどのように選択していくかにより、ストーリーの展開(分岐等)が変化するだけでなく、キャラクタ間の親密度が増減するようになっている。
そして、この親密度が、高い(上位基準値以上)、普通(上位基準値未満で、下位基準値以上)、低い(下位基準値未満)の何れかであるかに応じて、キャラクタ同士の会話における割り込み発話のタイミングを変動させる。
一例として、進行制御部341は、スクリプト332における各指令(解釈部342により解釈される前の指令)から打ち切り情報を検索し、キャラクタ間の親密度(高い、普通、低い)に応じて、打ち切り情報の値を加工する。具体的に、
図4に示す指令CMD1から「Qtime=1780」という打ち切り情報が検索されると、進行制御部341は、指令CMD1にて指定されるキャラクタAと、次の指令CMD2にて指定されるキャラクタBとの親密度に従って、その「1780」という値を加工する。例えば、進行制御部341は、キャラクタA,B間の親密度が高い場合に、「Qtime=1780」を維持し、また、親密度が普通の場合に、「Qtime=1958」と加工し(1割増加)、そして、親密度が低い場合に、「Qtime=1602」と加工する(1割減少)。
このように加工された指令CMD1と、次の指令CMD2とが解釈部342によって解釈されることで、キャラクタA,Bの会話における割り込み発話のタイミングが変動することになる。
すなわち、キャラクタA,B間の親密度が高い場合に、上述したような丁度よいタイミングで割り込み発話がなされる。つまり、キャラクタAが「今日は、雨」と発話している途中で、キャラクタBが「あっ、飴も買わなくちゃ!」と割り込み発話することになる。
また、親密度が普通の場合に、少し遅れたタイミングで割り込み発話がなされる。つまり、キャラクタAが「今日は、雨が降」と発話している途中で、キャラクタBが「あっ、飴も買わなくちゃ!」と割り込み発話することになる。
そして、親密度が低い場合に、やや早いタイミングで割り込み発話がなされる。つまり、キャラクタAが「今日は」と発話している途中で、キャラクタBが「あっ、飴も買わなくちゃ!」と割り込み発話することになる。
この場合、キャラクタ間の親密度を、割り込み発話のタイミングに反映させることができる。
【0066】
また、このように親密度が普通の場合に値を1割増加させ、また、親密度が低い場合に値を1割減少させるのは、一例であり、他の値に加工してもよい。
例えば、進行制御部341は、親密度が低い場合に、値を上限値(音声ファイルの再生時間)まで増加させ、あえて、割り込み発話を成立させないようにしてもよい。つまり、指令CMD1から「Qtime=1780」という打ち切り情報が検索され、キャラクタA,B間の親密度が低い場合に、進行制御部341は、「Qtime=2910」と加工する(キャラA_123.wavの再生時間が2910ミリ秒の場合)。
この場合、キャラクタAが「今日は雨が降るみたいですよ。」と発話が終わり、キャラA_123.wavにおける末尾の無音時間も再生された後に、キャラクタBが「あっ、飴も買わなくちゃ!」と普通に発話することになり、会話のテンポが悪く、キャラクタA,B間が疎遠であると感じられる。
特に、キャラクタAが「ボケ」のセリフを発話し、キャラクタBが「ツッコミ」のセリフを発話するような場面では、キャラクタA,B間が疎遠であることが顕著に感じられることになる。
なお、その際に、進行制御部341が、新たな指令をスクリプトに挿入し、キャラクタのセリフを追加できるようにしてもよい。
例えば、進行制御部341は、キャラクタBが「ツッコミ」のセリフを発話するための指令の後に、キャラクタAが固定のセリフ(一例として、「ツッコミが遅いよ!」を発話するための指令を挿入する。
この場合、明らかに間が空いて、キャラクタBが「ツッコミ」のセリフを発話した後に、キャラクタAに「ツッコミが遅いよ!」と発話させ、キャラクタA,B間が疎遠であることをユーザへ明確に伝えることができる。
【0067】
また、上記の実施形態では、
図4に示すスクリプト332における指令CMD1のように、「Qtime=1780」という打ち切り情報を用いる場合について説明したが、他の打ち切り情報であってもよい。
【0068】
例えば、
図9(a)に示すスクリプト332における指令CMD3のように、「Wtime=-1130」という打ち切り情報を用いてもよい。この「Wtime=-1130」の場合では、音声ファイルの再生後のウェイト時間が、マイナス1130ミリ秒(マイナス1.13秒)と規定されている。つまり、音声ファイルの再生終了から、1130ミリ秒前に溯った時点で、その再生を打ち切ることが規定されている。
この場合、計時部345は、再生されている音声ファイルの残り再生時間を計時する。そして、解釈部342は、計時部345により計時される残り再生時間の値が、ウェイト時間の絶対値に達する時点を、打ち切りタイミングとして扱う。つまり、解釈部342は、
図9(a)の指令CMD3を解釈すると、直ちに指令CMD2を先読みし、打ち切りタイミング(再生される音声ファイルの残り再生時間が1130ミリ秒となった時点)に合わせて、先読みした指令CMD2の解釈を開始する。
この場合も、先の音声ファイル(キャラA_123.wav)による音声の再生途中で、後の音声ファイル(キャラB_234.wav)による音声を割り込み発話させることが可能となる。
【0069】
この他にも、例えば、
図9(b)に示すスクリプト332における指令CMD4のように、セリフの末尾に付加した「\q」という特殊文字を打ち切り情報として用いてもよい。この場合、表示制御部344が、「今日は、雨が」と表示したタイミングで、音声ファイルの再生を打ち切ることが規定されている。
つまり、解釈部342は、
図9(b)の指令CMD4を解釈すると、直ちに指令CMD2を先読みし、打ち切りタイミング(「今日は、雨が」と表示された時点)に合わせて、先読みした指令CMD2の解釈を開始する。
この場合も、先の音声ファイル(キャラA_123.wav)による音声の再生途中で、後の音声ファイル(キャラB_234.wav)による音声を割り込み発話させることが可能となる。
【0070】
上記の実施形態では、アドベンチャーゲームを進行する端末装置300を一例として説明したが、アドベンチャーゲーム以外のゲームを進行する場合にも適宜適用可能である。
例えば、ノベルゲームや恋愛シミュレーションゲーム、若しくは、音楽ゲームにおけるストーリーパート等を進行する場合にも、本願発明は適用可能である。
【0071】
上記の実施形態では、端末装置300を用いる場合について説明したが、このような端末装置300の動作を規定する動作プログラムを既存のパーソナルコンピュータや情報端末機器等に適用することで、当該パーソナルコンピュータを端末装置300として機能させることも可能である。
【0072】
また、このようなプログラムの配布方法は任意であり、例えば、CD−ROM(Compact Disc Read-Only Memory)、DVD(Digital Versatile Disc)、MO(Magneto Optical Disc)、メモリカード等のコンピュータ読み取り可能な記録媒体に格納して配布してもよいし、インターネットといった通信ネットワークを介して配布してもよい。
【0073】
(まとめ)
本発明の第1の観点に係る端末装置は、記憶部、解釈部、音声再生部、及び、表示制御部を備えている。
【0074】
記憶部は、第1キャラクタが発話すべき第1音声、及び、その第1音声の文字内容を示す第1文字列を指定する第1指令と、第2キャラクタが発話すべき第2音声、及び、その第2音声の文字内容を示す第2文字列を指定する第2指令と、が含まれるスクリプトを記憶する。解釈部は、スクリプトに含まれる第1指令及び第2指令を順番に解釈する。音声再生部は、解釈部によって解釈された第1指令若しくは第2指令に従って、第1音声若しくは第2音声を再生する。表示制御部は、解釈部によって解釈された第1指令若しくは第2指令に従って、第1文字列若しくは第2文字列を、再生される第1音声若しくは第2音声と同期させて表示する。そして、解釈部は、解釈を開始した第1指令に、第1音声の再生を途中で終了させるための打ち切り情報が含まれている場合に、その打ち切り情報により定まる打ち切りタイミングに合わせて、第2指令の解釈を開始する。
【0075】
つまり、第1指令に打ち切り情報が含まれている場合に、解釈部が、例えば、第2指令を先読みするなどし、打ち切りタイミングに合わせて、第2指令の解釈を開始することで、第1音声の途中で第2音声を割り込み発話させることが可能となる。
この結果、スクリプトを用いて音声再生を行う場合でも、割り込み発話を適切に成立させることができる。
【0076】
また、上記端末装置は、ゲームの進行に応じて、打ち切り情報を加工することにより、打ち切りタイミングを変動させる進行制御部を更に備えてもよい。
例えば、ゲーム中に変化するキャラクタ間の親密度が高い(上位基準値以上)、普通(上位基準値未満で、下位基準値以上)、低い(下位基準値未満)の何れかであるかに応じて、進行制御部が、打ち切り情報における値を加工することにより、打ち切りタイミングを変動させる。
この場合、キャラクタ間の親密度を、割り込み発話のタイミングに反映させることができる。
【0077】
また、上記端末装置において、第1音声及び第2音声の先頭及び末尾には、無音区間がそれぞれ含まれており、解釈部は、第1指令に打ち切り情報が含まれている場合に、第2指令を先読みし、第2音声における先頭の無音区間以降が打ち切りタイミングに再生されるように、第2指令の解釈を開始してもよい。
この場合、無音区間を再生させないことで、第1音声の途中から間を空けることなく第2音声を割り込み発話させることが可能となる。
【0078】
また、上記端末装置において、音声再生部は、第2指令を先読みした際に、再生される第1音声と並行して、増幅率を最低値に設定した状態で第2音声の再生を開始させ、先頭の無音区間の終わりを検出したところで、第2音声の再生を一時停止させ、打ち切りタイミングに、増幅率を標準値に設定した状態で第2音声の再生を再開させてもよい。
この場合、第2音声における先頭の無音区間の終わりを検出する過程で、不必要な音声の出力を防止することができる。
【0079】
また、上記端末装置において、解釈部は、打ち切りタイミングに、第2音声における先頭の無音区間内まで微小に巻き戻してから、増幅率を標準値に設定した状態で第2音声の再生を再開させてもよい。
この場合、第2音声における先頭の無音区間以降の出だし部が削られることなく、明瞭な割り込み発話を実現できる。
【0080】
また、上記端末装置において、打ち切り情報は、第1文字列の末尾に付加されていてもよい。
この場合、例えば、打ち切り情報に特殊文字を用いることで、セリフとして表示させることなく、打ち切りを指示することができる。
【0081】
また、上記端末装置は、打ち切り情報には、第1音声の再生時間よりも短い短縮値が規定されており、第1音声の再生が開始されてからの経過時間を逐次計時する計時部を更に備え、解釈部は、計時される経過時間の値が短縮値に達する時点を、打ち切りタイミングとして扱うようにしてもよい。
この場合、ゲームの制作過程において、打ち切りタイミングを容易に調整することできる。
【0082】
また、上記端末装置は、打ち切り情報には、第1音声の再生を終えてからの待機時間がマイナスの値で規定されており、再生されている第1音声の残り再生時間を逐次計時する計時部を更に備え、解釈部は、計時される残り再生時間の値が、待機時間の絶対値に達する時点を、打ち切りタイミングとして扱うようにしてもよい。
この場合、ゲームの制作過程において、打ち切りタイミングを容易に調整することできる。
【0083】
また、上記端末装置において、スクリプトには、第1指令と第2指令との間に、入力操作を待機するための待機指令が含まれており、解釈部は、第1指令に打ち切り情報が含まれている場合に、待機指令を読み飛ばすようにしてもよい。
この場合、例えば、オートモードで実行していない場合であっても、第1音声の途中で第2音声を割り込み発話させることが可能となる。
【0084】
本発明の第2の観点に係る音声再生方法は、端末装置における音声再生方法であって、解釈ステップ、音声再生ステップ、及び、表示制御ステップを備えている。
【0085】
すなわち、第2の観点に係る音声再生方法は、第1の観点に係る端末装置と同様に、スクリプトを用いて音声再生を行う場合でも、割り込み発話を適切に成立させることができる。
【0086】
本発明の第3の観点に係るプログラムは、コンピュータを、解釈部、音声再生部、及び、表示制御部として機能させる。
【0087】
すなわち、第3の観点に係るプログラムは、第1の観点に係る端末装置と同様に、スクリプトを用いて音声再生を行う場合でも、割り込み発話を適切に成立させることができる。
【解決手段】記憶部330は、第1音声及び第1文字列を指定する第1指令と、第2音声及び第2文字列を指定する第2指令と、が含まれるスクリプトを記憶する。解釈部342は、スクリプトに含まれる第1指令及び第2指令を順番に解釈する。音声再生部343は、解釈部342によって解釈された第1指令等に従って、第1音声等を再生する。表示制御部344は、解釈部342によって解釈された第1指令等に従って、第1文字列等を、再生される第1音声等と同期させて表示する。そして、解釈部342は、解釈を開始した第1指令に、打ち切り情報が含まれている場合に、その打ち切り情報により定まる打ち切りタイミングに合わせて、第2指令の解釈を開始する。