feat: detached actual sound files from code

This commit is contained in:
2020-10-29 21:33:46 +01:00
parent 62fb8d35bc
commit 655787f58f
3 changed files with 152 additions and 4 deletions

View File

@@ -4,6 +4,8 @@ import wave
import uuid
import sched
import logging
import json
import os.path
from pyaudio import PyAudio, Stream
@@ -23,19 +25,27 @@ class AudioSystem:
audio: Optional[PyAudio]
scheduler: sched.scheduler
def __init__(self, scheduler):
def __init__(self, scheduler: sched.scheduler, sound_file: str):
self.to_play = Queue()
self.playing = {}
self.audio = PyAudio()
self.scheduler = scheduler
self.scheduler.enter(0, 2, self.start_streams)
self.scheduler.enter(0, 1, self.fill_streams)
with open(sound_file) as f:
self.sound_data = json.load(f)
self.sound_dir = os.path.realpath(self.sound_data['sound_dir'])
def quit(self):
self.audio.terminate()
def queue_sound(self, sound):
self.to_play.put(sound)
try:
sound_entry = next(filter(lambda i: i['name'] == sound, self.sound_data['sounds']))
except StopIteration:
raise ValueError(f"Sound {sound!r} is not known")
self.to_play.put(os.path.join(self.sound_dir, sound_entry['path']))
def start_streams(self):
self.scheduler.enter(INTERVAL_QUEUE, 2, self.start_streams)

138
sounds.json Normal file
View File

@@ -0,0 +1,138 @@
{
"sound_dir": "sounds",
"sounds": [
{
"name": "walle.boot",
"title": "Boot sound",
"path": "Startup1.wav"
},
{
"name": "walle.alarm",
"path": "Wall-E_Alarm.wav"
},
{
"name": "walle.blurp_down",
"path": "Wall-E_blurp_down.wav"
},
{
"name": "walle.door_open",
"path": "Wall-E_Door_open.wav"
},
{
"name": "walle.door_w_honk_honk",
"path": "Wall-E_door_w_honk_honk.wav"
},
{
"name": "walle.drill",
"path": "Wall-E_drill.wav"
},
{
"name": "walle.ela_ay",
"path": "Wall-E_ela_Ay.wav"
},
{
"name": "walle.eva01",
"path": "Wall-E_eva01.wav"
},
{
"name": "walle.eva02",
"path": "Wall-E_eva02.wav"
},
{
"name": "walle.eva03",
"path": "Wall-E_eva03.wav"
},
{
"name": "walle.gobble",
"path": "Wall-E_gobble.wav"
},
{
"name": "walle.grunt01",
"path": "Wall-E_grunt01.wav"
},
{
"name": "walle.grunt02",
"path": "Wall-E_Grunt02.wav"
},
{
"name": "walle.noise01",
"path": "Wall-E_noise01.wav"
},
{
"name": "walle.ohhh02",
"path": "Wall-E_ohhh02.wav"
},
{
"name": "walle.ohhh",
"path": "Wall-E_ohhh.wav"
},
{
"name": "walle.oiy",
"path": "Wall-E_oiy.wav"
},
{
"name": "walle.power_sound02",
"path": "Wall-E_power_sound02.wav"
},
{
"name": "walle.quick_power_up",
"path": "Wall-E_quick_power_up.wav"
},
{
"name": "walle.quick_zap",
"path": "Wall-E_quick_zap.wav"
},
{
"name": "walle.raspberry",
"path": "Wall-E_raspberry.wav"
},
{
"name": "walle.sad",
"path": "Wall-E_sad.wav"
},
{
"name": "walle.short_oh",
"path": "Wall-E_short_oh.wav"
},
{
"name": "walle.small_power",
"path": "Wall-E_small_power.wav"
},
{
"name": "walle.treds01",
"path": "Wall-E_treds01.wav"
},
{
"name": "walle.treds_stop",
"path": "Wall-E_treds_stop.wav"
},
{
"name": "walle.uh_huh",
"path": "Wall-E_uh_huh.wav"
},
{
"name": "walle.wall-e_ello",
"path": "Wall-E_wall-e_ello.wav"
},
{
"name": "walle.wall-E",
"path": "Wall-E_wall-E.wav"
},
{
"name": "walle.whew",
"path": "Wall-E_whew.wav"
},
{
"name": "walle.whistle02",
"path": "Wall-E_Whistle02.wav"
},
{
"name": "walle.whistle",
"path": "Wall-E_Whistle.wav"
},
{
"name": "walle.wow",
"path": "Wall-E_wow.wav"
}
]
}

View File

@@ -53,8 +53,8 @@ scheduler = sched.scheduler()
walle = WallE()
walle.setup()
audio = AudioSystem(scheduler)
audio.queue_sound('/home/rick/Downloads/Wall-E Sounds/wav/Startup1.wav')
audio = AudioSystem(scheduler, 'sounds.json')
audio.queue_sound('walle.boot')
def walle_tick():