-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplay_sound.py
45 lines (32 loc) · 1.63 KB
/
play_sound.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import sounddevice as sd
from typing import TypedDict
class PlaySound:
def __init__(self, output_device_name= "CABLE Input") -> None:
# 指定された出力デバイス名に基づいてデバイスIDを取得
output_device_id = self._search_output_device_id(output_device_name)
# 入力デバイスIDは使用しないため、デフォルトの0を指定
input_device_id = 0
# デフォルトのデバイス設定を更新
sd.default.device = [input_device_id, output_device_id]
def _search_output_device_id(self, output_device_name, output_device_host_api=0) -> int:
# 利用可能なデバイスの情報を取得
devices = sd.query_devices()
output_device_id = None
# 指定されたデバイス名とホストAPIに合致するデバイスIDを検索
for device in devices:
is_output_device_name = output_device_name in device["name"]
is_output_device_host_api = device["hostapi"] == output_device_host_api
if is_output_device_name and is_output_device_host_api:
output_device_id = device["index"]
break
# 合致するデバイスが見つからなかった場合の処理
if output_device_id is None:
print("合致するデバイスが見つかりませんでした")
exit()
return output_device_id
def play_sound(self, data, rate) -> bool:
# 音声データを再生
sd.play(data,rate)
# 再生が終了するまで待機
sd.wait()
return True