\documentclass[a4j,12pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage[abs]{overpic}
\title{歌声合成ツール\\v.Connect-STANDリファレンス}
%\author{HAL@修羅場P}
\setlength{\topmargin}{9mm}
\addtolength{\topmargin}{0mm}
%\setlength{\headsep}{3mm}
%\setlength{\headheight}{0mm}
%\setlength{\topskip}{0mm}
%\setlength{\baselineskip}{0mm}
\setlength{\oddsidemargin}{20mm}
\addtolength{\oddsidemargin}{-1in}
\setlength{\evensidemargin}{15mm}
\addtolength{\evensidemargin}{-1in}
%\setlength{\columnsep}{4mm}
%\setlength{\columnseprule}{0mm}
%\setlength{\marginparsep}{0mm}
%\setlength{\marginparpush}{0mm}
%\setlength{\marginwidth}{0mm}
\setlength{\textwidth}{160mm}
\setlength{\textheight}{240mm}
%\setlength{\footheight}{0mm}
%\setlength{\footskip}{8mm}
\setlength{\headsep}{0mm}
\setlength{\headheight}{0mm}
\setlength{\topskip}{0mm}

\begin{document}
%\maketitle
%\newpage

\tableofcontents

\newpage

\section{概要}
\subsection{紹介}
v.Connect-STAND\footnote{2010/11/04現在、まだリリースしてないよ！！！}は音声合成分析技術WORLD\cite{DIO,STAR} 及びUTAU\cite{UTAU}向けに作られた
音声データベースを使用してVOCALOID2\cite{VOCALOID2}用シーケンス\footnote{実際には拡張VSQ
メタテキストを使用しています。}から歌声を合成するツールです。
コマンドラインを使用したCUIスタイルのアプリケーションですが、
バーチャル・ボーカル音源用シーケンサCadencii\cite{Cadencii}上から使用することを
前提として作られています。
\subsection{ライセンス}
\par
v.Connect-STAND及び、内部で使用されているFFTW\cite{FFTW}, WORLD0.0.1, libiconv\cite{libiconv}
はGNU General Public License(GPLv3)でライセンスされます。
またソースコードはGPLv3の下公開されています。そちらに興味のある方は、
SourceForge内Cadenciiプロジェクト内にソースコードを置いてありますので下記をご参照ください。\\
\\
http://sourceforge.jp/projects/cadencii/
\\
\par
v.Connect-STANDはCadencii Projectの一部です。
内部で使用したライブラリ(FFTW, WORLD, libiconv)を除くソースコードの著作権はHAL及びkbinaniに帰属します。

\subsection{免責事項}
このツールを使ったことによるいかなる損害も作者は一切の責任を負いません。
また、このツールは一切の保証を伴わない「現状渡し」で提供されます。
不具合がないことおよび不具合が修正されることを、作者は保証しません。

\newpage


\section{インストール方法}
\subsection{ダウンロード}
以下のURLから最新版のCadenciiをダウンロードしてください。
\\
\\
Cadencii Wiki
http://www9.atwiki.jp/boare/pages/18.html
\\
\subsection{インストール}
ダウンロードしたファイルを解凍し、Cadenciiをインストールしてください。
自動的にv.Connect-STANDもインストールされます\footnote{2010/11/04現在STANDを含んだバージョンは未リリースだよ！}。
\subsection{実行環境}
\label{part:environment}
Cadenciiの実行、及びv.Connect-STANDの実行には以下の環境が必要です。
\begin{itemize}
\item .NET Framework 2.0以上
\item Visual C++ライブラリDLL
\end{itemize}
それぞれ以下のURLからダウンロードしてインストールしてください。
\begin{itemize}
\item http://msdn.microsoft.com/ja-jp/netframework/aa569263.aspx
\item http://support.microsoft.com/default.aspx?scid=kb;EN-US;q259403
\end{itemize}
なおここに挙げた環境はWindowsの場合のみです。
\par
また開発環境は以下の通りです。これよりも低スペックなマシンで実行した場合合成に時間がかかる場合があります。
\par
\begin{center}
\begin{tabular}[htb]{|l|l|} \hline
CPU & Core2Quad 2.8GHz \\ \hline
RAM & 4.0GB \\ \hline
HDD & 1TB \\ \hline
\end{tabular}
\end{center}
\par
実行中はメモリをかなり消費します。
30秒の合成に500MB程度かかるのでメモリを十分確保した状態での実行をお勧めいたします。

\newpage

\section{使い方}
v.Connect-STANDをCadencii上で使うためにはいくつかの準備が必要です。
以下に挙げる手順はCadenciiに新しくインストールしたUTAU音源を
認識させる作業です。UTAU音源が認識されない状態だとv.Connect-STANDによる合成は利用できません。

\subsection{Cadenciiの言語設定}
Cadenciiはデフォルトの言語が英語に設定されているので
[Setting]→[Preference]→[Appearance] →[UI Language] から「ja」を選択してください。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_language.eps}
  }
 \end{center}
 \label{図：言語設定}
