resamp module

class resamp.Resamp(input_path: str, output_path: str, target_tone: str, velocity: 100, flag_value: str = '', offset: float = 0, target_ms: float = 0, fixed_ms: float = 0, end_ms: float = 0, volume: int = 100, modulation: int = 0, tempo: str = '!120', pitchbend: str = '')

ベースクラス: object

伸縮機の実際の動作を規定します。
処理の順序は下記の通り
  1. フラグをパース

  2. 入力ファイルのworldパラメータを取得

    1. wavファイルの読み込み

    2. harvestでf0取得

    3. stonemaskでf0補正

    4. cheaptrickでスペクトル包絡取得

    5. d4cで非周期性指標取得

  3. worldパラメータの伸縮(長さ)

  4. 音高・モジュレーションの適用(ピッチ)

  5. ピッチの適用(tフラグもここで適用)

  6. worldパラメーター用の加工処理

    1. f0に影響するフラグ

    2. スペクトル包絡に影響するフラグ(gフラグ)

    3. 非周期性指標に影響するフラグ(Bフラグ)

  7. 音声合成

  8. wav波形の加工処理

    1. 音量に関するフラグ(Pフラグ)

  9. 音量の適用

  10. wavファイルの出力

input_path

原音のファイル名

Type

str

input_data

wavから読み込んだ波形データ

Type

np.ndarray of float64

framerate

wavのサンプリング周波数

Type

int

f0
wavのf0(音高)データの1次元配列。
settings.PYWORLD_PERIOD(デフォルト5ms)毎に生成される。
Type

np.ndarray of float64

t
各フレームの時間的位置(sec)
settings.PYWORLD_PERIOD(デフォルト5ms)毎に生成される。
例えば、settings.PYWORLD_PERIOD=5のとき、t[100]=0.5
Type

np.ndarray of float64

sp
wavのスペクトル包絡(声質)データの2次元配列。
1次元目は時間軸で、settings.PYWORLD_PERIOD(デフォルト5ms)毎に生成される。
2次元目は周波数軸で、fft_sizeに基づき決定する。
Type

np.ndarray of float64

ap
wavの非周期性指標データの2次元配列。
1次元目は時間軸で、settings.PYWORLD_PERIOD(デフォルト5ms)毎に生成される。
2次元目は周波数軸で、fft_sizeに基づき決定する。
Type

np.ndarray of float64

output_data

worldのパラメータから合成した波形データ

Type

np.ndarray of float64

output_path

wavファイルの出力先パス

Type

str

target_tone
音高名(A4=440Hz)。
半角上げは#もしくは♯
半角下げはbもしくは♭で与えられます。
Type

str

target_frq

音高の周波数

Type

float

velocity

子音速度

Type

int

flag_value

フラグ(省略可)

Type

str, default ""

flags

入力されたフラグをパースしたもの

Type

flags.Flags, default settings.FLAGS

offset

入力ファイルの読み込み開始位置(ms)

Type

float, default 0

target_ms
出力ファイルの長さ(ms)
UTAUでは通常50ms単位に丸めた値が渡される。
Type

float, default 0

target_frames

target_msをworld仕様のフレーム数に変換したもの

Type

int

fixed_ms

offsetからみて通常伸縮しない長さ(ms)

Type

float, default 0

fixed_frames

worldパラメータのうち、前から何フレームが固定範囲に入るか?

Type

int

end_ms
入力ファイルの読み込み終了位置(ms)(省略可 default:0)
正の数の場合、ファイル末尾からの時間
負の数の場合、offsetからの時間
Type

float, default 0

volume

音量。0~200(省略可)

Type

int, default 100

modulation

モジュレーション。0~200(省略可)

Type

int, default 0

tempo
ピッチのテンポ
数字の頭に!がついた文字列
Type

str, default "!120"

pitchbend
ピッチベンド。(省略可)
-2048~2047までの12bitの2進数をbase64で2文字の文字列に変換し、
同じ数字が続く場合ランレングス圧縮したもの
Type

str, default ""

pitches
与えられたピッチ配列を数値配列に変換したもの
Type

np.ndarray of float64

adjustVolume()
self._volumeを使用して、self._output_dataを更新します。
また、settings.OUT_WAVE_EFFECTSも適用します。

メモ

