Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
ios_audio_session.h
Go to the documentation of this file.
1#ifndef PULP_FORMAT_IOS_AUDIO_SESSION_H
2#define PULP_FORMAT_IOS_AUDIO_SESSION_H
3
4// C ABI bridge for iOS AVAudioSession <-> Pulp C++.
5//
6// The Swift layer (apple/Sources/PulpSwift/PulpAudioSession.swift) observes
7// AVAudioSession notifications and forwards them through this C function
8// pointer table. C++ code (standalone app, plugin host) subscribes via
9// pulp::format::IosAudioSessionBridge (see ios_audio_session.hpp) and
10// receives typed callbacks without touching Swift or ObjC directly.
11//
12// Header is platform-agnostic (no iOS types) so it can be included by
13// cross-platform code. The Swift side only compiles on iOS.
14
15#include <stdint.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21// ── Event codes ────────────────────────────────────────────────────────
22
32
33// Reasons supplied alongside ROUTE_CHANGED. Mirrors
34// AVAudioSessionRouteChangeReason (UInt integer values).
45
46// Extra payload for interruption-ended events. Mirrors
47// AVAudioSessionInterruptionOptions (bitfield).
52
53// ── Event payload ──────────────────────────────────────────────────────
54
57 int32_t reason; // PulpIosRouteChangeReason when event == ROUTE_CHANGED
58 int32_t options; // PulpIosInterruptionOption bitfield
59 double sample_rate; // current AVAudioSession.sharedInstance.sampleRate
64
65// ── Callback signature ─────────────────────────────────────────────────
66
68 const PulpIosAudioSessionEvent* event, void* user_data);
69
70// Global sink registration. Thread-safe only in the sense that Swift is
71// expected to call the registered callback on the main thread — callers
72// should dispatch onto their own audio thread if they need rt-safety.
73// Passing NULL detaches the current sink.
75 void* user_data);
76
77// Swift / ObjC entry: emit a session event to the registered callback.
78// Safe to call from any thread; returns immediately if no sink is set.
80
81#ifdef __cplusplus
82}
83#endif
84
85#endif // PULP_FORMAT_IOS_AUDIO_SESSION_H
PulpIosAudioEvent
Definition ios_audio_session.h:23
@ PULP_IOS_AUDIO_EVENT_SILENCE_SECONDARY_AUDIO_BEGAN
Definition ios_audio_session.h:29
@ PULP_IOS_AUDIO_EVENT_ROUTE_CHANGED
Definition ios_audio_session.h:27
@ PULP_IOS_AUDIO_EVENT_SILENCE_SECONDARY_AUDIO_ENDED
Definition ios_audio_session.h:30
@ PULP_IOS_AUDIO_EVENT_MEDIA_SERVICES_RESET
Definition ios_audio_session.h:28
@ PULP_IOS_AUDIO_EVENT_NONE
Definition ios_audio_session.h:24
@ PULP_IOS_AUDIO_EVENT_INTERRUPTION_ENDED
Definition ios_audio_session.h:26
@ PULP_IOS_AUDIO_EVENT_INTERRUPTION_BEGAN
Definition ios_audio_session.h:25
void pulp_ios_audio_session_set_callback(PulpIosAudioSessionCallback cb, void *user_data)
PulpIosInterruptionOption
Definition ios_audio_session.h:48
@ PULP_IOS_INTERRUPTION_OPTION_NONE
Definition ios_audio_session.h:49
@ PULP_IOS_INTERRUPTION_OPTION_SHOULD_RESUME
Definition ios_audio_session.h:50
PulpIosRouteChangeReason
Definition ios_audio_session.h:35
@ PULP_IOS_ROUTE_CHANGE_UNKNOWN
Definition ios_audio_session.h:36
@ PULP_IOS_ROUTE_CHANGE_OLD_DEVICE_UNAVAILABLE
Definition ios_audio_session.h:38
@ PULP_IOS_ROUTE_CHANGE_NO_SUITABLE_ROUTE
Definition ios_audio_session.h:42
@ PULP_IOS_ROUTE_CHANGE_CONFIGURATION_CHANGE
Definition ios_audio_session.h:43
@ PULP_IOS_ROUTE_CHANGE_CATEGORY_CHANGE
Definition ios_audio_session.h:39
@ PULP_IOS_ROUTE_CHANGE_WAKE_FROM_SLEEP
Definition ios_audio_session.h:41
@ PULP_IOS_ROUTE_CHANGE_OVERRIDE
Definition ios_audio_session.h:40
@ PULP_IOS_ROUTE_CHANGE_NEW_DEVICE_AVAILABLE
Definition ios_audio_session.h:37
void pulp_ios_audio_session_emit(const PulpIosAudioSessionEvent *event)
void(* PulpIosAudioSessionCallback)(const PulpIosAudioSessionEvent *event, void *user_data)
Definition ios_audio_session.h:67
Definition ios_audio_session.h:55
int32_t output_channels
Definition ios_audio_session.h:61
PulpIosAudioEvent event
Definition ios_audio_session.h:56
int32_t input_channels
Definition ios_audio_session.h:62
double io_buffer_duration_seconds
Definition ios_audio_session.h:60
double sample_rate
Definition ios_audio_session.h:59
int32_t reason
Definition ios_audio_session.h:57
int32_t options
Definition ios_audio_session.h:58