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
+16
View File
@@ -17,6 +17,11 @@
"disconnectAction": "Disconnect",
"refreshAction": "Refresh",
"diagnosticsAction": "Diagnostics",
"diagnosticsSaveAction": "Save export",
"diagnosticsSaved": "Diagnostic export saved to {path}",
"@diagnosticsSaved": {
"placeholders": { "path": { "type": "String" } }
},
"aboutAction": "About",
"aboutVersion": "Version {version}",
"@aboutVersion": {
@@ -161,5 +166,16 @@
"networkPermissionOpenSettings": "Open System Settings",
"microphonePermissionTitle": "Microphone Permission Required",
"microphonePermissionBody": "Chanora needs permission to access the microphone. On macOS, go to System Settings → Privacy & Security → Microphone and enable Chanora.",
"microphonePermissionRequiredForVoice": "Microphone permission is required for voice transmission.",
"permissionGrantAction": "Grant",
"audioRouteSystemDefault": "System default",
"audioRouteEarpiece": "Earpiece",
"audioRouteUsbHeadset": "USB headset",
"audioRouteOtherDevice": "Other device",
"audioRouteRefreshDevices": "Refresh audio devices",
"audioRouteCannotSelect": "This output cannot be selected.",
"audioRouteChangeFailed": "Could not change audio output.",
"iosAudioInterrupted": "Audio interrupted by system (phone call)",
"iosAudioResuming": "Audio resuming",
"permissionDenied": "Permission Denied"
}
+13
View File
@@ -16,6 +16,8 @@
"disconnectAction": "断开连接",
"refreshAction": "刷新",
"diagnosticsAction": "诊断信息",
"diagnosticsSaveAction": "保存导出",
"diagnosticsSaved": "诊断导出已保存到 {path}",
"aboutAction": "关于",
"aboutVersion": "版本 {version}",
"aboutAuthor": "作者: Edison Jwa",
@@ -118,5 +120,16 @@
"networkPermissionOpenSettings": "打开系统设置",
"microphonePermissionTitle": "需要麦克风权限",
"microphonePermissionBody": "Chanora 需要麦克风访问权限。请前往系统设置 → 隐私与安全性 → 麦克风,启用 Chanora。",
"microphonePermissionRequiredForVoice": "语音发送需要麦克风权限。",
"permissionGrantAction": "授权",
"audioRouteSystemDefault": "系统默认",
"audioRouteEarpiece": "听筒",
"audioRouteUsbHeadset": "USB 耳机",
"audioRouteOtherDevice": "其他设备",
"audioRouteRefreshDevices": "刷新音频设备",
"audioRouteCannotSelect": "无法选择此输出设备。",
"audioRouteChangeFailed": "无法切换音频输出。",
"iosAudioInterrupted": "系统已中断音频(电话通话)",
"iosAudioResuming": "音频正在恢复",
"permissionDenied": "权限被拒绝"
}
@@ -169,6 +169,18 @@ abstract class AppL10n {
/// **'Diagnostics'**
String get diagnosticsAction;
/// No description provided for @diagnosticsSaveAction.
///
/// In en, this message translates to:
/// **'Save export'**
String get diagnosticsSaveAction;
/// No description provided for @diagnosticsSaved.
///
/// In en, this message translates to:
/// **'Diagnostic export saved to {path}'**
String diagnosticsSaved(String path);
/// No description provided for @aboutAction.
///
/// In en, this message translates to:
@@ -721,6 +733,72 @@ abstract class AppL10n {
/// **'Chanora needs permission to access the microphone. On macOS, go to System Settings → Privacy & Security → Microphone and enable Chanora.'**
String get microphonePermissionBody;
/// No description provided for @microphonePermissionRequiredForVoice.
///
/// In en, this message translates to:
/// **'Microphone permission is required for voice transmission.'**
String get microphonePermissionRequiredForVoice;
/// No description provided for @permissionGrantAction.
///
/// In en, this message translates to:
/// **'Grant'**
String get permissionGrantAction;
/// No description provided for @audioRouteSystemDefault.
///
/// In en, this message translates to:
/// **'System default'**
String get audioRouteSystemDefault;
/// No description provided for @audioRouteEarpiece.
///
/// In en, this message translates to:
/// **'Earpiece'**
String get audioRouteEarpiece;
/// No description provided for @audioRouteUsbHeadset.
///
/// In en, this message translates to:
/// **'USB headset'**
String get audioRouteUsbHeadset;
/// No description provided for @audioRouteOtherDevice.
///
/// In en, this message translates to:
/// **'Other device'**
String get audioRouteOtherDevice;
/// No description provided for @audioRouteRefreshDevices.
///
/// In en, this message translates to:
/// **'Refresh audio devices'**
String get audioRouteRefreshDevices;
/// No description provided for @audioRouteCannotSelect.
///
/// In en, this message translates to:
/// **'This output cannot be selected.'**
String get audioRouteCannotSelect;
/// No description provided for @audioRouteChangeFailed.
///
/// In en, this message translates to:
/// **'Could not change audio output.'**
String get audioRouteChangeFailed;
/// No description provided for @iosAudioInterrupted.
///
/// In en, this message translates to:
/// **'Audio interrupted by system (phone call)'**
String get iosAudioInterrupted;
/// No description provided for @iosAudioResuming.
///
/// In en, this message translates to:
/// **'Audio resuming'**
String get iosAudioResuming;
/// No description provided for @permissionDenied.
///
/// In en, this message translates to:
@@ -46,6 +46,14 @@ class AppL10nEn extends AppL10n {
@override
String get diagnosticsAction => 'Diagnostics';
@override
String get diagnosticsSaveAction => 'Save export';
@override
String diagnosticsSaved(String path) {
return 'Diagnostic export saved to $path';
}
@override
String get aboutAction => 'About';
@@ -360,6 +368,40 @@ class AppL10nEn extends AppL10n {
String get microphonePermissionBody =>
'Chanora needs permission to access the microphone. On macOS, go to System Settings → Privacy & Security → Microphone and enable Chanora.';
@override
String get microphonePermissionRequiredForVoice =>
'Microphone permission is required for voice transmission.';
@override
String get permissionGrantAction => 'Grant';
@override
String get audioRouteSystemDefault => 'System default';
@override
String get audioRouteEarpiece => 'Earpiece';
@override
String get audioRouteUsbHeadset => 'USB headset';
@override
String get audioRouteOtherDevice => 'Other device';
@override
String get audioRouteRefreshDevices => 'Refresh audio devices';
@override
String get audioRouteCannotSelect => 'This output cannot be selected.';
@override
String get audioRouteChangeFailed => 'Could not change audio output.';
@override
String get iosAudioInterrupted => 'Audio interrupted by system (phone call)';
@override
String get iosAudioResuming => 'Audio resuming';
@override
String get permissionDenied => 'Permission Denied';
}
@@ -44,6 +44,14 @@ class AppL10nZh extends AppL10n {
@override
String get diagnosticsAction => '诊断信息';
@override
String get diagnosticsSaveAction => '保存导出';
@override
String diagnosticsSaved(String path) {
return '诊断导出已保存到 $path';
}
@override
String get aboutAction => '关于';
@@ -352,6 +360,39 @@ class AppL10nZh extends AppL10n {
String get microphonePermissionBody =>
'Chanora 需要麦克风访问权限。请前往系统设置 → 隐私与安全性 → 麦克风,启用 Chanora。';
@override
String get microphonePermissionRequiredForVoice => '语音发送需要麦克风权限。';
@override
String get permissionGrantAction => '授权';
@override
String get audioRouteSystemDefault => '系统默认';
@override
String get audioRouteEarpiece => '听筒';
@override
String get audioRouteUsbHeadset => 'USB 耳机';
@override
String get audioRouteOtherDevice => '其他设备';
@override
String get audioRouteRefreshDevices => '刷新音频设备';
@override
String get audioRouteCannotSelect => '无法选择此输出设备。';
@override
String get audioRouteChangeFailed => '无法切换音频输出。';
@override
String get iosAudioInterrupted => '系统已中断音频(电话通话)';
@override
String get iosAudioResuming => '音频正在恢复';
@override
String get permissionDenied => '权限被拒绝';
}