Help us understand the problem. What is going on with this article?

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

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/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした