diff options
Diffstat (limited to 'examples/multimedia/audiooutput')
-rw-r--r-- | examples/multimedia/audiooutput/audiooutput.py | 34 | ||||
-rw-r--r-- | examples/multimedia/audiooutput/doc/audiooutput.rst | 2 |
2 files changed, 21 insertions, 15 deletions
diff --git a/examples/multimedia/audiooutput/audiooutput.py b/examples/multimedia/audiooutput/audiooutput.py index 6cabebb68..06d52f68a 100644 --- a/examples/multimedia/audiooutput/audiooutput.py +++ b/examples/multimedia/audiooutput/audiooutput.py @@ -10,7 +10,7 @@ from struct import pack from PySide6.QtCore import (QByteArray, QIODevice, Qt, QSysInfo, QTimer, qWarning, Slot) -from PySide6.QtMultimedia import (QAudio, QAudioDevice, QAudioFormat, +from PySide6.QtMultimedia import (QAudio, QAudioFormat, QAudioSink, QMediaDevices) from PySide6.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLabel, QMainWindow, QPushButton, QSlider, @@ -40,24 +40,23 @@ class Generator(QIODevice): sample_size = fmt.bytesPerSample() * 8 if sample_size == 8: if fmt.sampleFormat() == QAudioFormat.UInt8: - scaler = lambda x: ((1.0 + x) / 2 * 255) + scaler = lambda x: ((1.0 + x) / 2 * 255) # noqa: E731 pack_format = 'B' elif fmt.sampleFormat() == QAudioFormat.Int16: - scaler = lambda x: x * 127 + scaler = lambda x: x * 127 # noqa: E731 pack_format = 'b' elif sample_size == 16: little_endian = QSysInfo.ByteOrder == QSysInfo.LittleEndian if fmt.sampleFormat() == QAudioFormat.UInt8: - scaler = lambda x: (1.0 + x) / 2 * 65535 + scaler = lambda x: (1.0 + x) / 2 * 65535 # noqa: E731 pack_format = '<H' if little_endian else '>H' elif fmt.sampleFormat() == QAudioFormat.Int16: - scaler = lambda x: x * 32767 + scaler = lambda x: x * 32767 # noqa: E731 pack_format = '<h' if little_endian else '>h' - assert(pack_format != '') + assert pack_format != '' channel_bytes = fmt.bytesPerSample() - sample_bytes = fmt.channelCount() * channel_bytes length = (fmt.sampleRate() * fmt.channelCount() * channel_bytes) * durationUs // 100000 @@ -133,16 +132,14 @@ class AudioTest(QMainWindow): layout.addWidget(self.m_modeButton) - self.m_suspendResumeButton = QPushButton( - clicked=self.toggle_suspend_resume) + self.m_suspendResumeButton = QPushButton(clicked=self.toggle_suspend_resume) self.m_suspendResumeButton.setText(self.SUSPEND_LABEL) layout.addWidget(self.m_suspendResumeButton) volume_box = QHBoxLayout() volume_label = QLabel("Volume:") - self.m_volumeSlider = QSlider(Qt.Horizontal, minimum=0, maximum=100, - singleStep=10) + self.m_volumeSlider = QSlider(Qt.Horizontal, minimum=0, maximum=100, singleStep=10) self.m_volumeSlider.valueChanged.connect(self.volume_changed) volume_box.addWidget(volume_label) @@ -167,8 +164,8 @@ class AudioTest(QMainWindow): qWarning("Default format not supported - trying to use nearest") self.m_format = info.nearestFormat(self.m_format) - self.m_generator = Generator(self.m_format, - self.DURATION_SECONDS * 1000000, self.TONE_SAMPLE_RATE_HZ, self) + self.m_generator = Generator(self.m_format, self.DURATION_SECONDS * 1000000, + self.TONE_SAMPLE_RATE_HZ, self) self.create_audio_output() @@ -180,11 +177,18 @@ class AudioTest(QMainWindow): self.m_audioSink.start(self.m_generator) self.m_volumeSlider.setValue(self.m_audioSink.volume() * 100) - @Slot(int) - def device_changed(self, index): + def closeEvent(self, e): + self.stop() + e.accept() + + def stop(self): self.m_pullTimer.stop() self.m_generator.stop() self.m_audioSink.stop() + + @Slot(int) + def device_changed(self, index): + self.stop() self.m_device = self.m_deviceBox.itemData(index) self.create_audio_output() diff --git a/examples/multimedia/audiooutput/doc/audiooutput.rst b/examples/multimedia/audiooutput/doc/audiooutput.rst index bbd71c5d8..fac7e33e1 100644 --- a/examples/multimedia/audiooutput/doc/audiooutput.rst +++ b/examples/multimedia/audiooutput/doc/audiooutput.rst @@ -1,6 +1,8 @@ Audio Output Example ==================== +.. tags:: Android + Audio Output demonstrates the basic use cases of QAudioOutput. This example provides a tone generator to supply continuous audio playback. The |