mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 10:17:35 +00:00
Piano: Overhaul AudioPlayerLoop and throw out event loops
The audio player loop uses custom IPC plumbing to safely bypass any event loop shenanigans. There is still work to be done, but this already improves the realtime capabilities of Piano.
This commit is contained in:
parent
f1d486bcde
commit
b7eea03103
4 changed files with 148 additions and 42 deletions
|
@ -15,6 +15,7 @@
|
|||
#include <LibCore/Event.h>
|
||||
#include <LibCore/Object.h>
|
||||
#include <LibDSP/Music.h>
|
||||
#include <LibThreading/Thread.h>
|
||||
|
||||
class TrackManager;
|
||||
|
||||
|
@ -23,23 +24,30 @@ class TrackManager;
|
|||
class AudioPlayerLoop final : public Core::Object {
|
||||
C_OBJECT(AudioPlayerLoop)
|
||||
public:
|
||||
virtual ~AudioPlayerLoop() override;
|
||||
|
||||
void enqueue_audio();
|
||||
|
||||
void toggle_paused();
|
||||
bool is_playing() const { return m_should_play_audio; }
|
||||
|
||||
private:
|
||||
AudioPlayerLoop(TrackManager& track_manager, bool& need_to_write_wav, Audio::WavWriter& wav_writer);
|
||||
AudioPlayerLoop(TrackManager& track_manager, Atomic<bool>& need_to_write_wav, Threading::MutexProtected<Audio::WavWriter>& wav_writer);
|
||||
|
||||
virtual void timer_event(Core::TimerEvent&) override;
|
||||
intptr_t pipeline_thread_main();
|
||||
ErrorOr<void> send_audio_to_server();
|
||||
void write_wav_if_needed();
|
||||
|
||||
TrackManager& m_track_manager;
|
||||
FixedArray<DSP::Sample> m_buffer;
|
||||
Optional<Audio::ResampleHelper<DSP::Sample>> m_resampler;
|
||||
RefPtr<Audio::ConnectionToServer> m_audio_client;
|
||||
NonnullRefPtr<Threading::Thread> m_pipeline_thread;
|
||||
Vector<Audio::Sample, Audio::AUDIO_BUFFER_SIZE> m_remaining_samples {};
|
||||
|
||||
bool m_should_play_audio = true;
|
||||
Atomic<bool> m_should_play_audio { true };
|
||||
Atomic<bool> m_exit_requested { false };
|
||||
|
||||
bool& m_need_to_write_wav;
|
||||
Audio::WavWriter& m_wav_writer;
|
||||
Atomic<bool>& m_need_to_write_wav;
|
||||
Threading::MutexProtected<Audio::WavWriter>& m_wav_writer;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue