diff options
Diffstat (limited to 'examples/multimedia/audiosource/audiosource.py')
-rw-r--r-- | examples/multimedia/audiosource/audiosource.py | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/examples/multimedia/audiosource/audiosource.py b/examples/multimedia/audiosource/audiosource.py index 79c0b6f82..a78beb584 100644 --- a/examples/multimedia/audiosource/audiosource.py +++ b/examples/multimedia/audiosource/audiosource.py @@ -12,27 +12,21 @@ Note: This Python example is not fully complete as compared to its C++ counterpa Only the push mode works at the moment. For the pull mode to work, the class QIODevice have python bindings that needs to be fixed. """ +import os import sys from typing import Optional import PySide6 -from PySide6.QtCore import QByteArray, QIODevice, QMargins, QRect, Qt, Signal, Slot +from PySide6.QtCore import QByteArray, QMargins, Qt, Slot, qWarning from PySide6.QtGui import QPainter, QPalette -from PySide6.QtMultimedia import ( - QAudio, - QAudioDevice, - QAudioFormat, - QAudioSource, - QMediaDevices, -) -from PySide6.QtWidgets import ( - QApplication, - QComboBox, - QPushButton, - QSlider, - QVBoxLayout, - QWidget, -) +from PySide6.QtMultimedia import QAudio, QAudioDevice, QAudioFormat, QAudioSource, QMediaDevices +from PySide6.QtWidgets import (QApplication, QComboBox, QPushButton, QSlider, QVBoxLayout, + QWidget, QLabel) + +is_android = os.environ.get('ANDROID_ARGUMENT') + +if is_android or sys.platform == "darwin": + from PySide6.QtCore import QMicrophonePermission class AudioInfo: @@ -95,6 +89,28 @@ class InputTest(QWidget): super().__init__() self.m_devices = QMediaDevices(self) self.m_pullMode = False + self.initialize() + + @Slot() + def initialize(self): + if is_android or sys.platform == "darwin": + is_nuitka = "__compiled__" in globals() + if not is_nuitka and sys.platform == "darwin": + print("This example does not work on macOS when Python is run in interpreted mode." + "For this example to work on macOS, package the example using pyside6-deploy" + "For more information, read `Notes for Developer` in the documentation") + sys.exit(0) + permission = QMicrophonePermission() + permission_status = qApp.checkPermission(permission) # noqa: F821 + if permission_status == Qt.PermissionStatus.Undetermined: + qApp.requestPermission(permission, self, self.initialize) # noqa: F821 + return + if permission_status == Qt.PermissionStatus.Denied: + qWarning("Microphone permission is not granted!") + self.initializeErrorWindow() + return + elif permission_status == Qt.PermissionStatus.Granted: + print("[AudioSource] Microphone permission granted") self.initialize_window() self.initialize_audio(QMediaDevices.defaultAudioInput()) @@ -132,6 +148,13 @@ class InputTest(QWidget): self.m_suspend_resume_button.clicked.connect(self.toggle_suspend) self.layout.addWidget(self.m_suspend_resume_button) + def initializeErrorWindow(self): + self.layout = QVBoxLayout(self) + error_label = QLabel(self.tr("Microphone permission is not granted!")) + error_label.setWordWrap(True) + error_label.setAlignment(Qt.AlignCenter) + self.layout.addWidget(error_label) + def initialize_audio(self, device_info: QAudioDevice): format = QAudioFormat() format.setSampleRate(8000) |