\end{figure}


\subsection{UTAU音源の登録}
\label{part:regist}
使用したいUTAU音源をインストールした後[設定]→[プリファレンス]→[UTAU音源]→[追加]と進み、
インストールしたUTAU音源のフォルダを指定してください。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_singer.eps}
  }
 \end{center}
 \label{図：音源登録}
\end{figure}


\par
UARファイルなど、UTAUの機能でインストールした音源は

\begin{verbatim}
C:\Program Files\UTAU\voice\
\end{verbatim}

以下にある場合が多いです。
こちらは個々の環境によるので、インストール・展開したフォルダを指定してください。

\par
なお、Cadenciiはoto.iniから波形や周波数表の有無をチェックします。
またcharcter.txt内に書かれている音源のキャラクター名を音源として読み込みます。
charcter.txtは必ずしも必要ではないですが複数の音源の音源名が同一になった場合、
Cadenciiが扱うxvsqファイルの制約上誤動作が起こる可能性があります。

\subsection{合成エンジンの指定}
次にCadencii上のトラックの合成エンジンをv.Connect-STANDに変更します。
下部に表示されているトラック名を右クリック→[合成エンジン]→[Straight $\times$ UTAU]に変更してください。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_engine.eps}
  }
 \end{center}
 \label{図：エンジン指定}
\end{figure}


なお、[Straight $\times$ UTAU]モードが選択できなくなっている場合は
\begin{itemize}
\item Cadenciiフォルダ内にvConnect.exeが存在しない。
\item 前節のUTAU音源の登録を行っていない
\end{itemize}
などが考えられます。UTAU音源を登録していない場合は、UTAUモード・Straight $\times$ UTAUモードとも
選択できなくなります。
\par
また複数のUTAU音源を登録した場合トラック名が置かれるTRACK欄の上にあるSINGER欄をダブルクリックして
歌手の変更\footnote{2010/11/04現在v.Connectの音符の途中での歌手変更は未実装。歌手変更自体は可能だが別のシーケンスになる、んだっけ？}を行ってください。

\subsection{デフォルト歌唱スタイルの設定}
v.Connect-STANDは様々なパラメータを使用して歌声を合成します。
そのうち音符単位で設定できるパラメータ\footnote{\ref{章：パラメータ}章\ref{節：表情プロパティ}節にて後述}
の初期値を設定します。この設定が行われない場合不自然な音声が合成される場合があります。
\par
シーケンスを入力する前、あるいはCadencii以外のシーケンサで作成したシーケンスを読み込んだ後、
[設定]→[デフォルト歌唱スタイル]を選択して設定を行ってください。
特に外部のシーケンサで作成したデータを読み込む際に歌唱スタイルが適用されない\footnote{2010/11/04現在。ほんとか？}ので、
インポートしたトラックごとにデフォルト歌唱スタイルを適用してください。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_style.eps}
  }
 \end{center}
 \label{図：歌唱スタイル}
\end{figure}


\par
v.Connectではポルタメント長の最短長を設定していないため、
\\
\begin{description}
\item[ベンドの深さ] 20〜30\%
\item[ベンドの長さ] 20〜30\%
\item[ディケイ] 50\%
\item[アクセント] 50\%
\end{description}

上記程度に設定しておくと合成結果がスムーズになる場合が多いです。
テンポやリズムによってはベンドの長さを調節した方がよい結果になる場合もあります。
これらのパラメータの働きについては\ref{章：パラメータ}章\ref{節：表情プロパティ}節にて後述します。
\par
なお[現在のトラックに適用]を選択すれば設定が現在のトラック上の全ての音符に対して適用されます。
MIDIなど他のシーケンサで作成したデータではこれらの値は0\%として読み込まれますので、
Cadencii以外で作成したシーケンスを使用する場合は読み込み毎に各トラックに対して設定を適用してください。
\\

\subsection{シーケンスの入力}
鉛筆ツールを選択した状態でピアノロール部をドラッグすると音符が作成されます。
ダブルクリックするか、音符が選択された状態で[tab]キーを押すと歌詞を変更できます。
\par
音符を選択した状態では左側のプロパティウィンドウに音符のプロパティが表示されます。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_sequence.eps}
  }
 \end{center}
 \label{図：シーケンスの入力}
\end{figure}


音符の下に表示される山型のアイコンをダブルクリックすると個々の音符の表情プロパティを、
平坦な部分をダブルクリックすると個々のビブラートの長さを設定できます。
また、プロパティウィンドウに数値を入力しても個別の音符に変更が反映されます。

