aboutsummaryrefslogtreecommitdiffstats
path: root/examples/multimedia/audiosource/audiosource.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/multimedia/audiosource/audiosource.py')
-rw-r--r--examples/multimedia/audiosource/audiosource.py55
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)