some sound additions
This commit is contained in:
97
src/Win32SoundHandler.py
Normal file
97
src/Win32SoundHandler.py
Normal file
@@ -0,0 +1,97 @@
|
||||
import ctypes
|
||||
import logging
|
||||
from ctypes import wintypes
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def get_resource_path(relative_path):
|
||||
import os
|
||||
import sys
|
||||
try:
|
||||
base_path = sys._MEIPASS
|
||||
except Exception:
|
||||
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__)))
|
||||
base_path = project_root
|
||||
full_path = os.path.normpath(os.path.join(base_path, relative_path))
|
||||
return full_path
|
||||
|
||||
class Win32SoundHandler:
|
||||
def __init__(self, hwnd):
|
||||
self.hwnd = hwnd
|
||||
self.SND_ALIAS = 0x00010000
|
||||
self.SND_FILENAME = 0x00020000
|
||||
self.SND_ASYNC = 0x00000001
|
||||
self._setup_playsoundapi()
|
||||
|
||||
def _setup_playsoundapi(self):
|
||||
winmm = ctypes.windll.winmm
|
||||
self.PlaySoundW = winmm.PlaySoundW
|
||||
self.PlaySoundW.argtypes = (
|
||||
wintypes.LPCWSTR,
|
||||
wintypes.HMODULE,
|
||||
wintypes.DWORD
|
||||
)
|
||||
self.PlaySoundW.restype = wintypes.BOOL
|
||||
|
||||
def play_info_sound(self):
|
||||
self.PlaySoundW("SystemAsterisk", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_error_sound(self):
|
||||
self.PlaySoundW("SystemHand", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_warn_sound(self):
|
||||
self.PlaySoundW("SystemExclamation", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_question_sound(self):
|
||||
self.PlaySoundW("SystemQuestion", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_default_sound(self):
|
||||
self.PlaySoundW("SystemDefault", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_notification_sound(self):
|
||||
self.PlaySoundW("SystemNotification", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_mail_sound(self):
|
||||
self.PlaySoundW("MailBeep", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_exit_sound(self):
|
||||
self.PlaySoundW("SystemExit", None, self.SND_ALIAS | self.SND_ASYNC)
|
||||
|
||||
def play_connect_server_or_channel(self):
|
||||
try:
|
||||
sound_path = get_resource_path("sounds/space-pdj.wav")
|
||||
import os
|
||||
if os.path.exists(sound_path):
|
||||
self.PlaySoundW(sound_path, None, self.SND_FILENAME | self.SND_ASYNC)
|
||||
else:
|
||||
logger.warning(f"Sound file not found: {sound_path}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error playing popout click sound: {e}")
|
||||
|
||||
|
||||
def play_popout_click(self):
|
||||
try:
|
||||
sound_path = get_resource_path("sounds/startup.wav")
|
||||
import os
|
||||
if os.path.exists(sound_path):
|
||||
self.PlaySoundW(sound_path, None, self.SND_FILENAME | self.SND_ASYNC)
|
||||
else:
|
||||
logger.warning(f"Sound file not found: {sound_path}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error playing popout click sound: {e}")
|
||||
|
||||
def play_msg_recv(self):
|
||||
try:
|
||||
sound_path = get_resource_path("sounds/balloon.wav")
|
||||
import os
|
||||
if os.path.exists(sound_path):
|
||||
self.PlaySoundW(sound_path, None, self.SND_FILENAME | self.SND_ASYNC)
|
||||
else:
|
||||
logger.warning(f"Sound file not found: {sound_path}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error playing message received sound: {e}")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user