diff --git a/lib/sounds.py b/lib/sounds.py index 28ba34a..90a6713 100644 --- a/lib/sounds.py +++ b/lib/sounds.py @@ -33,39 +33,53 @@ class SoundOff(QObject): if cls._instance: return cls._instance cls._instance = super(SoundOff, cls).__new__(cls) + # + # Setup devices + # + cls.virtualDevice = None + + for output in QMediaDevices.audioOutputs(): + if output.id().data().decode("utf-8") == "virt-input": + cls.virtualDevice = output + if output.isDefault(): + cls.localDevice = output + cls.alertEffect = QSoundEffect() + cls.alertEffect.setSource(QUrl("qrc:/beep.wav")) + cls.alertEffect.setAudioDevice(cls.localDevice) + cls.alertEffect.setVolume(0.25) + cls.alertEffect.setLoopCount(1) + + cls.localPlayer = QMediaPlayer() + cls.localPlayer.setObjectName("localPlayer") + cls.localOutput = QAudioOutput() + cls.localOutput.setDevice(cls.localDevice) + cls.localPlayer.setAudioOutput(cls.localOutput) + if cls.virtualDevice: + cls.virtualPlayer = QMediaPlayer() + cls.virtualPlayer.setObjectName("virtualPlayer") + cls.virtualOutput = QAudioOutput() + cls.virtualOutput.setVolume(1.0) + cls.virtualOutput.setDevice(cls.virtualDevice) + cls.virtualPlayer.setAudioOutput(cls.virtualOutput) + + cacheDir = QDir( + QStandardPaths.writableLocation( + QStandardPaths.StandardLocation.GenericCacheLocation + ) + ) + cacheDir.mkdir("Troglodite") + cacheDir = QDir(cacheDir.path() + QDir.separator() + "Troglodite") + netCache = QNetworkDiskCache() + netCache.setCacheDirectory(cacheDir.path()) + cls.nam = QNetworkAccessManager() + cls.nam.setCache(netCache) return cls._instance def __init__(self) -> None: super().__init__() - # - # Setup devices - # - self.virtualDevice = None + if self.localPlayer.receivers(self.localPlayer.errorOccurred) > 0: + print("SoundOff, __init__() after __init__()") - for output in QMediaDevices.audioOutputs(): - if output.id().data().decode("utf-8") == "virt-input": - self.virtualDevice = output - if output.isDefault(): - self.localDevice = output - - self.alertEffect = QSoundEffect() - self.alertEffect.setSource(QUrl("qrc:/beep.wav")) - self.alertEffect.setAudioDevice(self.localDevice) - self.alertEffect.setVolume(0.25) - self.alertEffect.setLoopCount(1) - - self.localPlayer = QMediaPlayer() - self.localPlayer.setObjectName("localPlayer") - self.localOutput = QAudioOutput() - self.localOutput.setDevice(self.localDevice) - self.localPlayer.setAudioOutput(self.localOutput) - if self.virtualDevice: - self.virtualPlayer = QMediaPlayer() - self.virtualPlayer.setObjectName("virtualPlayer") - self.virtualOutput = QAudioOutput() - self.virtualOutput.setVolume(1.0) - self.virtualOutput.setDevice(self.virtualDevice) - self.virtualPlayer.setAudioOutput(self.virtualOutput) # # Connections # @@ -76,17 +90,6 @@ class SoundOff(QObject): self.virtualPlayer.errorOccurred.connect(self.mediaError) self.virtualPlayer.mediaStatusChanged.connect(self.mediaStatus) self.virtualPlayer.playbackStateChanged.connect(self.playbackState) - cacheDir = QDir( - QStandardPaths.writableLocation( - QStandardPaths.StandardLocation.GenericCacheLocation - ) - ) - cacheDir.mkdir("Troglodite") - cacheDir = QDir(cacheDir.path() + QDir.separator() + "Troglodite") - netCache = QNetworkDiskCache() - netCache.setCacheDirectory(cacheDir.path()) - self.nam = QNetworkAccessManager() - self.nam.setCache(netCache) self.nam.finished.connect(self.finished) return @@ -98,7 +101,7 @@ class SoundOff(QObject): @pyqtSlot(QMediaPlayer.MediaStatus) def mediaStatus(self, status: QMediaPlayer.MediaStatus) -> None: - # print(f"mediaStatus: {status}") + #print(f"mediaStatus: {status}") if status == QMediaPlayer.MediaStatus.LoadedMedia: player: Optional[QMediaPlayer] = cast(QMediaPlayer, self.sender()) assert player is not None @@ -107,7 +110,7 @@ class SoundOff(QObject): @pyqtSlot(QMediaPlayer.PlaybackState) def playbackState(self, state: QMediaPlayer.PlaybackState) -> None: - # print(f"playbackState: {state}") + #print(f"playbackState: {state}") return # @@ -154,14 +157,14 @@ class SoundOff(QObject): @pyqtSlot(QNetworkReply) def finished(self, reply: QNetworkReply) -> None: storage = reply.readAll() - + reply.close() crypto = QCryptographicHash(QCryptographicHash.Algorithm.Sha256) for player in [self.localPlayer, self.virtualPlayer]: if not player: continue self._storage[player] = QByteArray(storage) crypto.addData(self._storage[player]) - print(player, crypto.result().toHex()) + #print(player, crypto.result().toHex()) crypto.reset() self._buffer[player] = QBuffer(self._storage[player]) url = reply.request().url() @@ -169,5 +172,5 @@ class SoundOff(QObject): player.setPosition(0) if player.mediaStatus() == QMediaPlayer.MediaStatus.LoadedMedia: player.play() - print("play") + #print("play") return