feat: detached actual sound files from code
This commit is contained in:
@@ -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
138
sounds.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user