[EV3DEV Python] Soundクラス

# Sound(サウンド)
ビープ音、wavサウンドの再生、音声合成に関するクラス

##ビープ
  
### ・beep() 
ビープ音鳴らすだけ(Linuxのbeepコマンドと同じ動作)
 
```python:Beep1.py
#!/usr/bin/env python3
#Beep1.py ビープ音鳴らすだけ

from ev3dev2.sound import Sound
#インスタンス化
my_sound = Sound()
#ビープ音を鳴らす
my_sound.beep()
```

### ・beep(*args=''*,*play_type=0*)
指定したオプションでビープ音を鳴らす

|引数|説明|デフォルト値|
|:----|:----|:---:|
|*args(string)*|beepコマンドの引数|''|
|*play_type*|再生方法（Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP)※詳細は後述|0|

```python:Beep2.py
#!/usr/bin/env python3
#Beep2.py 音の高さを指定してビープ音を鳴らす
from ev3dev2.sound import Sound
#インスタンス化
my_sound = Sound()
#ビープ音を鳴らす(周波数10000Hzで2000ms(2秒)間)
my_sound.beep(args="-f 10000 -l 2000")
```
※beepコマンドの引数については各自で調べてください。
## トーン
### ・tone([(*frequency*,*length*,*duration*),…],play_type=0)

指定した高さ、長さ、間隔でリストの先頭からトーン音を鳴らしていく。

|引数|説明|デフォルト値|
|:---|:---|:--:|
|*frequency(float)*|音の高さ（Hz)（例 ド：523.251)||
|*length(float)*|音の長さ(ミリ秒）||
|*duration(float)*|次の音までの時間（ミリ秒）||
|*play_type*|再生方法（Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP)※詳細は後述|0|


```python:Tone.py
#!/usr/bin/env python3
#Tone.py リストのトーン音を鳴らす

from ev3dev2.sound import Sound
#インスタンス化
my_sound = Sound()
#トーンを再生(ドレミファソラシドを0.1秒間隔で0.5秒ずつ流す)
my_sound.tone([(523.251,500,100),(587.330,500,100),(659.255,500,100),
(698.456,500,100),(783.991,500,100),(880.0,500,100),
(987.767,500,100),(1046.502,500,100)])
```
### ・play_tone(*frequency*,*length*,*duration=0.0*,*volume=100*,*play_mode=0*)

指定した周波数、長さ,音量で音を一つだけ鳴らす


|引数|説明|デフォルト値|
|:---|:---|:--:|
|*frequency(float)*|音の高さ（Hz)（例 ド：523.251)||
|*length(float)*|音の長さ(秒）||
|*duration(float)*|次の音までの時間（秒）|0.0|
|*volume(int)*|音量(%)|100|
|*play_type*|再生方法（Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP)※詳細は後述|0|

```python:Tone2.py
#!/usr/bin/env python3
#Sample3.py ビープ音鳴らすだけ（音の高さ,長さを指定）

from ev3dev2.sound import Sound
#サウンドクラスのインスタンス化
my_sound = Sound()
#トーンを再生(ドの音を0.5秒間再生)
my_sound.tone(523.251,500)
```

### ・play_note(*note*,*length*,*volume*,*play_type*)

指定した音階、長さ、音量、プレイタイプで音を鳴らす

|引数|説明|デフォルト値|
|:----|:----|:---:|
|*note(String)*|米・英方式の音階表記（例 ド：C ）||
|*length(float)*|音の長さ(秒)||
|*volume(int)*|音量(%)|100|
|*play_type*|再生方法（*Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP*)※詳細は後述|0|

```python:play_note.py
#!/usr/bin/env python3
import time
from ev3dev2.sound import Sound

#インスタンス化
my_sound = Sound()

#”C3"の音を30%の音量で2秒間流す
my_sound.play_note("C3",2,30)
```

## WAVサウンドの再生
### ・play_file(*wav_file*,*volume=100*,*play_type=0*)
wav形式のサウンドファイルを指定された音量で再生する


| 引数 | 説明 | デフォルト値 |
|:--|:--|:-:|
|  *wav_file(string)* | サウンドファイルのパス  |   |
|  *volume(int)* |  音量 |  100 |
|  *play_type* | 再生方法（*Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP*)※詳細は後述  | 0  |

```python:play_wav_sound.py
#!/usr/bin/env python3
import time
from ev3dev2.sound import Sound

#インスタンス化
my_sound = Sound()

#wavサウンドを再生
my_sound.play_file("WAVファイルのパス",50)
```


## 音声合成

### ・speak(*text*,*espeak_opts="-a 200 -s 130"*,volume=100,play_type=0)
指定された`text`を読み上げる。内部では`espeak`コマンド呼び出している

| 引数 | 説明 | デフォルト値 |
|:-:|:-:|:-:|
| *text(string)*  | 読み上げるテキスト  |   |
| *espeak_opts(string)*  | espeakコマンドに渡す引数  | "-a 200 -s 130"  |
| *volume(int)*  | 音量(%)  | 100  |
| *play_type*  | 再生方法（*Sound.PLAY_WAIT_FOR_COMPLETE/Sound.PLAY_NO_WAIT_FOR_COMPLETE/Sound.PLAY_LOOP*)※詳細は後述  |   0|

```python:Speak.py
#!/usr/bin/env python3
import time
from ev3dev2.sound import Sound

#インスタンス化
my_sound = Sound()

#話す
my_sound.speak("Hello World")

```


## 再生方法(*play_type*)について
| 再生方法 | 意味 |
|:-:|:-:|
| Sound.PLAY_WAIT_FOR_COMPLETE  | 音が鳴り終わるまで待機する  |
| Sound.PLAY_NO_WAIT_FOR_COMPLETE  | 音が鳴り終わるまで待機しないで、音が鳴り始めたら次の処理を行う  |
| Sound.PLAY_LOOP  | プログラムが終了するまで繰り返す  |

デフォルトでは`Sound.PLAY_WAIT_FOR_COMPLETE`が指定されているので特にしていなければ音が鳴り終わるまで次の処理を行わない。
※リファレンス上では`beep()`でも`Sound.PLAY_LOOP`を指定できると書かれているがソースコード上は実装されていないため実際にループできるのは`play_file()`と`speak()`のみ