Skip to content

Commit 0af91fe

Browse files
author
Xia Ning
committed
Merge branch 'dev/3.3.1' of https://github.i.agoralab.co/AgoraIO/API-Examples into dev/3.3.1
2 parents 185a6e8 + 9f943f1 commit 0af91fe

9 files changed

Lines changed: 667 additions & 344 deletions

File tree

Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/VoiceEffects.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class VoiceEffects extends BaseFragment implements View.OnClickListener,
5050
private RtcEngine engine;
5151
private int myUid;
5252
private boolean joined = false;
53-
private Spinner preset, beautifier, pitch1, pitch2;
53+
private Spinner preset, beautifier, pitch1, pitch2, conversion;
5454
private PopupWindow popupWindow;
5555
private Switch effectOption;
5656
private SeekBar voiceCircle;
@@ -79,8 +79,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
7979
view.findViewById(R.id.btn_join).setOnClickListener(this);
8080
preset = view.findViewById(R.id.audio_preset_spinner);
8181
beautifier = view.findViewById(R.id.voice_beautifier_spinner);
82+
conversion = view.findViewById(R.id.voice_conversion_spinner);
8283
preset.setOnItemSelectedListener(this);
8384
beautifier.setOnItemSelectedListener(this);
85+
conversion.setOnItemSelectedListener(this);
8486
effectOptions = view.findViewById(R.id.btn_effect_options);
8587
effectOptions.setOnClickListener(this);
8688
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -99,6 +101,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
99101
effectOptions.setEnabled(false);
100102
preset.setEnabled(false);
101103
beautifier.setEnabled(false);
104+
conversion.setEnabled(false);
102105
}
103106

