feat(voice): add iOS VAD runtime support

This commit is contained in:
Edison Jwa
2026-05-21 20:51:45 +09:00
parent 171baf6e41
commit 6af4ecab0f
73 changed files with 11529 additions and 1249 deletions
+403 -3
View File
@@ -9,8 +9,8 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:freezed_annotation/freezed_annotation.dart' hide protected;
part 'api.freezed.dart';
// These functions are ignored because they are not marked as `pub`: `log_file_path`, `log_sink`, `map_join_error_code`, `map_join_sync_state`, `open_log_file`, `permission_events`, `publish_permission_state`, `runtime`, `session`, `transmit_mode_from_u8`
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `eq`, `eq`, `eq`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`
// These functions are ignored because they are not marked as `pub`: `install_panic_diagnostic_hook`, `log_file_path`, `log_sink`, `map_join_error_code`, `map_join_sync_state`, `open_log_file`, `permission_events`, `publish_permission_state`, `runtime`, `session`, `task_join_error`, `transmit_mode_from_u8`
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `assert_fields_are_eq`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `eq`, `eq`, `eq`, `eq`, `eq`, `eq`, `eq`, `eq`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`
// These functions are ignored (category: IgnoreBecauseExplicitAttribute): `from_kotlin_str`, `to_permission_gate`
/// Return the platform-conventional log-file path as a string, or
@@ -43,7 +43,12 @@ Future<void> disconnect() => RustLib.instance.api.crateApiDisconnect();
Future<bool> isConnected() => RustLib.instance.api.crateApiIsConnected();
/// Handle iOS AVAudioSession route changes (SDD-100).
void handleRouteChange() => RustLib.instance.api.crateApiHandleRouteChange();
void handleRouteChange({required BridgeAudioRoute route}) =>
RustLib.instance.api.crateApiHandleRouteChange(route: route);
/// Handle iOS AVAudioSession media-services reset.
void handleMediaServicesReset() =>
RustLib.instance.api.crateApiHandleMediaServicesReset();
/// Handle iOS AVAudioSession interruption begin (SDD-101).
void handleInterruptionBegan() =>
@@ -221,6 +226,330 @@ Stream<BridgeEvent> eventsStream() =>
Future<BridgeAudioStats> audioStats() =>
RustLib.instance.api.crateApiAudioStats();
/// Apply the P1 audio-processing config.
Future<void> setAudioProcessingConfig({
required BridgeAudioProcessingConfig config,
}) async {
_lastAppliedAudioConfig = config;
return RustLib.instance.api.crateApiSetAudioProcessingConfig(config: config);
}
/// Read P1 audio-processing diagnostics.
Future<BridgeAudioProcessingStats> audioProcessingStats() =>
RustLib.instance.api.crateApiAudioProcessingStats();
/// Read the current audio-processing config.
///
/// Derives the config from [audioProcessingStats] for the route/backend
/// fields, and returns the last value applied via [setAudioProcessingConfig]
/// for timing/debug fields. Falls back to P1 spec defaults on first call.
Future<BridgeAudioProcessingConfig> getAudioProcessingConfig() async {
BridgeAudioProcessingStats? stats;
try {
stats = await audioProcessingStats();
} catch (_) {}
final last = _lastAppliedAudioConfig;
return BridgeAudioProcessingConfig(
route: stats?.audioRoute ?? last?.route ?? BridgeAudioRoute.unknown,
iosMode:
stats?.iosVoiceProcessingMode ??
last?.iosMode ??
BridgeIosVoiceProcessingMode.platformVoiceProcessing,
processingBackend:
stats?.processingBackend ??
last?.processingBackend ??
BridgeAudioBackend.platformVoiceProcessing,
vadBackend:
stats?.vadBackend ?? last?.vadBackend ?? BridgeVadBackend.sileroOnnx,
aec: last?.aec ?? BridgeEffectOwner.platform,
ns: last?.ns ?? BridgeEffectOwner.platform,
agc: last?.agc ?? BridgeEffectOwner.platform,
hpfEnabled: last?.hpfEnabled ?? true,
limiterEnabled: last?.limiterEnabled ?? true,
vadHangoverMs: last?.vadHangoverMs ?? 500,
vadPreRollMs: last?.vadPreRollMs ?? 160,
vadMinTxMs: last?.vadMinTxMs ?? 200,
debugWavDumpEnabled: last?.debugWavDumpEnabled ?? false,
);
}
/// Last config applied via [setAudioProcessingConfig]. Used by
/// [getAudioProcessingConfig] to preserve timing/debug values across calls.
BridgeAudioProcessingConfig? _lastAppliedAudioConfig;
/// Configure the VAD model path.
Future<void> setVadModelPath({required String path}) =>
RustLib.instance.api.crateApiSetVadModelPath(path: path);
/// Enable or disable audio debug WAV dumping.
Future<void> enableAudioDebugWavDump({required bool enabled}) =>
RustLib.instance.api.crateApiEnableAudioDebugWavDump(enabled: enabled);
/// Select the iOS voice-processing mode.
Future<void> setIosVoiceProcessingMode({
required BridgeIosVoiceProcessingMode mode,
}) => RustLib.instance.api.crateApiSetIosVoiceProcessingMode(mode: mode);
/// Bridge processing backend.
enum BridgeAudioBackend {
/// Platform voice processing.
platformVoiceProcessing,
/// Sonora backend.
sonora,
/// WebRTC APM backend.
webrtcApm,
/// No-op backend.
noop,
}
/// P1 audio-processing configuration DTO.
class BridgeAudioProcessingConfig {
/// Route class.
final BridgeAudioRoute route;
/// iOS voice-processing mode.
final BridgeIosVoiceProcessingMode iosMode;
/// Processing backend.
final BridgeAudioBackend processingBackend;
/// VAD backend.
final BridgeVadBackend vadBackend;
/// AEC owner.
final BridgeEffectOwner aec;
/// Noise suppression owner.
final BridgeEffectOwner ns;
/// AGC owner.
final BridgeEffectOwner agc;
/// High-pass filter enabled.
final bool hpfEnabled;
/// Limiter enabled.
final bool limiterEnabled;
/// VAD hangover in ms.
final int vadHangoverMs;
/// VAD pre-roll in ms.
final int vadPreRollMs;
/// Minimum transmit duration in ms.
final int vadMinTxMs;
/// Debug WAV dump enabled.
final bool debugWavDumpEnabled;
const BridgeAudioProcessingConfig({
required this.route,
required this.iosMode,
required this.processingBackend,
required this.vadBackend,
required this.aec,
required this.ns,
required this.agc,
required this.hpfEnabled,
required this.limiterEnabled,
required this.vadHangoverMs,
required this.vadPreRollMs,
required this.vadMinTxMs,
required this.debugWavDumpEnabled,
});
@override
int get hashCode =>
route.hashCode ^
iosMode.hashCode ^
processingBackend.hashCode ^
vadBackend.hashCode ^
aec.hashCode ^
ns.hashCode ^
agc.hashCode ^
hpfEnabled.hashCode ^
limiterEnabled.hashCode ^
vadHangoverMs.hashCode ^
vadPreRollMs.hashCode ^
vadMinTxMs.hashCode ^
debugWavDumpEnabled.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is BridgeAudioProcessingConfig &&
runtimeType == other.runtimeType &&
route == other.route &&
iosMode == other.iosMode &&
processingBackend == other.processingBackend &&
vadBackend == other.vadBackend &&
aec == other.aec &&
ns == other.ns &&
agc == other.agc &&
hpfEnabled == other.hpfEnabled &&
limiterEnabled == other.limiterEnabled &&
vadHangoverMs == other.vadHangoverMs &&
vadPreRollMs == other.vadPreRollMs &&
vadMinTxMs == other.vadMinTxMs &&
debugWavDumpEnabled == other.debugWavDumpEnabled;
}
/// P1 audio-processing stats DTO.
class BridgeAudioProcessingStats {
/// Input dBFS.
final double inputDbfs;
/// Render dBFS.
final double renderDbfs;
/// Processed capture dBFS.
final double processedDbfs;
/// Latest VAD probability.
final double vadProbability;
/// VAD active.
final bool vadActive;
/// Currently transmitting.
final bool transmitting;
/// VAD backend.
final BridgeVadBackend vadBackend;
/// Fallback VAD active.
final bool vadFallbackActive;
/// Processing backend.
final BridgeAudioBackend processingBackend;
/// iOS voice-processing mode.
final BridgeIosVoiceProcessingMode iosVoiceProcessingMode;
/// Audio route.
final BridgeAudioRoute audioRoute;
/// Actual sample rate.
final int actualSampleRateHz;
/// Actual IO buffer frames.
final int actualIoBufferFrames;
/// Input overruns.
final BigInt inputOverruns;
/// Output underruns.
final BigInt outputUnderruns;
/// Callback xruns.
final BigInt callbackXruns;
/// Clipped samples.
final BigInt clippedSamples;
/// Sonora enabled.
final bool sonoraEnabled;
/// Platform voice processing enabled.
final bool platformVoiceProcessingEnabled;
const BridgeAudioProcessingStats({
required this.inputDbfs,
required this.renderDbfs,
required this.processedDbfs,
required this.vadProbability,
required this.vadActive,
required this.transmitting,
required this.vadBackend,
required this.vadFallbackActive,
required this.processingBackend,
required this.iosVoiceProcessingMode,
required this.audioRoute,
required this.actualSampleRateHz,
required this.actualIoBufferFrames,
required this.inputOverruns,
required this.outputUnderruns,
required this.callbackXruns,
required this.clippedSamples,
required this.sonoraEnabled,
required this.platformVoiceProcessingEnabled,
});
@override
int get hashCode =>
inputDbfs.hashCode ^
renderDbfs.hashCode ^
processedDbfs.hashCode ^
vadProbability.hashCode ^
vadActive.hashCode ^
transmitting.hashCode ^
vadBackend.hashCode ^
vadFallbackActive.hashCode ^
processingBackend.hashCode ^
iosVoiceProcessingMode.hashCode ^
audioRoute.hashCode ^
actualSampleRateHz.hashCode ^
actualIoBufferFrames.hashCode ^
inputOverruns.hashCode ^
outputUnderruns.hashCode ^
callbackXruns.hashCode ^
clippedSamples.hashCode ^
sonoraEnabled.hashCode ^
platformVoiceProcessingEnabled.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is BridgeAudioProcessingStats &&
runtimeType == other.runtimeType &&
inputDbfs == other.inputDbfs &&
renderDbfs == other.renderDbfs &&
processedDbfs == other.processedDbfs &&
vadProbability == other.vadProbability &&
vadActive == other.vadActive &&
transmitting == other.transmitting &&
vadBackend == other.vadBackend &&
vadFallbackActive == other.vadFallbackActive &&
processingBackend == other.processingBackend &&
iosVoiceProcessingMode == other.iosVoiceProcessingMode &&
audioRoute == other.audioRoute &&
actualSampleRateHz == other.actualSampleRateHz &&
actualIoBufferFrames == other.actualIoBufferFrames &&
inputOverruns == other.inputOverruns &&
outputUnderruns == other.outputUnderruns &&
callbackXruns == other.callbackXruns &&
clippedSamples == other.clippedSamples &&
sonoraEnabled == other.sonoraEnabled &&
platformVoiceProcessingEnabled ==
other.platformVoiceProcessingEnabled;
}
/// Bridge route class for P1 audio-processing policy.
enum BridgeAudioRoute {
/// Built-in speakerphone.
speaker,
/// Built-in receiver/earpiece.
earpiece,
/// Wired or USB headset.
wiredHeadset,
/// Bluetooth HFP duplex route.
bluetoothHfp,
/// Bluetooth A2DP output-only route.
bluetoothA2Dp,
/// Unknown route.
unknown,
}
/// Statistics from the audio engine.
class BridgeAudioStats {
/// Number of Opus frames sent since audio started.
@@ -402,6 +731,24 @@ class BridgeClient {
isServerQuery == other.isServerQuery;
}
/// Bridge effect owner for AEC/NS/AGC.
enum BridgeEffectOwner {
/// Platform-owned effect.
platform,
/// Sonora-owned effect.
sonora,
/// WebRTC APM-owned effect.
webrtcApm,
/// Conservative route-managed setting.
conservative,
/// Disabled.
off,
}
@freezed
sealed class BridgeEvent with _$BridgeEvent {
const BridgeEvent._();
@@ -536,6 +883,15 @@ sealed class BridgeEvent with _$BridgeEvent {
}) = BridgeEvent_PermissionState;
}
/// Bridge iOS voice-processing mode.
enum BridgeIosVoiceProcessingMode {
/// Shipping VPIO path.
platformVoiceProcessing,
/// Experimental Sonora path.
sonoraExperimental,
}
/// Coarse OS-reported network state. Mirrors
/// [`chanora_core::NetworkState`] across the bridge.
enum BridgeNetworkState {
@@ -635,25 +991,69 @@ enum BridgeTransmitMode {
voiceActivity,
}
/// Bridge VAD backend.
enum BridgeVadBackend {
/// Silero ONNX VAD.
sileroOnnx,
/// TEN VAD.
tenVad,
/// WebRTC fallback VAD.
webrtcVad,
/// Debug energy VAD.
energyDebug,
/// VAD disabled.
disabled,
}
/// Bridge mirror of stable join error/status codes.
enum BridgeVoiceJoinErrorCode {
/// Duplicate same-target join intent was coalesced.
duplicateSameTargetCoalesced,
/// A different target was requested while one is already pending.
joinAlreadyPendingDifferentTarget,
/// Join denied by server policy/permission.
joinDenied,
/// Join failed due to protocol-level error.
joinProtocolFailure,
/// Join failed due to transport/network error.
joinNetworkFailure,
/// Join timed out awaiting confirmation.
joinTimeout,
/// Pending join was superseded by user leave.
joinSupersededByLeave,
/// Stale join outcome was ignored.
joinStaleOutcomeIgnored,
/// Authoritative membership reconciled to different channel.
joinReconciledDifferentChannel,
/// Join command was rejected before send acceptance.
joinCommandRejectedBeforeSend,
/// Join intent rejected while reducer synchronizing.
joinCannotStartWhileSynchronizing,
}
/// Bridge mirror of core join projection sync state.
enum BridgeVoiceJoinSyncState {
/// Reducer is ready to accept channel actions.
ready,
/// Reducer is waiting on initial snapshot reconciliation.
synchronizingInitialSnapshot,
/// Reducer is waiting on reconnect snapshot reconciliation.
synchronizingReconnect,
}
@@ -67,7 +67,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.12.0';
@override
int get rustContentHash => 1322894465;
int get rustContentHash => -1835973251;
static const kDefaultExternalLibraryLoaderConfig =
ExternalLibraryLoaderConfig(
@@ -81,6 +81,8 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
abstract class RustLibApi extends BaseApi {
Future<PlatformInt64> crateApiAddBookmark({required BridgeBookmark b});
Future<BridgeAudioProcessingStats> crateApiAudioProcessingStats();
Future<BridgeAudioStats> crateApiAudioStats();
Future<void> crateApiBridgeInit();
@@ -95,6 +97,8 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiDisconnect();
Future<void> crateApiEnableAudioDebugWavDump({required bool enabled});
Stream<BridgeEvent> crateApiEventsStream();
String crateApiExportDiagnostics();
@@ -109,7 +113,9 @@ abstract class RustLibApi extends BaseApi {
void crateApiHandleInterruptionEnded({required bool shouldResume});
void crateApiHandleRouteChange();
void crateApiHandleMediaServicesReset();
void crateApiHandleRouteChange({required BridgeAudioRoute route});
Future<void> crateApiInitStorage({required String dir});
@@ -126,10 +132,18 @@ abstract class RustLibApi extends BaseApi {
Future<(String, String, String)> crateApiPttDescriptor();
Future<void> crateApiSetAudioProcessingConfig({
required BridgeAudioProcessingConfig config,
});
Future<void> crateApiSetHardMute({required bool muted});
Future<void> crateApiSetInputMuted({required bool muted});
Future<void> crateApiSetIosVoiceProcessingMode({
required BridgeIosVoiceProcessingMode mode,
});
void crateApiSetNetworkState({required BridgeNetworkState state});
Future<void> crateApiSetOutputGain({required double gain});
@@ -147,6 +161,8 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiSetTransmitMode({required BridgeTransmitMode mode});
Future<void> crateApiSetVadModelPath({required String path});
Future<BridgeSnapshot> crateApiSnapshot();
Future<void> crateApiUpdateBookmark({required BridgeBookmark b});
@@ -196,7 +212,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
const TaskConstMeta(debugName: "add_bookmark", argNames: ["b"]);
@override
Future<BridgeAudioStats> crateApiAudioStats() {
Future<BridgeAudioProcessingStats> crateApiAudioProcessingStats() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
@@ -208,6 +224,33 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_bridge_audio_processing_stats,
decodeErrorData: sse_decode_bridge_error,
),
constMeta: kCrateApiAudioProcessingStatsConstMeta,
argValues: [],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiAudioProcessingStatsConstMeta =>
const TaskConstMeta(debugName: "audio_processing_stats", argNames: []);
@override
Future<BridgeAudioStats> crateApiAudioStats() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 3,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_bridge_audio_stats,
decodeErrorData: sse_decode_bridge_error,
@@ -231,7 +274,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 3,
funcId: 4,
port: port_,
);
},
@@ -265,7 +308,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 4,
funcId: 5,
port: port_,
);
},
@@ -295,7 +338,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 5,
funcId: 6,
port: port_,
);
},
@@ -322,7 +365,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 6,
funcId: 7,
port: port_,
);
},
@@ -340,6 +383,37 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiDisconnectConstMeta =>
const TaskConstMeta(debugName: "disconnect", argNames: []);
@override
Future<void> crateApiEnableAudioDebugWavDump({required bool enabled}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_bool(enabled, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 8,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: sse_decode_bridge_error,
),
constMeta: kCrateApiEnableAudioDebugWavDumpConstMeta,
argValues: [enabled],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiEnableAudioDebugWavDumpConstMeta =>
const TaskConstMeta(
debugName: "enable_audio_debug_wav_dump",
argNames: ["enabled"],
);
@override
Stream<BridgeEvent> crateApiEventsStream() {
final sink = RustStreamSink<BridgeEvent>();
@@ -352,7 +426,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 7,
funcId: 9,
port: port_,
);
},
@@ -378,7 +452,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 8)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 10)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
@@ -403,7 +477,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 9,
funcId: 11,
port: port_,
);
},
@@ -430,7 +504,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 10,
funcId: 12,
port: port_,
);
},
@@ -457,7 +531,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 11,
funcId: 13,
port: port_,
);
},
@@ -481,7 +555,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 12)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
@@ -504,7 +578,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_bool(shouldResume, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 13)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 15)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
@@ -524,26 +598,54 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
@override
void crateApiHandleRouteChange() {
void crateApiHandleMediaServicesReset() {
return handler.executeSync(
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 16)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiHandleRouteChangeConstMeta,
constMeta: kCrateApiHandleMediaServicesResetConstMeta,
argValues: [],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiHandleRouteChangeConstMeta =>
const TaskConstMeta(debugName: "handle_route_change", argNames: []);
TaskConstMeta get kCrateApiHandleMediaServicesResetConstMeta =>
const TaskConstMeta(
debugName: "handle_media_services_reset",
argNames: [],
);
@override
void crateApiHandleRouteChange({required BridgeAudioRoute route}) {
return handler.executeSync(
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_bridge_audio_route(route, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 17)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: null,
),
constMeta: kCrateApiHandleRouteChangeConstMeta,
argValues: [route],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiHandleRouteChangeConstMeta => const TaskConstMeta(
debugName: "handle_route_change",
argNames: ["route"],
);
@override
Future<void> crateApiInitStorage({required String dir}) {
@@ -555,7 +657,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 15,
funcId: 18,
port: port_,
);
},
@@ -582,7 +684,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 16,
funcId: 19,
port: port_,
);
},
@@ -609,7 +711,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 17,
funcId: 20,
port: port_,
);
},
@@ -633,7 +735,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
SyncTask(
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 21)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_String,
@@ -663,7 +765,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 19,
funcId: 22,
port: port_,
);
},
@@ -692,7 +794,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 20,
funcId: 23,
port: port_,
);
},
@@ -710,6 +812,42 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiPttDescriptorConstMeta =>
const TaskConstMeta(debugName: "ptt_descriptor", argNames: []);
@override
Future<void> crateApiSetAudioProcessingConfig({
required BridgeAudioProcessingConfig config,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_box_autoadd_bridge_audio_processing_config(
config,
serializer,
);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 24,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: sse_decode_bridge_error,
),
constMeta: kCrateApiSetAudioProcessingConfigConstMeta,
argValues: [config],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiSetAudioProcessingConfigConstMeta =>
const TaskConstMeta(
debugName: "set_audio_processing_config",
argNames: ["config"],
);
@override
Future<void> crateApiSetHardMute({required bool muted}) {
return handler.executeNormal(
@@ -720,7 +858,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 21,
funcId: 25,
port: port_,
);
},
@@ -748,7 +886,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 22,
funcId: 26,
port: port_,
);
},
@@ -766,6 +904,39 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiSetInputMutedConstMeta =>
const TaskConstMeta(debugName: "set_input_muted", argNames: ["muted"]);
@override
Future<void> crateApiSetIosVoiceProcessingMode({
required BridgeIosVoiceProcessingMode mode,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_bridge_ios_voice_processing_mode(mode, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 27,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: sse_decode_bridge_error,
),
constMeta: kCrateApiSetIosVoiceProcessingModeConstMeta,
argValues: [mode],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiSetIosVoiceProcessingModeConstMeta =>
const TaskConstMeta(
debugName: "set_ios_voice_processing_mode",
argNames: ["mode"],
);
@override
void crateApiSetNetworkState({required BridgeNetworkState state}) {
return handler.executeSync(
@@ -773,7 +944,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
callFfi: () {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_bridge_network_state(state, serializer);
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 23)!;
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 28)!;
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
@@ -799,7 +970,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 24,
funcId: 29,
port: port_,
);
},
@@ -827,7 +998,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 25,
funcId: 30,
port: port_,
);
},
@@ -855,7 +1026,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 26,
funcId: 31,
port: port_,
);
},
@@ -887,7 +1058,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 27,
funcId: 32,
port: port_,
);
},
@@ -917,7 +1088,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 28,
funcId: 33,
port: port_,
);
},
@@ -945,7 +1116,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 29,
funcId: 34,
port: port_,
);
},
@@ -963,6 +1134,34 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiSetTransmitModeConstMeta =>
const TaskConstMeta(debugName: "set_transmit_mode", argNames: ["mode"]);
@override
Future<void> crateApiSetVadModelPath({required String path}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
final serializer = SseSerializer(generalizedFrbRustBinding);
sse_encode_String(path, serializer);
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 35,
port: port_,
);
},
codec: SseCodec(
decodeSuccessData: sse_decode_unit,
decodeErrorData: sse_decode_bridge_error,
),
constMeta: kCrateApiSetVadModelPathConstMeta,
argValues: [path],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiSetVadModelPathConstMeta =>
const TaskConstMeta(debugName: "set_vad_model_path", argNames: ["path"]);
@override
Future<BridgeSnapshot> crateApiSnapshot() {
return handler.executeNormal(
@@ -972,7 +1171,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 30,
funcId: 36,
port: port_,
);
},
@@ -1000,7 +1199,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 31,
funcId: 37,
port: port_,
);
},
@@ -1032,7 +1231,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 32,
funcId: 38,
port: port_,
);
},
@@ -1061,7 +1260,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
pdeCallFfi(
generalizedFrbRustBinding,
serializer,
funcId: 33,
funcId: 39,
port: port_,
);
},
@@ -1105,6 +1304,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw as bool;
}
@protected
BridgeAudioProcessingConfig
dco_decode_box_autoadd_bridge_audio_processing_config(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return dco_decode_bridge_audio_processing_config(raw);
}
@protected
BridgeBookmark dco_decode_box_autoadd_bridge_bookmark(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -1125,6 +1331,76 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return dco_decode_u_64(raw);
}
@protected
BridgeAudioBackend dco_decode_bridge_audio_backend(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return BridgeAudioBackend.values[raw as int];
}
@protected
BridgeAudioProcessingConfig dco_decode_bridge_audio_processing_config(
dynamic raw,
) {
// Codec=Dco (DartCObject based), see doc to use other codecs
final arr = raw as List<dynamic>;
if (arr.length != 13)
throw Exception('unexpected arr length: expect 13 but see ${arr.length}');
return BridgeAudioProcessingConfig(
route: dco_decode_bridge_audio_route(arr[0]),
iosMode: dco_decode_bridge_ios_voice_processing_mode(arr[1]),
processingBackend: dco_decode_bridge_audio_backend(arr[2]),
vadBackend: dco_decode_bridge_vad_backend(arr[3]),
aec: dco_decode_bridge_effect_owner(arr[4]),
ns: dco_decode_bridge_effect_owner(arr[5]),
agc: dco_decode_bridge_effect_owner(arr[6]),
hpfEnabled: dco_decode_bool(arr[7]),
limiterEnabled: dco_decode_bool(arr[8]),
vadHangoverMs: dco_decode_u_32(arr[9]),
vadPreRollMs: dco_decode_u_32(arr[10]),
vadMinTxMs: dco_decode_u_32(arr[11]),
debugWavDumpEnabled: dco_decode_bool(arr[12]),
);
}
@protected
BridgeAudioProcessingStats dco_decode_bridge_audio_processing_stats(
dynamic raw,
) {
// Codec=Dco (DartCObject based), see doc to use other codecs
final arr = raw as List<dynamic>;
if (arr.length != 19)
throw Exception('unexpected arr length: expect 19 but see ${arr.length}');
return BridgeAudioProcessingStats(
inputDbfs: dco_decode_f_32(arr[0]),
renderDbfs: dco_decode_f_32(arr[1]),
processedDbfs: dco_decode_f_32(arr[2]),
vadProbability: dco_decode_f_32(arr[3]),
vadActive: dco_decode_bool(arr[4]),
transmitting: dco_decode_bool(arr[5]),
vadBackend: dco_decode_bridge_vad_backend(arr[6]),
vadFallbackActive: dco_decode_bool(arr[7]),
processingBackend: dco_decode_bridge_audio_backend(arr[8]),
iosVoiceProcessingMode: dco_decode_bridge_ios_voice_processing_mode(
arr[9],
),
audioRoute: dco_decode_bridge_audio_route(arr[10]),
actualSampleRateHz: dco_decode_u_32(arr[11]),
actualIoBufferFrames: dco_decode_u_32(arr[12]),
inputOverruns: dco_decode_u_64(arr[13]),
outputUnderruns: dco_decode_u_64(arr[14]),
callbackXruns: dco_decode_u_64(arr[15]),
clippedSamples: dco_decode_u_64(arr[16]),
sonoraEnabled: dco_decode_bool(arr[17]),
platformVoiceProcessingEnabled: dco_decode_bool(arr[18]),
);
}
@protected
BridgeAudioRoute dco_decode_bridge_audio_route(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return BridgeAudioRoute.values[raw as int];
}
@protected
BridgeAudioStats dco_decode_bridge_audio_stats(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -1185,6 +1461,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
}
@protected
BridgeEffectOwner dco_decode_bridge_effect_owner(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return BridgeEffectOwner.values[raw as int];
}
@protected
BridgeError dco_decode_bridge_error(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -1273,6 +1555,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
BridgeIosVoiceProcessingMode dco_decode_bridge_ios_voice_processing_mode(
dynamic raw,
) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return BridgeIosVoiceProcessingMode.values[raw as int];
}
@protected
BridgeNetworkState dco_decode_bridge_network_state(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -1308,6 +1598,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return BridgeTransmitMode.values[raw as int];
}
@protected
BridgeVadBackend dco_decode_bridge_vad_backend(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return BridgeVadBackend.values[raw as int];
}
@protected
BridgeVoiceJoinErrorCode dco_decode_bridge_voice_join_error_code(
dynamic raw,
@@ -1463,6 +1759,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return deserializer.buffer.getUint8() != 0;
}
@protected
BridgeAudioProcessingConfig
sse_decode_box_autoadd_bridge_audio_processing_config(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
return (sse_decode_bridge_audio_processing_config(deserializer));
}
@protected
BridgeBookmark sse_decode_box_autoadd_bridge_bookmark(
SseDeserializer deserializer,
@@ -1485,6 +1790,105 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return (sse_decode_u_64(deserializer));
}
@protected
BridgeAudioBackend sse_decode_bridge_audio_backend(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return BridgeAudioBackend.values[inner];
}
@protected
BridgeAudioProcessingConfig sse_decode_bridge_audio_processing_config(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var var_route = sse_decode_bridge_audio_route(deserializer);
var var_iosMode = sse_decode_bridge_ios_voice_processing_mode(deserializer);
var var_processingBackend = sse_decode_bridge_audio_backend(deserializer);
var var_vadBackend = sse_decode_bridge_vad_backend(deserializer);
var var_aec = sse_decode_bridge_effect_owner(deserializer);
var var_ns = sse_decode_bridge_effect_owner(deserializer);
var var_agc = sse_decode_bridge_effect_owner(deserializer);
var var_hpfEnabled = sse_decode_bool(deserializer);
var var_limiterEnabled = sse_decode_bool(deserializer);
var var_vadHangoverMs = sse_decode_u_32(deserializer);
var var_vadPreRollMs = sse_decode_u_32(deserializer);
var var_vadMinTxMs = sse_decode_u_32(deserializer);
var var_debugWavDumpEnabled = sse_decode_bool(deserializer);
return BridgeAudioProcessingConfig(
route: var_route,
iosMode: var_iosMode,
processingBackend: var_processingBackend,
vadBackend: var_vadBackend,
aec: var_aec,
ns: var_ns,
agc: var_agc,
hpfEnabled: var_hpfEnabled,
limiterEnabled: var_limiterEnabled,
vadHangoverMs: var_vadHangoverMs,
vadPreRollMs: var_vadPreRollMs,
vadMinTxMs: var_vadMinTxMs,
debugWavDumpEnabled: var_debugWavDumpEnabled,
);
}
@protected
BridgeAudioProcessingStats sse_decode_bridge_audio_processing_stats(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var var_inputDbfs = sse_decode_f_32(deserializer);
var var_renderDbfs = sse_decode_f_32(deserializer);
var var_processedDbfs = sse_decode_f_32(deserializer);
var var_vadProbability = sse_decode_f_32(deserializer);
var var_vadActive = sse_decode_bool(deserializer);
var var_transmitting = sse_decode_bool(deserializer);
var var_vadBackend = sse_decode_bridge_vad_backend(deserializer);
var var_vadFallbackActive = sse_decode_bool(deserializer);
var var_processingBackend = sse_decode_bridge_audio_backend(deserializer);
var var_iosVoiceProcessingMode =
sse_decode_bridge_ios_voice_processing_mode(deserializer);
var var_audioRoute = sse_decode_bridge_audio_route(deserializer);
var var_actualSampleRateHz = sse_decode_u_32(deserializer);
var var_actualIoBufferFrames = sse_decode_u_32(deserializer);
var var_inputOverruns = sse_decode_u_64(deserializer);
var var_outputUnderruns = sse_decode_u_64(deserializer);
var var_callbackXruns = sse_decode_u_64(deserializer);
var var_clippedSamples = sse_decode_u_64(deserializer);
var var_sonoraEnabled = sse_decode_bool(deserializer);
var var_platformVoiceProcessingEnabled = sse_decode_bool(deserializer);
return BridgeAudioProcessingStats(
inputDbfs: var_inputDbfs,
renderDbfs: var_renderDbfs,
processedDbfs: var_processedDbfs,
vadProbability: var_vadProbability,
vadActive: var_vadActive,
transmitting: var_transmitting,
vadBackend: var_vadBackend,
vadFallbackActive: var_vadFallbackActive,
processingBackend: var_processingBackend,
iosVoiceProcessingMode: var_iosVoiceProcessingMode,
audioRoute: var_audioRoute,
actualSampleRateHz: var_actualSampleRateHz,
actualIoBufferFrames: var_actualIoBufferFrames,
inputOverruns: var_inputOverruns,
outputUnderruns: var_outputUnderruns,
callbackXruns: var_callbackXruns,
clippedSamples: var_clippedSamples,
sonoraEnabled: var_sonoraEnabled,
platformVoiceProcessingEnabled: var_platformVoiceProcessingEnabled,
);
}
@protected
BridgeAudioRoute sse_decode_bridge_audio_route(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return BridgeAudioRoute.values[inner];
}
@protected
BridgeAudioStats sse_decode_bridge_audio_stats(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -1553,6 +1957,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
);
}
@protected
BridgeEffectOwner sse_decode_bridge_effect_owner(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return BridgeEffectOwner.values[inner];
}
@protected
BridgeError sse_decode_bridge_error(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -1678,6 +2091,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
BridgeIosVoiceProcessingMode sse_decode_bridge_ios_voice_processing_mode(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return BridgeIosVoiceProcessingMode.values[inner];
}
@protected
BridgeNetworkState sse_decode_bridge_network_state(
SseDeserializer deserializer,
@@ -1726,6 +2148,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return BridgeTransmitMode.values[inner];
}
@protected
BridgeVadBackend sse_decode_bridge_vad_backend(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
var inner = sse_decode_i_32(deserializer);
return BridgeVadBackend.values[inner];
}
@protected
BridgeVoiceJoinErrorCode sse_decode_bridge_voice_join_error_code(
SseDeserializer deserializer,
@@ -1929,6 +2358,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
serializer.buffer.putUint8(self ? 1 : 0);
}
@protected
void sse_encode_box_autoadd_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_bridge_audio_processing_config(self, serializer);
}
@protected
void sse_encode_box_autoadd_bridge_bookmark(
BridgeBookmark self,
@@ -1953,6 +2391,75 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_u_64(self, serializer);
}
@protected
void sse_encode_bridge_audio_backend(
BridgeAudioBackend self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_bridge_audio_route(self.route, serializer);
sse_encode_bridge_ios_voice_processing_mode(self.iosMode, serializer);
sse_encode_bridge_audio_backend(self.processingBackend, serializer);
sse_encode_bridge_vad_backend(self.vadBackend, serializer);
sse_encode_bridge_effect_owner(self.aec, serializer);
sse_encode_bridge_effect_owner(self.ns, serializer);
sse_encode_bridge_effect_owner(self.agc, serializer);
sse_encode_bool(self.hpfEnabled, serializer);
sse_encode_bool(self.limiterEnabled, serializer);
sse_encode_u_32(self.vadHangoverMs, serializer);
sse_encode_u_32(self.vadPreRollMs, serializer);
sse_encode_u_32(self.vadMinTxMs, serializer);
sse_encode_bool(self.debugWavDumpEnabled, serializer);
}
@protected
void sse_encode_bridge_audio_processing_stats(
BridgeAudioProcessingStats self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_f_32(self.inputDbfs, serializer);
sse_encode_f_32(self.renderDbfs, serializer);
sse_encode_f_32(self.processedDbfs, serializer);
sse_encode_f_32(self.vadProbability, serializer);
sse_encode_bool(self.vadActive, serializer);
sse_encode_bool(self.transmitting, serializer);
sse_encode_bridge_vad_backend(self.vadBackend, serializer);
sse_encode_bool(self.vadFallbackActive, serializer);
sse_encode_bridge_audio_backend(self.processingBackend, serializer);
sse_encode_bridge_ios_voice_processing_mode(
self.iosVoiceProcessingMode,
serializer,
);
sse_encode_bridge_audio_route(self.audioRoute, serializer);
sse_encode_u_32(self.actualSampleRateHz, serializer);
sse_encode_u_32(self.actualIoBufferFrames, serializer);
sse_encode_u_64(self.inputOverruns, serializer);
sse_encode_u_64(self.outputUnderruns, serializer);
sse_encode_u_64(self.callbackXruns, serializer);
sse_encode_u_64(self.clippedSamples, serializer);
sse_encode_bool(self.sonoraEnabled, serializer);
sse_encode_bool(self.platformVoiceProcessingEnabled, serializer);
}
@protected
void sse_encode_bridge_audio_route(
BridgeAudioRoute self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_audio_stats(
BridgeAudioStats self,
@@ -1984,6 +2491,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_u_64(self.parent, serializer);
sse_encode_String(self.name, serializer);
sse_encode_i_64(self.order, serializer);
sse_encode_bool(self.hasPassword, serializer);
}
@protected
@@ -1992,9 +2500,21 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_u_64(self.id, serializer);
sse_encode_u_64(self.channel, serializer);
sse_encode_String(self.name, serializer);
sse_encode_bool(self.inputMuted, serializer);
sse_encode_bool(self.outputMuted, serializer);
sse_encode_bool(self.isSpeaking, serializer);
sse_encode_bool(self.isServerQuery, serializer);
}
@protected
void sse_encode_bridge_effect_owner(
BridgeEffectOwner self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_error(BridgeError self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -2106,6 +2626,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
void sse_encode_bridge_ios_voice_processing_mode(
BridgeIosVoiceProcessingMode self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_network_state(
BridgeNetworkState self,
@@ -2148,6 +2677,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_vad_backend(
BridgeVadBackend self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_i_32(self.index, serializer);
}
@protected
void sse_encode_bridge_voice_join_error_code(
BridgeVoiceJoinErrorCode self,
@@ -33,6 +33,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool dco_decode_bool(dynamic raw);
@protected
BridgeAudioProcessingConfig
dco_decode_box_autoadd_bridge_audio_processing_config(dynamic raw);
@protected
BridgeBookmark dco_decode_box_autoadd_bridge_bookmark(dynamic raw);
@@ -44,6 +48,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt dco_decode_box_autoadd_u_64(dynamic raw);
@protected
BridgeAudioBackend dco_decode_bridge_audio_backend(dynamic raw);
@protected
BridgeAudioProcessingConfig dco_decode_bridge_audio_processing_config(
dynamic raw,
);
@protected
BridgeAudioProcessingStats dco_decode_bridge_audio_processing_stats(
dynamic raw,
);
@protected
BridgeAudioRoute dco_decode_bridge_audio_route(dynamic raw);
@protected
BridgeAudioStats dco_decode_bridge_audio_stats(dynamic raw);
@@ -56,12 +76,20 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeClient dco_decode_bridge_client(dynamic raw);
@protected
BridgeEffectOwner dco_decode_bridge_effect_owner(dynamic raw);
@protected
BridgeError dco_decode_bridge_error(dynamic raw);
@protected
BridgeEvent dco_decode_bridge_event(dynamic raw);
@protected
BridgeIosVoiceProcessingMode dco_decode_bridge_ios_voice_processing_mode(
dynamic raw,
);
@protected
BridgeNetworkState dco_decode_bridge_network_state(dynamic raw);
@@ -74,6 +102,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeTransmitMode dco_decode_bridge_transmit_mode(dynamic raw);
@protected
BridgeVadBackend dco_decode_bridge_vad_backend(dynamic raw);
@protected
BridgeVoiceJoinErrorCode dco_decode_bridge_voice_join_error_code(dynamic raw);
@@ -143,6 +174,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
BridgeAudioProcessingConfig
sse_decode_box_autoadd_bridge_audio_processing_config(
SseDeserializer deserializer,
);
@protected
BridgeBookmark sse_decode_box_autoadd_bridge_bookmark(
SseDeserializer deserializer,
@@ -156,6 +193,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt sse_decode_box_autoadd_u_64(SseDeserializer deserializer);
@protected
BridgeAudioBackend sse_decode_bridge_audio_backend(
SseDeserializer deserializer,
);
@protected
BridgeAudioProcessingConfig sse_decode_bridge_audio_processing_config(
SseDeserializer deserializer,
);
@protected
BridgeAudioProcessingStats sse_decode_bridge_audio_processing_stats(
SseDeserializer deserializer,
);
@protected
BridgeAudioRoute sse_decode_bridge_audio_route(SseDeserializer deserializer);
@protected
BridgeAudioStats sse_decode_bridge_audio_stats(SseDeserializer deserializer);
@@ -168,12 +223,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeClient sse_decode_bridge_client(SseDeserializer deserializer);
@protected
BridgeEffectOwner sse_decode_bridge_effect_owner(
SseDeserializer deserializer,
);
@protected
BridgeError sse_decode_bridge_error(SseDeserializer deserializer);
@protected
BridgeEvent sse_decode_bridge_event(SseDeserializer deserializer);
@protected
BridgeIosVoiceProcessingMode sse_decode_bridge_ios_voice_processing_mode(
SseDeserializer deserializer,
);
@protected
BridgeNetworkState sse_decode_bridge_network_state(
SseDeserializer deserializer,
@@ -192,6 +257,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
BridgeVadBackend sse_decode_bridge_vad_backend(SseDeserializer deserializer);
@protected
BridgeVoiceJoinErrorCode sse_decode_bridge_voice_join_error_code(
SseDeserializer deserializer,
@@ -283,6 +351,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
);
@protected
void sse_encode_box_autoadd_bridge_bookmark(
BridgeBookmark self,
@@ -298,6 +372,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_box_autoadd_u_64(BigInt self, SseSerializer serializer);
@protected
void sse_encode_bridge_audio_backend(
BridgeAudioBackend self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_processing_stats(
BridgeAudioProcessingStats self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_route(
BridgeAudioRoute self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_stats(
BridgeAudioStats self,
@@ -316,12 +414,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_bridge_client(BridgeClient self, SseSerializer serializer);
@protected
void sse_encode_bridge_effect_owner(
BridgeEffectOwner self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_error(BridgeError self, SseSerializer serializer);
@protected
void sse_encode_bridge_event(BridgeEvent self, SseSerializer serializer);
@protected
void sse_encode_bridge_ios_voice_processing_mode(
BridgeIosVoiceProcessingMode self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_network_state(
BridgeNetworkState self,
@@ -346,6 +456,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void sse_encode_bridge_vad_backend(
BridgeVadBackend self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_voice_join_error_code(
BridgeVoiceJoinErrorCode self,
@@ -35,6 +35,10 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool dco_decode_bool(dynamic raw);
@protected
BridgeAudioProcessingConfig
dco_decode_box_autoadd_bridge_audio_processing_config(dynamic raw);
@protected
BridgeBookmark dco_decode_box_autoadd_bridge_bookmark(dynamic raw);
@@ -46,6 +50,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt dco_decode_box_autoadd_u_64(dynamic raw);
@protected
BridgeAudioBackend dco_decode_bridge_audio_backend(dynamic raw);
@protected
BridgeAudioProcessingConfig dco_decode_bridge_audio_processing_config(
dynamic raw,
);
@protected
BridgeAudioProcessingStats dco_decode_bridge_audio_processing_stats(
dynamic raw,
);
@protected
BridgeAudioRoute dco_decode_bridge_audio_route(dynamic raw);
@protected
BridgeAudioStats dco_decode_bridge_audio_stats(dynamic raw);
@@ -58,12 +78,20 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeClient dco_decode_bridge_client(dynamic raw);
@protected
BridgeEffectOwner dco_decode_bridge_effect_owner(dynamic raw);
@protected
BridgeError dco_decode_bridge_error(dynamic raw);
@protected
BridgeEvent dco_decode_bridge_event(dynamic raw);
@protected
BridgeIosVoiceProcessingMode dco_decode_bridge_ios_voice_processing_mode(
dynamic raw,
);
@protected
BridgeNetworkState dco_decode_bridge_network_state(dynamic raw);
@@ -76,6 +104,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeTransmitMode dco_decode_bridge_transmit_mode(dynamic raw);
@protected
BridgeVadBackend dco_decode_bridge_vad_backend(dynamic raw);
@protected
BridgeVoiceJoinErrorCode dco_decode_bridge_voice_join_error_code(dynamic raw);
@@ -145,6 +176,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
BridgeAudioProcessingConfig
sse_decode_box_autoadd_bridge_audio_processing_config(
SseDeserializer deserializer,
);
@protected
BridgeBookmark sse_decode_box_autoadd_bridge_bookmark(
SseDeserializer deserializer,
@@ -158,6 +195,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BigInt sse_decode_box_autoadd_u_64(SseDeserializer deserializer);
@protected
BridgeAudioBackend sse_decode_bridge_audio_backend(
SseDeserializer deserializer,
);
@protected
BridgeAudioProcessingConfig sse_decode_bridge_audio_processing_config(
SseDeserializer deserializer,
);
@protected
BridgeAudioProcessingStats sse_decode_bridge_audio_processing_stats(
SseDeserializer deserializer,
);
@protected
BridgeAudioRoute sse_decode_bridge_audio_route(SseDeserializer deserializer);
@protected
BridgeAudioStats sse_decode_bridge_audio_stats(SseDeserializer deserializer);
@@ -170,12 +225,22 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
BridgeClient sse_decode_bridge_client(SseDeserializer deserializer);
@protected
BridgeEffectOwner sse_decode_bridge_effect_owner(
SseDeserializer deserializer,
);
@protected
BridgeError sse_decode_bridge_error(SseDeserializer deserializer);
@protected
BridgeEvent sse_decode_bridge_event(SseDeserializer deserializer);
@protected
BridgeIosVoiceProcessingMode sse_decode_bridge_ios_voice_processing_mode(
SseDeserializer deserializer,
);
@protected
BridgeNetworkState sse_decode_bridge_network_state(
SseDeserializer deserializer,
@@ -194,6 +259,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseDeserializer deserializer,
);
@protected
BridgeVadBackend sse_decode_bridge_vad_backend(SseDeserializer deserializer);
@protected
BridgeVoiceJoinErrorCode sse_decode_bridge_voice_join_error_code(
SseDeserializer deserializer,
@@ -285,6 +353,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
);
@protected
void sse_encode_box_autoadd_bridge_bookmark(
BridgeBookmark self,
@@ -300,6 +374,30 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_box_autoadd_u_64(BigInt self, SseSerializer serializer);
@protected
void sse_encode_bridge_audio_backend(
BridgeAudioBackend self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_processing_config(
BridgeAudioProcessingConfig self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_processing_stats(
BridgeAudioProcessingStats self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_route(
BridgeAudioRoute self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_audio_stats(
BridgeAudioStats self,
@@ -318,12 +416,24 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_bridge_client(BridgeClient self, SseSerializer serializer);
@protected
void sse_encode_bridge_effect_owner(
BridgeEffectOwner self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_error(BridgeError self, SseSerializer serializer);
@protected
void sse_encode_bridge_event(BridgeEvent self, SseSerializer serializer);
@protected
void sse_encode_bridge_ios_voice_processing_mode(
BridgeIosVoiceProcessingMode self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_network_state(
BridgeNetworkState self,
@@ -348,6 +458,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
SseSerializer serializer,
);
@protected
void sse_encode_bridge_vad_backend(
BridgeVadBackend self,
SseSerializer serializer,
);
@protected
void sse_encode_bridge_voice_join_error_code(
BridgeVoiceJoinErrorCode self,