Pyroomacousticsの機能いろいろ使ってみた

## はじめに
あけましておめでとうございます。みなさんは紅白歌合戦みましたか？生で見たかったなー。なのでシミュレーションします。
Pyroomacousticsというライブラリを使うと、音源を分離とかルームシミュレーションができるらしい・・・ということで試してみました。
## Pyroomacousticsとは
自分で作った部屋の中にマイクとスピーカーを自由に置き、音響のルームシミュレーション・周波数解析・音源分離などのアルゴリズムも実装することができるライブラリです。
今回はルームシミュレーションと音源分離を実際にやってみました。

## 音の用意
まずはシミュレーションで使う音を準備する必要がある・・・ということでシンセサイザーでピアノとベースの音を作りました。
こちらがピアノの音源です。


<iframe width="560" height="315" src="https://www.youtube.com/embed/vIaCLjZKHGY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



下の画像はピアノ音源の音圧とメルスペクトログラムです

![piano_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/f1069793-8886-6a05-8b9f-c4cccaf6547c.png)


こちらがベースの音源です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/2jaqHmrDwA8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

 


下の画像はベース音源の音圧とメルスペクトログラムです
![bass_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/a56d10cb-5066-6b1a-45d3-81f055ad5313.png)




では、さっそくpyroomacousticsで遊んでみます。

## ルームシミュレーションをやってみる
今回は「反響しやすい壁材」と「反響しにくい壁材」でピアノ音の聞こえ方がどう違うのかを検証します。
公式ドキュメントに従って、音響のルームシミュレーションのための部屋を作成していきます。

<!-- ～部屋の作り方を説明～　反響するような壁材・位置・大きさ・音源位置・マイク -->
| パラメータ | 設定値 |
| :--- | :---: | 
| 壁材 | reverb_chamber(反響しやすい)/ceiling_fibre_abosrber(反響しにくい。原文ママ)|
| 部屋の大きさ | 100×5×5 |
| 音源座標 | [50,2.5,2.5] | 
| マイク座標 | [54,2.4,2.5]| 



まずは、反響しにくい壁材で作った部屋のピアノ音です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/dtX7FYofyQ8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

![ピアノ吸音.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/86075e56-2780-e685-89d0-3dde717289aa.png)


次に反響しやすい壁材で作った部屋のピアノ音です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/YKRr9Vl4yw8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


![ピアノ反響.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/3dd3bb3e-f567-7dc6-764f-bd1b376a8856.png)


いい感じです！
なるほど、たしかに反響してますね。スペクトルで見ても違いが見て取れます。
こんな感じでPyroomacousticsを使うとルームシミュレーションができます。


## 音源を分離してみる
<!-- 音源分離とは 
分離手法の説明
元音源との比較
ピアノ+なにか(?)２音源の分離をためしてみた
結果(動画+スペクトル) -->



音源分離とは、複数種類の音が混ざった音から1種類ずつ音を分離する手法です。
今回はピアノとベースの合奏からそれぞれの音を分離しました。
Pyroomacousticsでは音源分離のアルゴリズムとして以下のようなものが提供されています。
1.Auxvia
2.Fastmnmf
3.Fastmnmf2
4.ilrma
5.Trinicon
今回はfastmnmf2を用いて音源分離をやってみました。
シミュレーション用に作った部屋を以下に示します。(●はピアノ■がベース音源、×がマイク)
![マイクと音源の位置.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/1d9058e8-6892-e74c-514d-d9740af7b313.png)
こちらがピアノとベースの合奏の音(分離前)です。


<iframe width="560" height="315" src="https://www.youtube.com/embed/jhTBHqZ16ug" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



![piano_bass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/45e60751-3c82-d075-6b48-2f72eaddcc96.png)


では、実際に音源分離をやってみます。
こちらが分離後のピアノ音です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/fydyp4jldms" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



![fastmnmf2_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/42366475-2155-61d5-c6fb-cd7e5fdab6c4.png)






こちらが分離後のベース音です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/2i7vMWZ0H5I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


![fastmnmf2_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704158/dd51ea58-d7c1-2101-1de0-c694075d01e6.png)




なるほど・・・ベースの音程が変わるあたりはあまり上手く分離できていませんね。
とはいえ、ほかはまぁまぁ分離できていそうですね。

## まとめ
今回はPyroomacousticsでルームシミュレーションと音源分離を試してみました。
音を聞く環境(壁材とか)が異なれば、聞こえ方もだいぶ異なることが分かりました。
また、音源分離はうまく分離できている区間と分離できていない区間があり、しっかり分離しようとするとまだまだ工夫が必要そうです。
色々使えそうで便利なライブラリなのでこれからも機会があったら使ってみようと思いますー！

こんな感じで今年もいっぱい記事書いていきますのでよろしくお願いいたします！
## 参考文献
Pyroomacoustics：https://pyroomacoustics.readthedocs.io/en/pypi-release/