

スペクトラルノイズ除去による雑音除去  
<https://www.ai-shift.co.jp/techblog/1305>

上記サイトを見て、Jupyter Notebookでノイズ除去を実行したいのですが、  
二つ目のプログラムの12行目にある以下の部分でエラーメッセージが出ます。

>
[code]

>     noise_stft = _stft(noise_clip, n_fft, hop_length, win_length)
>  
[/code]

**エラー:**

[code]

    NameError:name'noise_clip' is not defined
    
[/code]

サイトのどの部分を見ても `noise_clip` はその12行目だけにしかないです。  
解決方法分かればお願いします。


CC BY-SA 4.0
2021-09-30T22:16:17.177
82783
2022-04-20T11:13:57.817
2022-04-20T11:13:57.817
3060
48401
question
python python3
「スペクトラルノイズ除去による雑音除去」によるNameErrorメッセージ


参照先記事  
[スペクトラルノイズ除去による雑音除去](https://www.ai-shift.co.jp/techblog/1305)  
呼び出すライブラリ・メソッドの情報  
[librosa.stft](http://librosa.org/doc/main/generated/librosa.stft.html)

> Parameters : y : np.ndarray [shape=(n,)], real-valued  
>  input signal

上記記事より、`noise_clip`が渡されるのは`librosa.stft()`というライブラリ・メソッドで`y`パラメータ(numpy配列の`入力信号`)ですね。

そして、以下のあたりの記事で、`入力信号`は`.wav`等の波形データであり、`librosa`ライブラリだと`load`メソッドで`.wav`ファイル等を読み取ったものか、numpy等で作り出したものと考えられます。  
[信号処理とか音楽の分析に大活躍しそうなlibrosa](https://qiita.com/tom_m_m/items/91ba624dd8507bc0b746)  
[Pythonの音声処理ライブラリ【LibROSA】で音声読み込み⇒スペクトログラム変換・表示⇒位相推定して音声復元](https://qiita.com/lilacs/items/a331a8933ec135f63ab1)  
[Methods for sound noise
reduction](https://www.kaggle.com/mauriciofigueiredo/methods-for-sound-noise-
reduction)  
[librosa.load](https://librosa.org/doc/main/generated/librosa.load.html)

参照先記事によると`noise_clip`の他に同様に`audio_clip`というものも必要なので、名前からして参照先記事の「ノイズ部分の特定」の説明から類推すると`audio_clip`が「元音源」データで、`noise_clip`がSound
Envelopで処理された「元音源のノイズ部分」データと思われます。

おそらく「元音源」は参照先記事の最初に掲載されている12秒間の音声データで、「元音源のノイズ部分」は3つ目に掲載されている10秒間の音声データのことでしょう。

なので記事からそれぞれのデータを`.wav`ファイルとしてダウンロードして、質問で問題としている行よりも前に以下のようにデータを読み取っておけば良いと思われます。

[code]

    import librosa
    audio_clip, rate = librosa.load('元音源.wav')
    noise_clip, rate = librosa.load('元音源のノイズ部分.wav')
    
    import scipy.signal #### 上記と直接は関係無いが参照先記事の後で必要になるもの
    
[/code]

処理結果が正しいかどうかは別にして、参照先記事の各ソースをつなぎ合わせて、上記部分を適当な位置に挿入すれば、エラー無しに実行出来るようになります。

* * *

あるいは、`audio_clip`を参照先記事の最初のソース`envelope()`で処理した結果が`noise_clip`となるのかもしれません。  
例えば以下のように：

[code]

    audio_clip, rate = librosa.load('元音源.wav')
    noise_mask, noise_clip = envelope(audio_clip, rate, 何かの雑音判断するしきい値)
    
    #### 更にこの後何かの処理が必要になるのかもしれませんが。
    
[/code]


CC BY-SA 4.0
2021-10-02T10:23:22.493
82825
2021-10-02T10:38:50.687
2021-10-02T10:38:50.687
26370
26370
82783
answer