\documentclass[dvipdfmx,a4j]{jarticle}
\addtolength{\topmargin}{-2cm}
\addtolength{\textheight}{4cm}
\addtolength{\textwidth}{2cm}
\addtolength{\oddsidemargin}{-1cm}
\addtolength{\evensidemargin}{-1cm}
%\usepackage{tikz}

\title{WORLDを利用した歌声合成システム}
%\title{伊藤の卒論}
\author{c1150228 伊藤志帆}
\date{平成30年11月13日}
\begin{document}
\twocolumn[
\maketitle
\begin{center}
 {\bfseries 概要}
\end{center}
音声分析合成ライブラリ「WORLD」などのオープンソースソフトウェアを用いて、マルチプラットフォームで動作する歌声合成システムを作成する。
 \vspace*{2em}
]
\section{目的}
クリプトン・フューチャー・メディアの製品「初音ミク」に端を発するVOCALOID
文化の成長により、近年、コンピュータによって合成された歌声で表現される音楽が
人びとの耳に届くようになっている。時間や報酬を問わず、何度でも録り直しに
応えてくれる電子の歌手の普及は、歌のついた楽曲を制作することへのハードルを
大きく下げた。\par
有償無償を問わず、多くの歌声合成ソフトウェアが開発されたが、その多くは
WindowsやMacOSといったコストの高いOS上でしか動作しない。そのため、Unixや
Linuxなどのオープンソースな環境でクオリティの高い歌声合成を楽しむ手段は
少ない。
\par
そこで、音声分析合成ライブラリ「WORLD」などのオープンソースソフトウェアを用いて、マルチプラットフォームで動作する歌声合成システムを作成する。

\section{既存のシステム・製品}
コンピュータ上で歌声を合成するシステムは数多く存在しているため、その一部
を例として挙げる。\par
オープンソースソフトウェアとして利用できるものには、以下のようなものがあ
る。
\begin{itemize}
 \item Sinsy
 \item OpenUTAU
\end{itemize}
商業製品やソースコードが公開されていないものには、以下のようなものがある。
\begin{itemize}
 \item VOCALOID(YAMAHA株式会社)
 \item AquesTone(株式会社アクエスト)
 \item UTAU(飴屋/菖蒲)
\end{itemize}

\section{環境}
現在開発に使用している環境は以下のとおりである。
\begin{itemize}
 \item Ubuntu 14.04.5 LTS
 \item Ruby v.2.6.0dev
       \begin{itemize}
	\item RubyGem
	\item wav-file
        \item inifile
       \end{itemize}
 \item Python v.3.6.5
       \begin{itemize}
	\item pip
	\item pyworld
	\item SoundFile
       \end{itemize}
\end{itemize}

\section{用語説明}
一般的でない用語を以下で説明する。
\subsection{Sinsy}
名古屋工業大学で開発された、オープンソースの音声合成システム。\par
MusicXML形式の楽譜に基づいて、任意の歌声を生成する。合成できる歌声の言語は日本語、英語、中国語の3種類であり、それぞれの言語に専用の音声ライブラリが用意されている。\par
音声ライブラリの生成と歌声の合成には、隠れマルコフモデルとディープニューラルネットワークの2種類の方式を採用している。\par
コンピュータ上にインストールしなくても、Webアプリケーションとして使用できるため、比較的手軽に高品質な歌声を得ることができる。\par
しかし、現時点ではWebアプリケーション以外にGUIは存在せず、オプションで調節できるパラメータも「声質」「ビブラート」「ピッチシフト」の3種類と、決して多くはない。そのため、音量やしゃくり、こぶしなどの細かい歌い方を反映するには、一度音声ファイルに書き出した後に別のソフトウェアで加工する必要がある。
\subsection{WORLD\cite{151422_6Jul18}}
森勢将雅氏によって開発された音声分析変換合成ライブラリ。肉声と区別でき
ないほどに高品質の音声合成を実現するために開発された。\par
WORLDをPythonで動作させるためのライブラリとしてpyworldが存在しているので、本研究ではそちらを利用する。
\subsection{UTAU}
歌声合成ツール「UTAU」(以下UTAU)は、飴屋/菖蒲氏が開発
したWindows向けフリーソフトウェアである。\par
その最大の特長は、歌声のベースとなる音声ライブラリをユーザが自由に作成・
公開できる点にある。有志によってライブラ
リ作成の作業を一部簡略化するツールキットが公開されていることもあり、2012
年時点で3000強のライブラリが存在すると推測されている。\par
UTAU本体はオープンソースではないが、音声ライブラリや、データ保存のた
めのシーケンスファイルは非常に単純なつくりになっており、容易に内容や仕様
を知ることが出来る。そのため、UTAU向けに作られたデータを他のソフトウェア
やシステムに流用しやすい状態になっている。


