From fb725ea4de4b97267aee31082f32a2fbc587c42b Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 4 Jun 2024 15:51:29 +0200 Subject: [PATCH] Platform audio handling --- sbapp/plyer/platforms/android/audio.py | 2 +- sbapp/plyer/platforms/macosx/audio.py | 27 ++++++++++++++++++++++++++ sbapp/plyer/platforms/win/audio.py | 15 ++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/sbapp/plyer/platforms/android/audio.py b/sbapp/plyer/platforms/android/audio.py index 8c5ff7b..3d40dc6 100644 --- a/sbapp/plyer/platforms/android/audio.py +++ b/sbapp/plyer/platforms/android/audio.py @@ -56,7 +56,7 @@ class AndroidAudio(Audio): else: self._recorder.setAudioSource(AudioSource.DEFAULT) self._recorder.setAudioSamplingRate(48000) - self._recorder.setAudioEncodingBitRate(32000) + self._recorder.setAudioEncodingBitRate(16000) self._recorder.setAudioChannels(1) self._recorder.setOutputFormat(OutputFormat.OGG) self._recorder.setAudioEncoder(AudioEncoder.OPUS) diff --git a/sbapp/plyer/platforms/macosx/audio.py b/sbapp/plyer/platforms/macosx/audio.py index a9f4237..1f2069e 100644 --- a/sbapp/plyer/platforms/macosx/audio.py +++ b/sbapp/plyer/platforms/macosx/audio.py @@ -6,6 +6,8 @@ from pyobjus.dylib_manager import INCLUDE, load_framework from sbapp.plyer.facades import Audio from sbapp.plyer.platforms.macosx.storagepath import OSXStoragePath +import threading + load_framework(INCLUDE.Foundation) load_framework(INCLUDE.AVFoundation) @@ -28,6 +30,13 @@ class OSXAudio(Audio): self._check_thread = None self._finished_callback = None + self._loaded_path = None + self.is_playing = False + self.sound = None + self.pa = None + self.is_playing = False + self.recorder = None + self.should_record = False def _check_playback(self): while self._player and self._player.isPlaying: @@ -81,6 +90,18 @@ class OSXAudio(Audio): self._player = None def _play(self): + # Conversion of Python file path string to Objective-C NSString + file_path_NSString = NSString.alloc() + file_path_NSString = file_path_NSString.initWithUTF8String_( + self._file_path + ) + + # Definition of Objective-C NSURL object for the output record file + # specified by NSString file path + file_NSURL = NSURL.alloc() + file_NSURL = file_NSURL.initWithString_(file_path_NSString) + self._current_file = file_NSURL + # Audio player instance initialization with the file NSURL # of the last recorded audio file self._player = AVAudioPlayer.alloc() @@ -96,6 +117,12 @@ class OSXAudio(Audio): self._check_thread = threading.Thread(target=self._check_playback, daemon=True) self._check_thread.start() + def reload(self): + self._loaded_path = None + + def playing(self): + return self.is_playing + def instance(): return OSXAudio() diff --git a/sbapp/plyer/platforms/win/audio.py b/sbapp/plyer/platforms/win/audio.py index dfe9edf..c74d97d 100644 --- a/sbapp/plyer/platforms/win/audio.py +++ b/sbapp/plyer/platforms/win/audio.py @@ -308,6 +308,15 @@ class WinAudio(Audio): self._recorder = None self._player = None self._current_file = None + self._check_thread = None + self._finished_callback = None + self._loaded_path = None + self.is_playing = False + self.sound = None + self.pa = None + self.is_playing = False + self.recorder = None + self.should_record = False def _start(self): ''' @@ -390,6 +399,12 @@ class WinAudio(Audio): self._player = WinPlayer(device=open_params.wDeviceID) self._player.play() + def reload(self): + self._loaded_path = None + + def playing(self): + return self.is_playing + def instance(): '''