LoginSignup
4
1

More than 3 years have passed since last update.

WORLDの特徴量をcsvに出力してみた

Last updated at Posted at 2019-08-20

WORLDとは

音声分析変換合成システムの1つで,UTAUやCeVIOの音声分析の一部にもWORLDが使われているそうです.

詳しい内容はこちらの論文を参照してください.
https://pdfs.semanticscholar.org/560a/be3b4482335a93df309cb6a0185ccc3ebd8e.pdf?_ga=2.60932075.677969946.1566283448-268225603.1564207121

WORLDの特徴量

以下の3つの特徴量で構成されています.

■基本周波数(F0)
 簡単に言えば「音の高さ」のことです.

■スペクトル包絡
 人の声道特性のことですが,わかりやすく言うと「音色」のことです.

■非周期性指標
 「音のかすれ具合」などのことです.

それぞれの特徴量は5msごとに取得していきます.
サンプリング数16kの音声を分析するときは以下の次元数を取得できます.
※スペクトル包絡と非周期性指標はサンプリング数に依存します.

・基本周波数:1次元
・スペクトル包絡:513次元
・非周期性指標:513次元

実行環境

今回試した環境は以下の通りです.
OS: Ubuntu 18.04 LTS
CPU: i3-4130 3.40GHz
メモリ: 16GB

1. 準備

Pythonではpyworldが用意されていますが,今回はWORLD4pyを使っていきます.
以下のコードでWORLD4pyをクローンしてください.

$ git clone https://github.com/yamachu/WORLD4py.git

次に以下のコードでsetupしていきます.

$ cd WORLD4py
$ python setup.py install

ここまでが準備となります.

2. WORLDを実行

以下のコードでdemoディレクトリに移動します.

$ cd demo

次に以下のサンプルプログラムを作成します.
※このサンプルはこちらのREADME.md を参考にしています.

wav2world_features.py
# -*- Coding: utf-8 -*-
from world4py.np import apis, tools
import numpy as np

# please write Wavfile name
Wavfile_name = "sample.wav"

# get waveform from file
x, fs, nbit = tools.get_wave_parameters(Wavfile_name)

ana_param = {
    'threshold': 0.1,
    'frame_period': 5.0,
    'f0_ceil': 800.0,
}

#####################################
# can use Python wave module
# f0: 基本周波数
# sp: スペクトル包絡
# ap: 非周期性指標
#####################################
f0, sp, ap = apis.extract_all_from_waveform(x, fs, ana_param)
syn = apis.synthesis(f0, sp, ap, fs)

# 基本周波数とスペクトル包絡と非周期性指標を水平スタックしている
f0_re = np.reshape(f0, (len(f0), 1))
f0_sp = np.hstack([f0_re,sp])
all_features = np.hstack([f0_sp,ap])

# make csv file for WORLD features
with open(Wavfile_name.replace(".wav", "_syn.csv"), mode='w') as f:
    for all_part in all_features:
        for all_part_one in all_part:
            f.write(str(all_part_one)+",")
        f.write("\n")

# make synthesis_Wavfile
tools.write_wav_file(Wavfile_name.replace(".wav", "_syn.wav"), syn, fs, nbit)

そして,以下のコードで作成したPythonファイルを実行します.

$ python wav2world_features.py

実行し終わったら,同じディレクトリに「sample_syn.wav」と「sample_syn.csv」があることを確認しましょう.

$ ls
main.py  sample.wav  sample_syn.csv  sample_syn.wav  wav2world_features.py

確認できたら,無事終了です.
※「sample_syn.wav」:元音声をWORLD分析して作成した合成音声
 「sample_syn.csv」:左から基本周波数(1次元),スペクトル包絡(513次元),非周期性指標(513次元)の順番になっているcsvファイル

尚,音声はWORLD4py同様,交換音ラボ様の音声を使用しています.

参考文献

http://www.kki.yamanashi.ac.jp/~mmorise/world/introductions.html
https://github.com/yamachu/WORLD4py
https://qiita.com/ohtaman/items/84426cee09c2ba4abc22
https://github.com/mmorise/World
https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder
https://soundeffect-lab.info/

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1