\subsection{MIDIやVSQの読み込み}
Cadenciiは標準MIDIファイルやVSQ（VOCALOID,VOCALOID2用シーケンス）の読み込み機能があります。
[ファイル]→[読み込み]からVSQであれば[VSQ / Vocaloid MIDI]を、
標準MIDIファイルであれば[Standard MIDI]を選択しファイルを読み込んでください。


\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_import.eps}
  }
 \end{center}
 \label{図：MIDIのインポート}
\end{figure}


するとMIDIインポートウィンドウが表示されますのでそこから読み込みたいデータをチェックすれば、
新しいトラックに読み込んだファイルの内容が書き込まれます。
この新しいトラックではデフォルト歌唱スタイルが適用されない\footnote{2010/11/04現在。確認ミスだったらごみん。}
ので、デフォルト歌唱スタイルを前節にしたがって適用してください。

\newpage
\section{歌声制御パラメータ}
\label{章：パラメータ}


\subsection{歌詞}
v.Connect-STANDは歌詞を認識するためにUTAU音源の原音設定ファイル（oto.ini）を参照します。
v.Connect-STANDが認識できる歌詞は原音設定内のエイリアスのみです
\footnote{辞書機能は実装する予定がありません。したとしてもずっと先の話になると思います。}。
\par
UTAU音源には大まかに分けて二つの形式があります。
\begin{description}
\item[単独音] 五十音表をそのまま録音したもの。ex.)「あ」や「か」など
\item[連続音] 五十音表を組み合わせ、遷移部まで録音した形式。ex.)「a あ」や「a か」など
\end{description}
連続音は先行音の母音も含めて録音する形式で図示すると以下のようになります。

\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{u_cvvcv.eps}
  }
 \end{center}
 \label{図：単独音と連続音}
\end{figure}

単独音か連続音により歌詞の表記法が異なります。
\par
音源にもよりますがインストールした音源が単独音音源の場合は歌詞どおりに平仮名を入力する場合が多いです。
「かえるのうたが」という歌詞なら「か」「え」「る」「の」「う」「た」「が」と入力すればよいでしょう。
\par
連続音音源の場合は、先行する音符の母音を引きずった形で歌詞が表されます。
「かえるのうたが」という歌詞なら「- か」「a え」「e る」「u の」「o う」「u た」「a が」になります。
入力を簡単にするUTAU用プラグイン\footnote{
「UTAUユーザー互助会Wiki@ウィキ - プラグイン」http://www20.atwiki.jp/utaou/pages/36.html \\
こちらに歌詞を連続音化プラグインがいくつか公開されています。
}
はCadencii上で使用可能なのでそちらを利用することもできます。


\subsection{音符の表情プロパティ}
\label{節：表情プロパティ}

音符の表情プロパティでは音符一つ一つの細かな表情を操作できます。大まかに分けて
\begin{itemize}
\item ベンドの深さ・長さ
\item アクセント・ディケイ
\item ビブラート
\end{itemize}
の三種類を操作することで手軽\footnote{全てのピッチを手書きするよりは、程度と考えてください。}に歌声を操作できます。
\par
音符の表情プロパティを編集する際は、ピアノロール上の音符を右クリック→[プロパティ]を選択してください。

\subsubsection{ベンドの深さ・長さ}

人間の声は音符の音高に変化があった場合先行音と後続音の間に
ポルタメントと呼ばれる滑らかなピッチ変化が起こります。
v.Connect-STANDではこの現象をベンドの深さ・長さによって再現します。

\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{pitch.eps}
  }
 \end{center}
 \label{図：ポルタメント}
\end{figure}

プリパレーションとはピッチが動き始める前に逆方向に動く現象で、
オーバーシュートはピッチが安定する前に行き過ぎる現象です。
ベンドの長さは音符の長さの\%指定そのものです。
ベンドの深さはオーバーシュート・プリパレーションの深さを、後続音との音程の\%指定で行います。
つまり、ベンドの深さ・音程の差が大きいほどプリパレーション・オーバーシュートは大きくなります。

\subsubsection{音量プロパティ}
v.Connect-STANDはディケイ・アクセントにより個別の音符間の音量を操作できます。
大まかに分けてディケイは音符の定常部の音量、アクセントは音符のアタック部の音量を変更します。


なお、UTAUの原音は固定長終了位置の音量によって音量をそろえてから使用いたします。
そのため個別の音符の音量を考えずともある程度音量の揃った状態で歌声が出力されます。


\subsubsection{ビブラート}
Cadencii上の音符の表情プロパティからはビブラートのかかる長さのみ変更できます。
細かな設定は次節のコントロールトラックから編集できるのでそちらを参照してください。

\subsection{コントロールトラック}
コントロールトラックはCadencii上ではピアノロール下部にて編集できます。

\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_control.eps}
  }
 \end{center}
 \label{図：コントロールトラック}
\end{figure}

なお、表示したいコントロールを増やしたり減らしたりしたいときは[プリファレンス]→[外観]→
[表示するコントロール]から該当する項目のチェックを変更してください。

\begin{figure}[h]
 \begin{center}
  \fbox{
  \includegraphics[width=160mm]{c_curves.eps}
  }
 \end{center}
 \label{図：コントロールの表示}
\end{figure}

\par
コントロールトラックはVEL/DYN/PIT/PBS/GEN/BRI/CLEに対応しています。
UTAU音源を扱う都合上エンベロープのうち先行発音・オーバーラップにも対応しています。
また、ビブラートはVOCALOID2 Editorとは異なりコントロールトラック上でポルタメントの速さ・深さを編集します。
ビブラートの細かな編集をしたい場合は、VibratoRate・VibratoDepthのチェック欄にチェックをつけてください。


\subsubsection{VEL}
VOCALOID2及びv.Connect-STANDにおいてVELは子音速度を表します。
実装自体は大きく違うので効果のほどは違いますが、おおむね該当する音符のアタック部分までが変化します。
デフォルト値は64で値を0にすると子音速度が0.5倍・子音長が2倍となり、
値を128にすると子音速度が2倍・子音長が0.5倍になります。
\par
当ツールでは発音の遷移部の速度がそのまま変化いたしますので、
舌っ足らずになるなど遷移部分の違和感はVELで多少軽減できる可能性があります。

\subsubsection{DYN}
振幅を操作します。デフォルト値は64で単純に0〜127の間で振幅を変更します。

\subsubsection{PIT/PBS}
ピッチを変化させます。PBSで指定した量が最大変化幅になり、PITでその幅内を変化させます。
PBSは0〜12・PITは-8192〜8191の間で変化しデフォルト値はそれぞれ2,0です。


\subsubsection{GEN}
スペクトルを線形に伸縮します。GENを下げるとテープを早く回したときのような声になり、
上げると逆にテープを遅く回したときのような声になります。0〜127まで変化でき、デフォルト値は64です。

\subsubsection{BRI/CLE}
BRI/CLEはVoice Texturing技術を用いて
声色を変化させるパラメータです\footnote{そうなったらいいなぁ。実装見直し中のため処理を凍結中です。}。
内部で使用される形式がまだ未定なので、\ref{章：周波数変換}章で説明はするものの
開発中につき仕様が著しく変更される場合があります。

\subsubsection{エンベロープ}
v.Connect-STANDは発音位置を音符の位置及びエンベロープから計算します。
ここで変更できる値は先行発音とオーバーラップでそれぞれ
\begin{itemize}
  \item 先行発音：発音位置を音符位置から指定された量だけ前にずらします。
  \item オーバーラップ： 該当する音符が単独音である場合、指定された量だけ該当する音符に先行する音符の長さを長くします。
\end{itemize}
という機能を持ちます。指定はミリ秒単位です。
Cadenciiは歌詞を入力した際に該当するUTAU原音設定をエンベロープの値に設定します。

\newpage
\section{トラブルシューティング}

\subsection{Cadenciiが起動しない}
\begin{itemize}
  \item \ref{part:environment}節に従って.NET Framework 2.0以上のランタイムをインストールしてください。
\end{itemize}

\subsection{v.Connect-STANDを合成エンジンに指定できない}
\begin{itemize}
  \item UTAU音源が登録されているか確認してください。未登録の場合\ref{part:regist}節に従ってUTAU音源を登録してください。
\end{itemize}

\subsection{音が鳴らない}
\begin{itemize}
  \item \ref{part:environment}節に従ってVisualC++ランタイムをインストールしてください。なお、Cadenciiフォルダ内のvConnect.exeをダブルクリックしたときにエラーダイアログが表示されなければ正しくインストールされています。
  \item UTAU音源中に存在する歌詞か確認してください。UTAU音源内のoto.ini中の歌詞のみ使用可能です。
  \item DYNの値やアクセント／ディケイの値が正しく設定されているか確認してください。
\end{itemize}

\subsection{発音がおかしい}
\begin{itemize}
  \item 各音符の先行発音が正しく設定されているか確認してください。なお、Cadencii上で先行発音などが設定されるタイミングは音符に歌詞が入力されるタイミングです。歌詞を変更するプラグインを使用した場合も同様です。
  \item VELの値が正しく設定されているか確認してください。デフォルト値は64でそれ以上だと発音が短く・それ以下だと発音が長くなります。
  \item アクセント／ディケイの値が正しく設定されているか確認してください。