104107
@Override
@@ -173,6 +176,7 @@ public void onClick(View v)
173176
joined = false;
174177
preset.setEnabled(false);
175178
beautifier.setEnabled(false);
179+
conversion.setEnabled(false);
176180
effectOptions.setEnabled(false);
177181
/**After joining a channel, the user must call the leaveChannel method to end the
178182
* call before joining another channel. This method returns 0 if the user leaves the
@@ -349,6 +353,7 @@ public void onJoinChannelSuccess(String channel, int uid, int elapsed)
349353
handler.post(() -> {
350354
join.setEnabled(true);
351355
join.setText(getString(R.string.leave));
356+
conversion.setEnabled(true);
352357
preset.setEnabled(true);
353358
beautifier.setEnabled(true);
354359
effectOptions.setEnabled(true);
@@ -434,6 +439,26 @@ else if(parent.getId() == R.id.voice_beautifier_spinner){
434439
String item = beautifier.getSelectedItem().toString();
435440
engine.setVoiceBeautifierPreset(getVoiceBeautifierValue(item));
436441
}
442+
else if(parent.getId() == R.id.voice_conversion_spinner){
443+
String item = conversion.getSelectedItem().toString();
444+
engine.setVoiceConversionPreset(getVoiceConversionValue(item));
445+
}
446+
}
447+
448+
private int getVoiceConversionValue(String label) {
449+
switch (label) {
450+
case "VOICE_CHANGER_NEUTRAL":
451+
return VOICE_CHANGER_NEUTRAL;
452+
case "VOICE_CHANGER_SWEET":
453+
return VOICE_CHANGER_SWEET;
454+
case "VOICE_CHANGER_SOLID":
455+
return VOICE_CHANGER_SOLID;
456+
case "VOICE_CHANGER_BASS":
457+
return VOICE_CHANGER_BASS;
458+
case "VOICE_CONVERSION_OFF":
459+
default:
460+
return VOICE_CONVERSION_OFF;
461+
}
437462
}
438463

439464
private int getVoiceBeautifierValue(String label) {

Android/APIExample/app/src/main/res/layout/fragment_voice_effects.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
android:layout_height="match_parent"
66
tools:context=".examples.advanced.VoiceEffects">
77

8+
<Spinner
9+
android:id="@+id/voice_conversion_spinner"
10+
android:layout_width="match_parent"
11+
android:layout_height="48dp"
12+
android:layout_above="@id/audio_preset_spinner"
13+
android:layout_marginBottom="16dp"
14+
android:entries="@array/voiceConversion"
15+
android:hint="Select an Voice Conversion Preset"
16+
android:spinnerMode="dropdown" />
17+
818
<Spinner
919
android:id="@+id/audio_preset_spinner"
1020
android:layout_width="match_parent"

Android/APIExample/app/src/main/res/values/arrays.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@
2525
<item>JP</item>
2626
<item>IN</item>
2727
</string-array>
28+
<string-array name="voiceConversion">
29+
<item>VOICE_CONVERSION_OFF</item>
30+
<item>VOICE_CHANGER_NEUTRAL</item>
31+
<item>VOICE_CHANGER_SWEET</item>
32+
<item>VOICE_CHANGER_SOLID</item>
33+
<item>VOICE_CHANGER_BASS</item>
34+
</string-array>
2835
<string-array name="audioPreset">
2936
<item>ROOM_ACOUSTICS_KTV</item>
3037
<item>ROOM_ACOUSTICS_VOCAL_CONCERT</item>

iOS/APIExample.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 51;
6+
objectVersion = 52;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -204,7 +204,6 @@
204204
033A9F62252D8B0A00BC26E1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/VideoMetadata.storyboard; sourceTree = "<group>"; };
205205
033A9F65252D8B0E00BC26E1 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/VideoMetadata.strings"; sourceTree = "<group>"; };
206206
033A9F67252D8B2A00BC26E1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/VoiceChanger.storyboard; sourceTree = "<group>"; };
207-
033A9F6A252D8B2F00BC26E1 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/VoiceChanger.strings"; sourceTree = "<group>"; };
208207
033A9F6C252D8B3500BC26E1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MediaChannelRelay.storyboard; sourceTree = "<group>"; };
209208
033A9F6F252D8B3900BC26E1 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MediaChannelRelay.strings"; sourceTree = "<group>"; };
210209
033A9F71252D8B3E00BC26E1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/SuperResolution.storyboard; sourceTree = "<group>"; };
@@ -294,6 +293,7 @@
294293
5708D0B6259C905D00BE0C41 /* Agorafdkaac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Agorafdkaac.framework; path = APIExample/Agorafdkaac.framework; sourceTree = "<group>"; };
295294
5708D0B7259C905D00BE0C41 /* AgoraRtcKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AgoraRtcKit.framework; path = APIExample/AgoraRtcKit.framework; sourceTree = "<group>"; };
296295
5708D0B8259C905D00BE0C41 /* AgoraAIDenoise.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AgoraAIDenoise.framework; path = APIExample/AgoraAIDenoise.framework; sourceTree = "<group>"; };
296+
576AC75225E4EB8000109189 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/VoiceChanger.strings"; sourceTree = "<group>"; };
297297
576BB8EF259B00E100323D43 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/CreateDataStream.storyboard; sourceTree = "<group>"; };
298298
576BB8F3259B00E300323D43 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/CreateDataStream.strings"; sourceTree = "<group>"; };
299299
576EA57925ADC4A1000B3D79 /* VideoChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoChat.swift; sourceTree = "<group>"; };
@@ -1260,7 +1260,7 @@
12601260
isa = PBXVariantGroup;
12611261
children = (
12621262
033A9F67252D8B2A00BC26E1 /* Base */,
1263-
033A9F6A252D8B2F00BC26E1 /* zh-Hans */,
1263+
576AC75225E4EB8000109189 /* zh-Hans */,
12641264
);
12651265
name = VoiceChanger.storyboard;
12661266
sourceTree = "<group>";

iOS/APIExample/Common/AgoraExtension.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,25 @@ extension AgoraAudioReverbType {
263263
}
264264
}
265265

266+
extension AgoraVoiceConversionPreset {
267+
func description() -> String {
268+
switch self {
269+
case .conversionOff:
270+
return "Off".localized
271+
case .changerNeutral:
272+
return "Neutral".localized
273+
case .changerSweet:
274+
return "Sweet".localized
275+
case .changerSolid:
276+
return "Solid".localized
277+
case .changerBass:
278+
return "Bass".localized
279+
@unknown default:
280+
return "\(self.rawValue)"
281+
}
282+
}
283+
}
284+
266285
extension UIAlertController {
267286
func addCancelAction() {
268287
self.addAction(UIAlertAction(title: "Cancel".localized, style: .cancel, handler: nil))

0 commit comments

Comments
 (0)