Add Sound Module

This commit is contained in:
Christopher T. Johnson
2023-12-19 10:01:09 -05:00
parent 11726900f7
commit bb5287743c
7 changed files with 177 additions and 99 deletions

View File

@@ -1,5 +1,4 @@
import json
import os
import re
from typing import cast
@@ -31,7 +30,6 @@ from PyQt6.QtGui import (
QTextDocument,
QTextListFormat,
)
from PyQt6.QtMultimedia import QAudioOutput, QMediaDevices, QMediaPlayer
from PyQt6.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel
from PyQt6.QtWidgets import QDialog, QPushButton
@@ -45,16 +43,12 @@ class EditDialog(QDialog, Ui_Dialog):
sessionSignal = pyqtSignal()
displayedWord = pyqtSignal(int)
newParagraph = pyqtSignal(int, int)
soundEffect = QMediaPlayer()
def __init__(self, session, person_id: int) -> None:
def __init__(self, parent, session, person_id: int) -> None:
self.session = session
super(EditDialog, self).__init__()
super(EditDialog, self).__init__(parent)
print(self.parent())
self.person_id = person_id
if not QResource.registerResource(
os.path.join(os.path.dirname(__file__), "../ui/resources.rcc"), "/"
):
raise Exception("Unable to register resources.rcc")
styleSheet = QResource(":/display.css").data().decode("utf-8")
self.setupUi(self)
#
@@ -63,16 +57,6 @@ class EditDialog(QDialog, Ui_Dialog):
#
# End overrides
#
audioOutput = QAudioOutput()
dev = None
for output in QMediaDevices.audioOutputs():
if output.id().data().decode("UTF-8") == "virt-input":
dev = output
break
if dev:
audioOutput.setDevice(dev)
self.audioOutput = audioOutput
self.soundEffect.setAudioOutput(audioOutput)
self.load_book(self.person_id)
blockNumber = self.block
self.paraEdit.setReadOnly(True)
@@ -101,10 +85,6 @@ class EditDialog(QDialog, Ui_Dialog):
#
self.displayedWord.connect(self.session.addWord)
self.newParagraph.connect(self.session.addBlock)
self.soundEffect.errorOccurred.connect(self.mediaError)
self.soundEffect.playbackStateChanged.connect(self.changedState)
self.soundEffect.mediaStatusChanged.connect(self.changedStatus)
return
#
@@ -140,33 +120,6 @@ class EditDialog(QDialog, Ui_Dialog):
self.setDefEdit(selection, word_id, definition)
return
@pyqtSlot(QMediaPlayer.MediaStatus)
def changedStatus(self, status):
if status == QMediaPlayer.MediaStatus.LoadedMedia:
self.soundEffect.play()
audioOutput = self.soundEffect.audioOutput()
if not audioOutput:
self.soundEffect.setAudioOutput(self.audioOutput)
audioOutput = self.audioOutput
audioDevice = audioOutput.device()
print(status)
return
@pyqtSlot(QMediaPlayer.PlaybackState)
def changedState(self, status):
audioOutput = self.soundEffect.audioOutput()
if not audioOutput:
return
audioDevice = audioOutput.device()
print(status)
return
@pyqtSlot(QMediaPlayer.Error, str)
def mediaError(self, error, string):
print(error)
print(string)
return
@pyqtSlot()
def sessionAction(self) -> None:
self.sessionSignal.emit()
@@ -214,13 +167,8 @@ class EditDialog(QDialog, Ui_Dialog):
print("Looking for audio")
for entry in self.phonetics:
if len(entry["audio"]) > 0:
self.soundEffect.setSource(QUrl(entry["audio"]))
if (
self.soundEffect.mediaStatus()
== QMediaPlayer.MediaStatus.LoadedMedia
):
self.soundEffect.play()
return
# self.parent().playAlert.emit()
self.parent().playSound.emit(entry["audio"])
return
@pyqtSlot()