音声合成後のフラグ処理を変更したい場合、このメソッドをオーバーライドしてください。
property ap: numpy.ndarray
applyPitch()
self._target_ms, self._tempo, self._framerate, self,_pitchbendを使用して、self._pitches, self._f0を更新します。

メモ

ピッチの適用およびピッチに関するフラグの処理を変更したい場合、このメソッドをオーバーライドしてください。

メモ

UTAUのピッチ数列および、tフラグは1cent単位で与えられます。
100cent = 半音のため、1オクターブは1200cent
1オクターブ上がると周波数が2倍になることから、
音程を1cent上げる処理は、元の周波数 * 2^(1/1200)
例外
  • ValueError -- toneの書式が適正でない場合

  • ValueError -- tempoに有効な文字列が渡されなかったとき

property end_ms: float
property f0: numpy.ndarray
property fixed_frames: int
property fixed_ms: float
property flag_value: str
property flags: flags.Flags
property framerate: int
getInputData(f0_floor: float = 71.0, f0_ceil: float = 800.0, frame_period: float = 5.0, q1: float = - 0.15, threshold: float = 0)

入力された音声データからworldパラメータを取得し、self._input_data, self._framerate, self._f0, self._sp, self._apを更新します。

メモ

音声データの取得方法を変更したい場合、このメソッドをオーバーライドしてください。
オーバーライドする際、self._input_dataはこれ以降の処理で使用しないため、更新しなくても問題ありません。
パラメータ
  • f0_floor (float, default settings.PYWORLD_F0_FLOOR) --

    worldでの分析するf0の下限
    デフォルトでは71.0

  • f0_ceil (float, default settings.PYWORLD_F0_CEIL) --

    worldでの分析するf0の上限
    デフォルトでは800.0

  • frame_period (float, default settings.PYWORLD_PERIOD) --

    worldデータの1フレーム当たりの時間(ms)
    初期設定では5.0

  • q1 (float, default settings.PYWORLD_Q1) --

    worldでスペクトル包絡抽出時の補正値
    通常は変更不要
    初期設定では-15.0

  • threshold (float, default settings.PYWORLD_THRESHOLD) --

    worldで非周期性指標抽出時に、有声/無声を決定する閾値(0 ~ 1)
    値が0の場合、音声のあるフレームを全て有声と判定します。
    値が0超の場合、一部のフレームを無声音として判断します。
    初期値0.85はharvestと組み合わせる前提で調整されています。

例外
  • FileNotFoundError -- input_pathにファイルがなかったとき

  • TypeError -- input_pathで指定したファイルがwavではなかったとき

property input_data: numpy.ndarray
property input_path: str
property modulation: int
property offset: float
output()
self._output_dataをself._output_pathに書き出します。
property output_data: numpy.ndarray
property output_path: str
parseFlags()

与えられたフラグをパースし、self.flagsを更新します。

メモ

フラグの取得方法を変更したい場合、このメソッドをオーバーライドしてください。

pitchShift()
self._target_tone, self._modulationを使用して、self._target_frq,self._f0を更新します。

メモ

ノートの音程およびモジュレーションに関する処理を変更したい場合、このメソッドをオーバーライドしてください。
オーバーライドする際、self._target_frqはこれ以降の処理で使用しないため、更新しなくても問題ありません。
例外

ValueError -- toneの書式が適正でない場合

property pitchbend: str
property pitches: numpy.ndarray
resamp()
UTAUのresamplerに求められる処理をすべて順番に実行します。
実行の順番はモジュールの説明に記載のある通りです。
property sp: numpy.ndarray
stretch()
self._target_ms, self._fixed_ms, self._velocityに基づいて、self._f0,self._sp,self._apを更新します。
計算途中結果のうち、後ほど活用できそうなself._target_framesとself._fixed_framesも記憶します。

メモ

音声の伸縮方法を変更したい場合、このメソッドをオーバーライドしてください。
synthesize()
self._f0, self._sp, self._ap, self._fs, settings.PYWORLD_PERIODを使用して、
self._output_dataを更新します。
また、合成処理前に適用されるフラグについても適用します。

メモ

音声合成前のフラグ処理を変更したい場合、このメソッドをオーバーライドしてください。
property t: numpy.ndarray
property target_frames: int
property target_frq: float
property target_ms: float
property tempo: str
property velocity: int
property volume: int