\section{動作概要}
システムの概要を記述する。\par
UTAU向けに作られたデータは膨大かつ入手が容易であり、読込みや書込みに特殊
なプログラム等を必要としない。その利点を活かすために、システムはなるべく
そういったリソースを活用できる設計にする。\par
システムは以下のような流れで動作する。
\subsection{ustファイルの読み込み}
ustとは、「UTAU Sequence Text」の略で、UTAUで採用されているデータ保存形
式とその拡張子の名前である。その実態はini形式のテキストデータであり、比較的容易に読み書きすることができる。\par
本システムではこの形式で記述されたシーケンスデータをもとに、音声データを
生成する。\par
テキストデータを読みこんで、音程や歌詞、音長の指示を連想配列に変換しておく。

\subsection{音声ライブラリの読み込み}
音声ライブラリは、wav形式の音声データと、それをシステムから呼び出すためのini形式テキストデータの「oto.ini」と呼ばれる設定ファイルで構成されている。\par
oto.iniを読みこみ、前項の連想配列に格納された歌詞の指示をもとに、ど
の音声ファイルのどの部分を取りだすか決定する。

\subsection{音長の変更}
Rubyのwav-fileライブラリ(以下wav-file)を用いて、取りだした音声ファイルの長さを一音ごと
に変更する。処理が済んだ音声ファイルは、連番ファイル名をつけてwav形式でキャッシュディレクトリ内に保存する。

\subsection{音程の変更}
キャッシュディレクトリからファイルを一つづつ取り出して、pyworldを用いて音程を変更する。処理が済んだ音声ファイルで、キャッシュディレクトリ内の同名ファイルを置き換える。

\subsection{wavファイルの生成}
wav-fileを用いて、キャッシュディレクトリ内のデータを、楽譜の基づいた順番とタイミングで並べ、ひとつのwavファイルとして出力する。
%処理が済んだデータを、PythonのSoundFileライブラリを用いてwavファイルに出力する。

%本システムで合成された音声は最終的にwavファイルとして出力される。

\section{展望}
今後の展望として以下が挙げられる。
\begin{itemize}
 \item GUIを作る\par
       現状の設計では、ustファイルの作成をUTAUやその周辺ツールの機能に頼っ
       ている。
       ustファイル自体はテキストデータなので容易に読み書きできるが、設定されるパラメータの数が多いため、人の手で正確に記述するのは困難である。
       そのため、何らかの理由でUTAUや周辺ツールが使えなくなると、システム
       が成り立たなくなる可能性がある。
       そういった事態を避けるために、GUIを操作してustを作成し、また実際
       に合成された音を聞きながらクオリティをたかめていくために、GUIの実
       装を行う。
 \item OSSとして公開する\par
       オープンソースソフトウェアとして公開することで、Windows以外のプラッ
       トフォームでも歌声合成を気軽に扱えるようにする。
\end{itemize}

\begin{thebibliography}{9}
 \bibitem{151422_6Jul18} 森勢将雅.「WORLD」.\par
http://www.kki.yamanashi.ac.jp/\par
~mmorise/world/index.html(2018.7.8参照)
\end{thebibliography}



\end{document}
