カテゴリー別アーカイブ: ボイスチェンジャー

ボイスチェンジャー作成(2)

ボイスチェンジャーというか、誰かの声に似るようにするのを「統計的声質変換」と呼ぶらしい。このあたりについて調べてみる。

読んだブログ記事

  • http://kivantium.hateblo.jp/entry/2015/12/19/000631
  • http://sesenosannko.hatenablog.com/category/%E7%B5%B1%E8%A8%88%E7%9A%84%E5%A3%B0%E8%B3%AA%E5%A4%89%E6%8F%9B
  • http://r9y9.github.io/blog/2014/11/12/statistical-voice-conversion-code/
  • https://www.slideshare.net/NU_I_TODALAB/ss-76323512

ブログを読んだ感想としては「専門用語が多いですね」「思ってたよりも大変そうですね」「みなさん楽しそうですね」だったので、私もこれら記事にある内容をなぞっていこうと思います。まずはブログ中の専門用語がどういう意味なのかの概略がわかるように調べていこうと思います。

具体的な作業については次の記事でやっていく予定です。
とりあえず、適当でいいんで音を変質させたりしてみたいです。

ボイスチェンジャー作成(1)

VTuber をやってみようと思って既存のボイスチェンジャーを調べてみた。
そしたら自分でも作ってみたくなったので、作ってみる。

まずは、マイクの音を wav ファイルに出力するプログラムを作ろうと思う。
開発言語は .NET の C# で、マイクは手持ちの UAB-80 を使う。

NAudio を使うことにしたので nuget でインストールする。

NAudio のページに録音のサンプルがあったのでそれを元に Console アプリを作る。
https://github.com/naudio/NAudio/blob/master/Docs/RecordWavFileWinFormsWaveIn.md

で、こんなソースコードでマイクからの入力を wav ファイルとして録音できた。NAudio すごい便利。

    class Program
    {
        static void Main(string[] args)
        {
            var waveIn = new WaveInEvent();
            var writer = new WaveFileWriter("output.wav", waveIn.WaveFormat);

            waveIn.DataAvailable += (s, a) =>
            {
                writer.Write(a.Buffer, 0, a.BytesRecorded);
                if (writer.Position > waveIn.WaveFormat.AverageBytesPerSecond * 30)
                {
                    waveIn.StopRecording();
                }
            };

            waveIn.RecordingStopped += (s, a) =>
            {
                writer.Dispose();
                waveIn.Dispose();
            };

            Console.WriteLine("Start");
            waveIn.StartRecording();

            System.Threading.Thread.Sleep(5000);

            waveIn.StopRecording();
            Console.WriteLine("Stop");
        }
    }

次は、録音した Wave ファイルのデータを可視化して、他の人の声と比べてみようと思う。