\end{itemize}

\subsection{音程が滑らかに繋がらない}
\begin{itemize}
  \item ベンドの深さ／長さが正しく設定されているか確認してください。特にベンドの長さが極端に短い場合は音の繋がりが不自然になることがあります。
\end{itemize}

\subsection{音量の遷移が不自然}
\begin{itemize}
  \item アクセント／ディケイの値が正しく設定されているか確認してください。
  \item v.Connect-STANDは音源中の波形データを使用する前に音量を揃える動作を行います。発音によって音量の小さな音素があった場合接続が不自然になる場合があります。
\end{itemize}

\newpage
\section{コマンドライン}
v.Connect-STANDはコマンドラインアプリケーションです。
コマンドラインから以下のような形で使用が可能\footnote{あまりお勧めはしません。}です。
\begin{verbatim}
 vConnect [vsq_meta_text_path] [out_wave_path]
\end{verbatim}

あるいは
\begin{verbatim}
 vConnect -i [vsq_meta_text_path] -o [out_wave_path] {options}
\end{verbatim}
の形でコマンドラインから合成が可能です。

\par
またWORLDのスペクトルを出力するオプションを使用すれば、
\begin{verbatim}
 vConnect -w -i [utau_oto_ini_path] -l [alias_to_analyze] -o [out_wsp_path] {options}
\end{verbatim}
の形で指定した音素のWORLD分析結果をwsp形式\footnote{詳細未定。現在はアスキー文字で各種情報を列記。}で出力できます。

\subsection{オプション}
v.Connect-STANDが受け付けるオプションの種類と意味は以下の通りです。
\begin{verbatim}
 -i [path]                       path of input-file
 -o [path]                       path of output-file
 -s                              slow synthesize mode
 -nf0                            no spectral transform by f0
 -nvn                            no volume normalization
 -w                              wsp output mode
 -l [alias]                      alias of oto.ini with -w option
 -charset-otoini [charset-name]  charset of oto.ini (default: Shift_JIS)
 -charset-vxt [charset-name]     charset of input-file (default: Shift_JIS)
 -list-charset                   print supported charset list
\end{verbatim}
なおコマンドラインオプション等の仕様は実装により頻繁に変化する場合があります。
最新版でのオプションはsouceforge上のソースコードを参照してください。


\newpage
\section{付録資料}
\subsection{動作の流れ}
v.Connect-STANDはCadenciiから拡張VSQメタテキストを受け取り、
それをもとにUTAU音源から波形を取り出しWORLDにスペクトルを計算する。
加えて、VSQメタテキスト内のピッチ情報から基本周波数を計算し、
適切な位置のスペクトルを取り出しピッチ情報とあわせてWORLDに再合成させることにより音声を得る。

\begin{figure}[h]
  \begin{center}
    \fbox{
      \includegraphics[width=160mm]{v_abstract.eps}
    }
  \end{center}
  \label{図：動作概要}
\end{figure}

WORLDは声の特徴\footnote{厳密にはSTARスペクトルとPLATINUM非周期性指標}
とピッチに分ける、あるいは声の特徴とピッチから音声を合成するVocoderベースの音声分析合成系である。
v.Connect-STANDはVSQメタテキストをもとにUTAU音源からWORLDを使用して音声の分析・再合成を
自動的に行うように設計されている。

\newpage
\subsection{スペクトル接続規則}
\label{章：接続規則}
v.Connect-STANDはシーケンス内に記述された値から、その時刻に適したSTARスペクトルを検索する。
その際発音位置や音符長はvsq拡張メタテキスト内に記述された先行発音・オーバーラップ・歌詞・ベロシティから
適宜計算され、その値を使用し必要であれば接続時に対数スペクトルでの加減算を行う。

\subsubsection{発音位置}
\label{節：発音位置}
発音位置は音符の位置$t_{\rm note}$[s]，ベロシティ$v$[-]，先行発音長$l_{\rm pre}$[s]によって決定される。
ここで、実際の発音位置$t_{\rm actual}$は
\begin{equation}
\label{eq:note-position}
t_{\rm actual}=t_{\rm note} - l_{\rm pre} \times 2^{\frac{(64-v)}{64}}
\end{equation}
で与えられる。ベロシティは0〜127の値をとるので、\ref{節：検索位置}節と合わせて
子音部分の長さが2〜$\displaystyle \frac{1}{2}$倍の間で変化する。

