質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1352閲覧

wavファイル音声データ、雑音データで合成したデータセットを作りたい

ilbisonte

総合スコア2

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/09/01 12:13

編集2020/09/02 10:12

前提・実現したいこと

https://engineering.linecorp.com/ja/blog/voice-waveform-arbitrary-signal-to-noise-ratio-python/
このサイトを使って音声と雑音の合成したデータセットを作っています。
次のようなエラーがずっと出ていて先に進まない状況です。

発生している問題・エラーメッセージ

実行時
python3 create_mixed_audio_file_1.py --clean_file data/source_clean/arctic_a0001.wav --noise_file data/source_noise/ch01.wav --output_mixed_file data/output_mixed/0.wav --snr 0

エラーメッセージ
error: the following arguments are required: --clean_file, --noise_file, --output_mixed_file

該当のソースコード

create_mixed_audio_file_1.py

import argparse import array import math import numpy as np import random import wave def get_args(): parser = argparse.ArgumentParser() parser.add_argument('--clean_file', type=str, required=True) parser.add_argument('--noise_file', type=str, required=True) parser.add_argument('--output_mixed_file', type=str, default='', required=True) parser.add_argument('--output_clean_file', type=str, default='') parser.add_argument('--output_noise_file', type=str, default='') parser.add_argument('--snr', type=float, default='', required=True) args = parser.parse_args() return args def cal_adjusted_rms(clean_rms, snr): a = float(snr) / 20 noise_rms = clean_rms / (10**a) return noise_rms def cal_amp(wf): buffer = wf.readframes(wf.getnframes()) amptitude = (np.frombuffer(buffer, dtype="int16")).astype(np.float64) return amptitude def cal_rms(amp): return np.sqrt(np.mean(np.square(amp), axis=-1)) def save_waveform(output_path, params, amp): output_file = wave.Wave_write(output_path) output_file.setparams(params) #nchannels, sampwidth, framerate, nframes, comptype, compname output_file.writeframes(array.array('h', amp.astype(np.int16)).tobytes() ) output_file.close() if __name__ == '__main__': args = get_args() clean_file = args.clean_file noise_file = args.noise_file clean_wav = wave.open(clean_file, "r") noise_wav = wave.open(noise_file, "r") clean_amp = cal_amp(clean_wav) noise_amp = cal_amp(noise_wav) clean_rms = cal_rms(clean_amp) start = random.randint(0, len(noise_amp)-len(clean_amp)) divided_noise_amp = noise_amp[start: start + len(clean_amp)] noise_rms = cal_rms(divided_noise_amp) snr = args.snr adjusted_noise_rms = cal_adjusted_rms(clean_rms, snr) adjusted_noise_amp = divided_noise_amp * (adjusted_noise_rms / noise_rms) mixed_amp = (clean_amp + adjusted_noise_amp) max_int16 = np.iinfo(np.int16).max min_int16 = np.iinfo(np.int16).min if mixed_amp.max(axis=0) > max_int16 or mixed_amp.min(axis=0) < min_int16: if mixed_amp.max(axis=0) >= abs(mixed_amp.min(axis=0)): reduction_rate = max_int16 / mixed_amp.max(axis=0) else : reduction_rate = min_int16 / mixed_amp.min(axis=0) mixed_amp = mixed_amp * (reduction_rate) clean_amp = clean_amp * (reduction_rate) save_waveform(args.output_mixed_file, clean_wav.getparams(), mixed_amp)

試したこと

$cd Documents
$ls
$create_mixed_audio_file_1.py data
$ls data
$output_mixed_file source_clean source_noice

このようにファイルを作りました。

補足情報(FW/ツールのバージョンなど)

VScodeを使用しています。
python3
MacOS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/09/02 01:45

ソースは```で囲ってください。
ilbisonte

2020/09/02 10:13

すいません。 囲みました。
guest

回答3

0

実行時に、output_mixed_file、source_clean、source_noiceの3つのファイルがdataにあることを記載していなかったです。
初歩的なミスでした。

投稿2020/09/04 14:08

ilbisonte

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

実行する際に、source_clean,source_noise,output_mixed_fileがどのファイルに入っているかを記載していませんでした。
初歩的なミスで申し訳ありません。

投稿2020/09/04 14:00

ilbisonte

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

parser.add_argument('--snr', type=float, default='', required=True)
なのに、--snrを指定しないからでは?

投稿2020/09/02 01:47

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ilbisonte

2020/09/02 10:14

--snrを指定するにはどうしたら良いのでしょうか。
t_obara

2020/09/02 10:31

提示されたリンクに記述されています。
ilbisonte

2020/09/02 11:47

実行時に、snrを0と指定しているのですが違うのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問