+ void* blocking_process_thread ();
+
+ void* freewheel_process_thread ();
+
+ private: // Methods
+ bool start_blocking_process_thread ();
+ bool stop_blocking_process_thread ();
+ bool blocking_process_freewheel ();
+ bool blocking_process_main (const float* interleaved_input_data,
+ float* interleaved_output_data);
+
+ void process_port_connection_changes ();
+ void process_incoming_midi ();
+ void process_outgoing_midi ();
+
+ bool engine_halted ();
+ bool running ();
+
+ static int portaudio_callback(const void* input,
+ void* output,
+ unsigned long frameCount,
+ const PaStreamCallbackTimeInfo* timeInfo,
+ PaStreamCallbackFlags statusFlags,
+ void* userData);
+
+ bool process_callback(const float* input,
+ float* output,
+ uint32_t frame_count,
+ const PaStreamCallbackTimeInfo* timeInfo,
+ PaStreamCallbackFlags statusFlags);
+
+ bool start_freewheel_process_thread ();
+ bool stop_freewheel_process_thread ();
+
+ static bool set_mmcss_pro_audio (HANDLE* task_handle);
+ static bool reset_mmcss (HANDLE task_handle);