\subsubsection{検索位置}
\label{節：検索位置}
UTAU音源内の波形ファイルは歌詞情報と原音設定から切り出して使用する。
その際ベロシティによって時間伸縮を行う。$n$番目の先行発音による補正後の発音位置が$t_{actual}$[s]で
シーケンス内の時刻$t$[s]のときに
切り出した波形内での時刻$T_n(t)$[s]は、UTAU原音設定内の固定長$l_{\rm fixed}$[s]として
\begin{equation}
T_n(t) = \left\{
  \begin{array}{ll}
    (t - t_{\rm actual}) \times \displaystyle \frac{1}{2^{\frac{(64-v)}{64}}} , & T_n(t) \leq l_{fixed}
  \\
    l_{\rm fixed}, & {\rm else}.
  \end{array} \right.
\end{equation}
で与えられる。

\subsubsection{発音長}
v.Connect-STANDでは発音長は音符の長さ・先行発音・オーバーラップおよび歌詞によって
決定される\footnote{直感的に言ってしまえば、先行発音分の調整を行っています。}\footnote{オーバーラップが考慮されるのは先行音と近接した単独音歌詞をもつ音符のみです。}。
\par
まず$n$番目の音符の長さを$l_{\rm tick}$[s]として仮の長さ$\tilde{l_n}$[s]を以下のようにする。
\begin{equation}
\tilde{l_n} = l_{\rm tick} + l_{\rm pre} \times 2^{\frac{(64-v)}{64}}
\end{equation}
このとき、実際の長さ$l_n$[s]は$n+1$番目の発音位置$t_{n+1}$と歌詞が連続音かどうかのブール値isVCVにより
\begin{equation}
l_n = \left\{
  \begin{array}{ll}
    \tilde{l_n}, & {\rm isVCV} = {\rm true} \ \ or\ \ t_n + \tilde{l_n} < t_{n+1}
  \\
    t_{n+1} - t_n + l_{\rm overlap}, & {\rm else}.
  \end{array} \right.
\end{equation}
で与えられる。ここで、$l_{\rm overlap}$は$n+1$番目のノートが持つオーバーラップの値である。

\subsubsection{スペクトル}
v.Connect-STANDは以上の副節で設定した値を用いて各波形からSTARスペクトルを計算し、
対数スペクトル上での加減算を行って合成時に使用するスペクトルを得ます。\par
\ref{節：検索位置}節で得られた元波形内での時刻を元に、
n番目とn+1番目の時刻tに対応するSTARスペクトル$X_n(T_n(t)), \ X_{n+1}(T_{n+1}(t))$を検索する。
これらに対して、合成に使用するスペクトル$X(t)$は
\begin{equation}
\log X(t) =  \left\{
  \begin{array}{ll}
    r(t)\log X_n + (1-r(t)) \log X_{n+1}, & t \leq t_n + l_n \ \ and \ \ t_{n+1} \leq t
  \\
    \log X_n, & {\rm else}.
  \end{array} \right.
\end{equation}
で与えられる。このとき$r(t)$は
\begin{equation}
r(t) = \left\{
  \begin{array}{ll}
    \frac{t}{1-t}
  \\
    1 & {\rm else}.
  \end{array}
\right.
\end{equation}
により与えられる。
\par
直感的に言えば、副節で求めた発音位置・発音長を基に後続音と重なる部分があれば滑らかに接続する処理を行っている。

\newpage

\subsection{音程遷移規則}
v.Connect-STANDの音程遷移規則はSingBySpeaking\cite{SingBySpeaking}やMandarinSynthesis\cite{Mandarin}などを
参考に、よりシンセサイザーとして分かりやすい形にして実装している。
\par
歌声音声中の基本周波数の変化は
\begin{enumerate}
  \item{ポルタメント}
  \item{プリパレーション}
  \item{オーバーシュート}
  \item{ビブラート}
  \item{微細振動}
\end{enumerate}
に分けて考えられることが多く、このうち１〜４は一般的に伝達関数が \\
$H (s)=\displaystyle \frac{k}{s^2 + 2\zeta \omega s +\omega^2} $のフィルタで考える場合が多いが、
v.Connect-STANDでは処理量と合成結果を鑑みた結果、
近似式を用いている\footnote{伝達関数が時間変化して都合が悪いのに加えて、合成結果にさほど差が無かった}。


\subsubsection{ポルタメント}
現在の音符と次の音符の周波数をそれぞれ$f_{\rm 1}$ [Hz]、$f_{\rm 2}$ [Hz]とし、現在の音符の開始位置を$t_{\rm 1}$ [s]、
現在の音符長を$l_{\rm 1}$ [s]、現在の音符長に対するベンド長の割合を$r_{\rm 1}$ [-] ($0 \leq r_{\rm 1} \leq 1$)としたとき、
ポルタメントを考慮した周波数$f_{\rm por}$ [Hz]は以下のようになる。
\begin{equation}
  f_{\rm por}(t)=f_{\rm 1} + \frac{1}{2}(1 - \cos \pi x)(f_{\rm 2} - f_{\rm 1}), t_{\rm 1} \leq t \leq t_{\rm 1} + l_{\rm 1}.
\end{equation}
ただし、
\begin{equation}
  x(t)= \left\{
  \begin{array}{ll}
    \displaystyle \frac{t - \bigl\{ t_{\rm 1} + (1 - r_{\rm 1} ) l_{\rm 1} \bigr\}}{ r_{\rm 1} l_{\rm 1} }, & t_{\rm 1} + (1 - r_{\rm 1})l_{\rm 1} \leq t \leq t_{\rm 1} + l_{\rm 1},
  \\
    0, & {\rm else}.
  \end{array} \right.
\end{equation}
より直感的に言ってしまえば\ref{章：接続規則}章の接続規則で計算した発音位置・長さをもとに、
元の音符長のうちベンドの長さでパーセント指定された長さだけ滑らかに接続している(図\ref{図：ポルタメント}参照)。
\begin{figure}[h]
  \begin{center}
    \begin{overpic}[width=100mm,clip]{c_portamento.eps}
      \put(48,3){$t_{\rm 1}$}
      \put(145,3){$t_{\rm 1} + l_{\rm 1}$}
      \put(7,58){$f_{\rm 1}$}
      \put(7,148){$f_{\rm 2}$}
      \put(62,28){$(1 - r_{\rm 1}) l_{\rm 1}$}
      \put(132,28){$r_{\rm 1} l_{\rm 1}$}
      \put(36,170){周波数$f$}
      \put(237,23){時刻$t$}
    \end{overpic}
  \end{center}
  \caption{ポルタメント}
  \label{図：ポルタメント}
\end{figure}

\subsubsection{プリパレーション・オーバーシュート}
プリパレーションとオーバーシュートを適用した周波数$f_{\rm dep}$は
\begin{equation}
  f_{\rm dep}(t) = \left\{
  \begin{array}{ll}
    f_{\rm por}(t) \times pow(f_{\rm 1} - f_{\rm 2},\ \sin (2 \pi \frac{t-t_{\rm 2}}{r_{\rm 1} l_{\rm 2}})),
    & |t - t_{\rm 2}| \leq r_{\rm 1} l_{\rm 1},
  \\
    f_{\rm por}(t), & {\rm else}.
  \end{array} \right.
\end{equation}
で与えられる。ポルタメントを中心に減衰振動様のピッチ変動を加えることで実装している。
この２要素によるピッチ変動の長さはポルタメントの長さ、つまり先行音における音符の長さにベンドの長さをかけたもの、
により決定され、ピッチ変動の大きさはベンドの深さ分だけ音符間の周波数の差を乗じたものとなる。

\subsubsection{ビブラート}

\subsubsection{微細振動}

\newpage


\subsection{音量遷移規則}
v.Connect-STANDでは音量の調節は大まかにWORLDによる分析合成の前後で二つに分けられる。すなわち
\begin{enumerate}
\item 分析時の正規化
\item 音量遷移規則による音量曲線の編集
\end{enumerate}
の二つである。

\par

\par
また、音量遷移規則による音量曲線の編集段階では合成後に歌声の表情としての音量変化を付加させる。
三種類の音量遷移規則が存在し、それぞれ
\begin{enumerate}
\item DYNパラメータによる音量操作
\item Accent/Decayパラメータによる音量操作
\item 旋律末尾における語尾処理
\end{enumerate}
である。ここでは振幅増幅関数$a(t)$を使用する。WORLDによる合成後の音声$\tilde{y}(t)$に対し、
実際にv.Connect-STANDが出力する音声$y(t)$は、

\begin{equation}
y(t) = \tilde{y}(t) \times a(t)
\end{equation}

で与えられる。ただしDYNによる音量変化を$a_{\rm dyn}(t)$、Accent/Decayによる音量変化を
$a_{\rm acc}(t)$、音符末尾における語尾処理による音量変化を$a_{\rm tail}(t)$としたときに、

\begin{equation}
a(t) = a_{\rm dyn}(t) \times a_{\rm acc}(t) \times a_{\rm tail}(t)
\end{equation}
でa(t)は与えられる\footnote{$a(t)$は実処理中では1[ms]単位か2[ms]単位で与えられるので間の値は線形補間される。}。
各関数は後節で定義するものとする。


\subsubsection{分析時の正規化}
UTAU音源内には音量のばらつきが存在する。
音量のばらつきを最低限のものとするために原音内の音量を用いてあらかじめ波形を正規化する。
\par
まず、時刻$t$における音量$A$を以下の式で定める。
\begin{equation}
A(t) = \sqrt{ \frac{1}{2N} \sum_{i=-N}^{N} |h(i) \times x(t+i)|^2 }
\end{equation}
ここで$x(t)$は波形とし、$h(n)$は$2N$の長さのハニング窓とする。音量をこのように定義し
UTAU音源から切り出した波形の開始時刻を$t_{\rm begin}$、固定長終了位置を$t_{\rm cend}$としたとき、
\begin{equation}
v = {\rm max}( \ A(t_{\rm begin}),\ \ A(t_{\rm cend})\  )
\end{equation}
なる$v$を正規化に使う音量とする。ここで${\rm max}(x, y)$は$x\leq y$で$y$を、それ以外で$x$を返す
関数である\footnote{要は頭と固定長終了時の大きい方で正規化すれば問題が少ないだろうと言う打算。}。
ここで、
\begin{equation}
\tilde{x}(t) = \frac{x(t)}{v}
\end{equation}
なる$\tilde{x}(t)$を使用しWORLDにより合成に使用するパラメータを分析させる。詳細は参考文献\cite{DIO}\cite{STAR}
を参照のこと。


\subsubsection{DYNパラメータによる音量操作}
時刻$t$におけるDYNの値を$d(t)$としたとき、DYNによる振幅増幅関数$a_{\rm dyn}(t)$は
\begin{equation}
a_{\rm dyn}(t) = \frac{d(t)}{64}
\end{equation}
で与えられる。


\subsubsection{Accent/Decayパラメータによる音量操作}
暫定実装につき詳細は割愛。アタック位置を固定長終了位置、
ディケイ位置を固定長終了位置と音符終了位置との中点とし間を余弦関数を使用して滑らかに繋ぐ関数としている。


\subsubsection{旋律末尾における語尾処理}
v.Connect-STANDは後続音を持たない音符に対しては旋律末尾だと解釈し音量による語尾処理を行う。
前節で求めた該当音符の終了時刻$t_{\rm end}$を用いて、
\begin{equation}
  a_{\rm tail}(t) = \left\{
  \begin{array}{ll}
  \frac{ | t_{\rm end} - t | }{c}, & 0 < t_{\rm end} - t < c
  \\
  0, & t_{\rm end} - t \leq 0
  \\
  1, & {\rm else}
  \end{array} \right.
\end{equation}
ここで$c$は定数で暫定的に50[ms]としている\footnote{違和感を減じるためだけの処理です。}。

\newpage
\subsection{周波数変換}
\label{章：周波数変換}
ただいま実装を変更中。

\newpage
\begin{thebibliography}{9}
 \bibitem{DIO}
   森勢将雅, 河原英紀, 西浦敬信;
   ``基本波検出に基づく高SNRの音声を対象とした高速なF0推定法,''
   {\it 電子情報通信学会 論文誌D},
   {\bf J93-D},
   109-117 (2010)

 \bibitem{STAR}
   森勢将雅, 中野皓太, 西浦敬信;
   ``歌唱合成システムの実現を目的とした高品質音声分析合成法の提案,''
   {\it IEICE technical report},
   {\bf 110}(71),
   89-94 (2010)

 \bibitem{UTAU}
   飴屋／菖蒲; ``歌声合成ツールUTAU サポートページ,'' http://utau2008.web.fc2.com/

 \bibitem{VOCALOID2}
   Bonada, J., Serra, X.;
   ``Synthesis of the Singing Voice by Performance Sampling and Spectral Model,''
   {\it IEEE Signal Processing Magazine},
   {\bf 24}(2),
   67-79 (2007)

 \bibitem{Cadencii}
   kbinani; ``cadencii\_jp @ wiki - Cadencii,'' http://www9.atwiki.jp/boare/pages/18.html

 \bibitem{FFTW}
   Matteo Frigo, Steven G. Johnson; ``FFTW Home Page'' http://www.fftw.org/

 \bibitem{libiconv}
   Free Software Foundation, Inc.; ``libiconv - GNU Project - Free Software Foundation,'' http://www.gnu.org/software/libiconv/

 \bibitem{SingBySpeaking}
   齋藤毅, 後藤真孝, 鵜木祐史, 赤木正人;
   ``SingBySpeaking：歌声知覚に重要な音響特徴を制御して話声を歌声に変換するシステム,''
   {\it 情報処理学会研究報告},
   2008-MUS-74-5

 \bibitem{Mandarin}
   Shu-Sen Zhou, Qing-Cai Chen, Dan-Dan Wang, Xiao-Hong Yang;
   ``A corpus-based concatenative Mandarin singing voice synthesis system,''
   {\it Machine Learning and Cybernetics}, {\it 2008 International Conference on},
   {\bf 5},
   2695-2699 (2008)
   
\end{thebibliography}


\end{document}
