feat: audio engine selector

This commit is contained in:
TrueZhuanjia
2025-10-28 23:33:42 +08:00
parent e050c914bb
commit 071e2a764a
13 changed files with 237 additions and 17 deletions
+29 -3
View File
@@ -1360,16 +1360,16 @@
</constraints>
</stackView>
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Oyk-L5-WTt" userLabel="singleTapSensitivityStack">
<rect key="frame" x="440" y="307" width="572" height="55.5"/>
<rect key="frame" x="440" y="307" width="600" height="55.5"/>
<subviews>
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Single Tap Sensitivity" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SuN-S2-8hj">
<rect key="frame" x="0.0" y="0.0" width="572" height="20.5"/>
<rect key="frame" x="0.0" y="0.0" width="600" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<slider verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="2" minValue="0.0" maxValue="5" minimumValueImage="0.square" catalog="system" maximumValueImage="5.square" translatesAutoresizingMaskIntoConstraints="NO" id="j4n-De-TRX" userLabel="Single Tap Sensitivity Slider">
<rect key="frame" x="-2" y="25.5" width="576" height="31"/>
<rect key="frame" x="-2" y="25.5" width="604" height="31"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="qOF-42-hPO"/>
</constraints>
@@ -1450,6 +1450,30 @@
<constraint firstAttribute="height" constant="56.5" id="lWx-Il-ra7"/>
</constraints>
</stackView>
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="scn-bo-PfV">
<rect key="frame" x="432" y="1987" width="380" height="56.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Audio Engine" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fY9-M2-tiS">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<segmentedControl verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="85A-d5-pLE">
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
<segments>
<segment title="System"/>
<segment title="SDL"/>
</segments>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="selectedSegmentTintColor" systemColor="linkColor"/>
</segmentedControl>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="56.5" id="3Xh-yf-5ix"/>
<constraint firstAttribute="width" constant="380" id="Pmq-z6-IVL"/>
</constraints>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
@@ -1459,6 +1483,8 @@
<outlet property="appThemeStack" destination="Wf6-BA-Mdv" id="hlq-bB-S8N"/>
<outlet property="audioConfigSelector" destination="iZL-dA-jk9" id="Yja-os-o6g"/>
<outlet property="audioConfigStack" destination="qnG-5F-2YY" id="kFX-VK-vuK"/>
<outlet property="audioEngineSelector" destination="85A-d5-pLE" id="Ads-EZ-Bpm"/>
<outlet property="audioEngineStack" destination="scn-bo-PfV" id="tP0-YG-e8V"/>
<outlet property="audioOnPcStack" destination="Bbr-Wj-Z75" id="c2K-3R-whg"/>
<outlet property="audioOnPcSwitch" destination="81a-Jw-eV9" id="Oig-tg-V1I"/>
<outlet property="backgroundSessionTimerSlider" destination="lRU-fd-AsU" id="oRL-1o-xNh"/>
+29 -3
View File
@@ -2214,16 +2214,16 @@
</constraints>
</stackView>
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="N0i-z6-WgC" userLabel="singleTapSensitivityStack">
<rect key="frame" x="437" y="2383" width="384" height="55.5"/>
<rect key="frame" x="437" y="2383" width="396" height="55.5"/>
<subviews>
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Single Tap Sensitivity" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WzD-wo-Wum">
<rect key="frame" x="0.0" y="0.0" width="384" height="20.5"/>
<rect key="frame" x="0.0" y="0.0" width="396" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<slider verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="2" minValue="0.0" maxValue="5" minimumValueImage="0.square" catalog="system" maximumValueImage="5.square" translatesAutoresizingMaskIntoConstraints="NO" id="uCa-Oa-7mv" userLabel="Single Tap Sensitivity Slider">
<rect key="frame" x="-2" y="25.5" width="388" height="31"/>
<rect key="frame" x="-2" y="25.5" width="400" height="31"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="XXP-GP-uhn"/>
</constraints>
@@ -2233,6 +2233,30 @@
<constraint firstAttribute="height" constant="55.5" id="sb3-hm-dEr"/>
</constraints>
</stackView>
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="VJh-WW-vnt">
<rect key="frame" x="437" y="1011" width="380" height="56.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Audio Engine" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dO2-cf-Ovg">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<segmentedControl verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="pVq-EW-Dta">
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
<segments>
<segment title="System"/>
<segment title="SDL"/>
</segments>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="selectedSegmentTintColor" systemColor="linkColor"/>
</segmentedControl>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="56.5" id="P0Y-rF-V3i"/>
<constraint firstAttribute="width" constant="380" id="omg-6c-jr3"/>
</constraints>
</stackView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
@@ -2242,6 +2266,8 @@
<outlet property="appThemeStack" destination="Wpg-TL-KJy" id="Vhd-oB-Sy3"/>
<outlet property="audioConfigSelector" destination="hfR-K8-Ti4" id="4La-bI-jLq"/>
<outlet property="audioConfigStack" destination="Rld-CY-qzs" id="dmf-m8-sor"/>
<outlet property="audioEngineSelector" destination="pVq-EW-Dta" id="fcu-q8-UNI"/>
<outlet property="audioEngineStack" destination="VJh-WW-vnt" id="3Ui-os-Oea"/>
<outlet property="audioOnPcStack" destination="aud-Zf-37T" id="58Y-ri-ILs"/>
<outlet property="audioOnPcSwitch" destination="4Ne-Pn-gnL" id="gae-We-5ih"/>
<outlet property="backgroundSessionTimerSlider" destination="0bT-5d-w7S" id="soA-ry-tzx"/>
+6
View File
@@ -21,6 +21,11 @@ typedef NS_ENUM(NSUInteger, UINavigationBarHeight) {
UINavigationBarHeightIPhone = 44
};
typedef NS_ENUM(NSInteger, AudioEngine) {
SystemAudioEngine,
SDLAudioEngine
};
typedef NS_ENUM(NSInteger, TouchMode) {
RelativeTouch,
NativeTouch,
@@ -120,6 +125,7 @@ typedef NS_ENUM(NSInteger, WidgetSizeTransition) {
singleTapSensitivy:(CGFloat)singleTapSensitivy
hapticEngine:(NSInteger)hapticEngine
edgeSlidingSensitivity:(CGFloat)edgeSlidingSensitivity
audioEngine:(NSInteger)audioEngine
backgroundSessionTimer:(NSInteger)backgroundSessionTimer;
- (NSArray*) getHosts;
+2
View File
@@ -108,6 +108,7 @@
singleTapSensitivy:(CGFloat)singleTapSensitivy
hapticEngine:(NSInteger)hapticEngine
edgeSlidingSensitivity:(CGFloat)edgeSlidingSensitivity
audioEngine:(NSInteger)audioEngine
backgroundSessionTimer:(NSInteger)backgroundSessionTimer{
[_managedObjectContext performBlockAndWait:^{
@@ -166,6 +167,7 @@
settingsToSave.singleTapSensitivity = [NSNumber numberWithDouble:singleTapSensitivy];
settingsToSave.hapticEngine = [NSNumber numberWithInteger:hapticEngine];
settingsToSave.edgeSlidingSensitivity = [NSNumber numberWithFloat:edgeSlidingSensitivity];
settingsToSave.audioEngine = [NSNumber numberWithInteger:audioEngine];
settingsToSave.rememberFoldState = rememberFoldState;
[self saveData];
}];
+1
View File
@@ -82,6 +82,7 @@
@property (nonatomic, retain) NSNumber * hapticEngine;
@property (nonatomic, retain) NSNumber * appTheme;
@property (nonatomic, retain) NSNumber * edgeSlidingSensitivity;
@property (nonatomic, retain) NSNumber * audioEngine;
@property (nonatomic, retain) NSNumber * framePacingMode;
- (id) initFromSettings:(Settings*)settings;
+2 -1
View File
@@ -138,8 +138,9 @@
self.edgeSlidingSensitivity = settings.edgeSlidingSensitivity;
self.appTheme = settings.appTheme;
self.hapticEngine = settings.hapticEngine;
#endif
self.uniqueId = settings.uniqueId;
self.audioEngine = settings.audioEngine;
#endif
return self;
}
@@ -24,6 +24,7 @@
<attribute name="appTheme" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="asyncNativeTouchPriority" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="audioConfig" attributeType="Integer 32" defaultValueString="2" usesScalarValueType="NO" syncable="YES"/>
<attribute name="audioEngine" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="backroundSessionTimer" optional="YES" attributeType="Integer 32" defaultValueString="32767" usesScalarValueType="NO" syncable="YES"/>
<attribute name="bitrate" attributeType="Integer 32" defaultValueString="10000" usesScalarValueType="NO" syncable="YES"/>
<attribute name="btMouseSupport" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/>
+1 -4
View File
@@ -403,8 +403,7 @@ void ArDecodeAndPlaySample(char* sampleData, int sampleLength)
float* fbuf = (float*)audioBuffer;
// if(useSystemAudioEngine && false) {
if(true){
if(useSystemAudioEngine) {
// 创建 AVAudioPCMBuffer
AVAudioFrameCount frameCount = decodeLen;
AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:audioFormat frameCapacity:frameCount];
@@ -581,9 +580,7 @@ void ClSetControllerLED(uint16_t controllerNumber, uint8_t r, uint8_t g, uint8_t
_streamConfig.supportedVideoFormats = config.supportedVideoFormats;
_streamConfig.audioConfiguration = config.audioConfiguration;
_streamConfig.redirectMic = config.redirectMic && [MicHandler permissionGranted];
NSLog(@"config.localVolume %f", config.localVolume);
[Connection setVolume:config.localVolume];
// Since we require iOS 12 or above, we're guaranteed to be running
// on a 64-bit device with ARMv8 crypto instructions, so we don't
// need to check for that here.
@@ -178,6 +178,10 @@
@property (strong, nonatomic) IBOutlet UIStackView *appThemeStack;
@property (strong, nonatomic) IBOutlet UISegmentedControl *appThemeSelector;
@property (strong, nonatomic) IBOutlet UIStackView *audioEngineStack;
@property (strong, nonatomic) IBOutlet UISegmentedControl *audioEngineSelector;
@property (strong, nonatomic) IBOutlet UIStackView *testStack;
@property (nonatomic, strong) MicHandler *micHandler;
@@ -35,6 +35,7 @@
NSInteger _bitrate;
NSInteger _lastSelectedResolutionIndex;
bool settingsViewJustLoaded;
bool settingsViewJustExpanded;
uint16_t oswLayoutFingers;
CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer;
NSMutableDictionary *_settingStackDict;
@@ -399,6 +400,8 @@ BOOL isCustomResolution(int resolutionSelected) {
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:NO];
settingsViewJustExpanded = true;
/*
[self checkAndRequestMicPermission];
self.micHandler = [MicHandler new];
@@ -458,6 +461,8 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.customResolutionSwitch setOn: isCustomResolution(self->tempSettings.resolutionSelected.intValue)];
[self.resolutionSelector setEnabled:!self.customResolutionSwitch.isOn];
[self touchModeChanged:self.touchModeSelector]; // a special fix for iOS 14 to set hidden for the "enableOswStack"
settingsViewJustExpanded = false;
}
- (void)viewWillDisappear:(BOOL)animated{
@@ -785,6 +790,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self addSetting:self.redirectMicStack ofId:@"redirectMicStack" withInfoTag:YES withDynamicLabel:NO to:audioSection];
[self addSetting:self.useBuiltinMicStack ofId:@"useBuiltinMicStack" withInfoTag:YES withDynamicLabel:NO to:audioSection];
[self addSetting:self.micVolumeStack ofId:@"micVolumeStack" withInfoTag:NO withDynamicLabel:YES to:audioSection];
[self addSetting:self.audioEngineStack ofId:@"audioEngineStack" withInfoTag:YES withDynamicLabel:NO to:audioSection];
[self addSetting:self.audioConfigStack ofId:@"audioConfigStack" withInfoTag:NO withDynamicLabel:NO to:audioSection];
[audioSection addToParentStack:_parentStack];
// [audioSection setExpanded:NO];
@@ -1534,6 +1540,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.view addGestureRecognizer:self->slideToCloseSettingsViewRecognizer];
self->settingsViewJustLoaded = true;
self->settingsViewJustExpanded = true;
// Always run settings in dark mode because we want the light fonts
if (@available(iOS 13.0, tvOS 13.0, *)) {
@@ -1739,7 +1746,9 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.graphOpacityStepper setValue:(int)self->tempSettings.graphOpacity.intValue];
[self.graphOpacityStepper addTarget:self action:@selector(graphOpacityStepperTapped:) forControlEvents:UIControlEventValueChanged];
[self graphOpacityStepperTapped:self.graphOpacityStepper];
self.audioEngineSelector.selectedSegmentIndex = self->tempSettings.audioEngine.intValue;
if (@available(iOS 18.0, tvOS 18.0, *)) {}else{
[self.audioConfigSelector removeSegmentAtIndex:1 animated:false];
[self.audioConfigSelector removeSegmentAtIndex:1 animated:false]; // segment 2 goes away when you remove index 2
@@ -1865,7 +1874,7 @@ BOOL isCustomResolution(int resolutionSelected) {
self->motionControlSection.expandable = [self isCustomOswEnabled];
[self->motionControlSection setExpanded:[self isCustomOswEnabled]];
// [self->motionControlSection setExpanded:[self isCustomOswEnabled]];
__weak typeof(self) weakSelf = self;
self->motionControlSection.lockedSectionHandler = ^{
[CountdownAlertController showAlertIn:weakSelf
@@ -1958,8 +1967,7 @@ BOOL isCustomResolution(int resolutionSelected) {
- (bool)isCustomOswEnabled{
bool customOswEnabled = [self isOswEnabled] && self.onScreenWidgetSelector.selectedSegmentIndex == OnScreenControlsLevelCustom;
motionControlSection.expandable = customOswEnabled;
if(!settingsViewJustLoaded) [motionControlSection setExpanded:customOswEnabled];
NSLog(@"isCustomOswEnabled %d, %f",customOswEnabled, CACurrentMediaTime());
if(!(settingsViewJustExpanded || settingsViewJustLoaded)) [motionControlSection setExpanded:customOswEnabled];
return customOswEnabled;
}
@@ -2079,12 +2087,12 @@ BOOL isCustomResolution(int resolutionSelected) {
}
bool customOscEnabled = [self isCustomOswEnabled];
NSLog(@"customOscEnabled %d", customOscEnabled);
// NSLog(@"customOscEnabled %d", customOscEnabled);
UILabel* oswDynamicLabel = [self findDynamicLabelFromStack:self.onScreenWidgetStack];
NSString* labelText = customOscEnabled ? [LocalizationHelper localizedStringForKey:@"%d finger tap", self->oswLayoutFingers] : @"";
oswDynamicLabel.text = [NSString stringWithFormat:@" %@ ", labelText];
oswDynamicLabel.hidden = !customOscEnabled;
NSLog(@"oswDynamicLabel.hidden %d", oswDynamicLabel.hidden);
// NSLog(@"oswDynamicLabel.hidden %d", oswDynamicLabel.hidden);
[self handleOswGestureChange];
if(customOscEnabled && !settingsViewJustLoaded && !self.mainFrameViewController.settingsExpandedInStreamView) {
// [self.keyboardToggleFingerNumSlider setValue:3.0];
@@ -2851,6 +2859,7 @@ BOOL isCustomResolution(int resolutionSelected) {
CGFloat singleTapSensitivity = self.singleTapSensitivitySlider.value;
NSInteger hapticEngine = self.hapticEngineSelector.selectedSegmentIndex;
CGFloat edgeSlidingSensitivity = self.edgeSlidingSensitivitySlider.value;
NSInteger audioEngine = self.audioEngineSelector.selectedSegmentIndex;
NSInteger backgroundSessionTimer = self.backgroundSessionTimerSlider.value == self.backgroundSessionTimerSlider.maximumValue ? (uint32_t) INT16_MAX : (uint32_t)self.backgroundSessionTimerSlider.value;
[dataMan saveSettingsWithBitrate:_bitrate
@@ -2905,6 +2914,7 @@ BOOL isCustomResolution(int resolutionSelected) {
singleTapSensitivy:singleTapSensitivity
hapticEngine:hapticEngine
edgeSlidingSensitivity:edgeSlidingSensitivity
audioEngine:audioEngine
backgroundSessionTimer:backgroundSessionTimer];
}
@@ -374,6 +374,8 @@
}
else [micHandler stopTappingWithStopEngine:false];
[Connection setUseSystemAudioEngine:_settings.audioEngine.intValue == SystemAudioEngine];
if(!viewJustLoaded) [_controllerSupport updateControllerSupport:self.streamConfig delegate:self];
// reload controllerSupport obj, this is mandatory for OSC reload,especially when the stream view is launched without OSC
[_streamView setupStreamView:_controllerSupport interactionDelegate:self config:self.streamConfig streamFrameTopLayerView:self.view]; //reinitiate setupStreamView process.
+72
View File
@@ -619,6 +619,48 @@
}
}
},
"85A-d5-pLE.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; 85A-d5-pLE.segmentTitles[0] = \"System\"; ObjectID = \"85A-d5-pLE\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "System"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "系统"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "系統"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "系統"
}
}
}
},
"85A-d5-pLE.segmentTitles[1]" : {
"comment" : "Class = \"UISegmentedControl\"; 85A-d5-pLE.segmentTitles[1] = \"SDL\"; ObjectID = \"85A-d5-pLE\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "SDL"
}
}
}
},
"aa5-3y-I4d.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; aa5-3y-I4d.segmentTitles[0] = \"Off\"; ObjectID = \"aa5-3y-I4d\";",
"extractionState" : "extracted_with_value",
@@ -1987,6 +2029,36 @@
}
}
},
"fY9-M2-tiS.text" : {
"comment" : "Class = \"UILabel\"; text = \"Audio Engine\"; ObjectID = \"fY9-M2-tiS\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Audio Engine"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "音频引擎"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "音訊引擎"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "音訊引擎"
}
}
}
},
"Gmb-bu-KCv.text" : {
"comment" : "Class = \"UILabel\"; text = \"Button Visual Feedback\"; ObjectID = \"Gmb-bu-KCv\";",
"extractionState" : "extracted_with_value",
+72
View File
@@ -1657,6 +1657,36 @@
}
}
},
"dO2-cf-Ovg.text" : {
"comment" : "Class = \"UILabel\"; text = \"Audio Engine\"; ObjectID = \"dO2-cf-Ovg\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Audio Engine"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "音频引擎"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "音訊引擎"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "音訊引擎"
}
}
}
},
"dUM-r9-0Bo.text" : {
"comment" : "Class = \"UILabel\"; text = \"Emulated Controller Type\"; ObjectID = \"dUM-r9-0Bo\";",
"extractionState" : "extracted_with_value",
@@ -3325,6 +3355,48 @@
}
}
},
"pVq-EW-Dta.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; pVq-EW-Dta.segmentTitles[0] = \"System\"; ObjectID = \"pVq-EW-Dta\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "System"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "系统"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "系統"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "系統"
}
}
}
},
"pVq-EW-Dta.segmentTitles[1]" : {
"comment" : "Class = \"UISegmentedControl\"; pVq-EW-Dta.segmentTitles[1] = \"SDL\"; ObjectID = \"pVq-EW-Dta\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "SDL"
}
}
}
},
"q6v-Jb-ysy.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; q6v-Jb-ysy.segmentTitles[0] = \"Xbox 360\"; ObjectID = \"q6v-Jb-ysy\";",
"extractionState" : "extracted_with_value",