本トピックでは、ARTC SDK における共通の音声操作および構成について説明します。
概要
ARTC SDK は、音声の構成および制御に使用できる複数の機能を提供します。音声エンコーディングモードおよび音声シナリオモードの設定、ローカル音声のキャプチャおよび再生の管理、リモート音声の再生制御、インイヤーモニタリングの利用、および音声ルーティングの構成が可能です。
サンプルコード
Android: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/AudioBasicUsage/AudioBasicUsageActivity.java.
iOS: iOS/ARTCExample/BasicUsage/AudioBasicUsage/AudioBasicUsageVC.swift.
Harmony: Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/AudioBasicUsage.ets.
前提条件
有効な Alibaba Cloud アカウント (root ユーザー) を保有し、ApsaraVideo for RTC アプリケーションを作成済みである必要があります。詳細については、「アプリケーションの作成」をご参照ください。ApsaraVideo Live コンソール (ApsaraVideo Live コンソール) から AppID および AppKey を取得してください。
ARTC SDK をプロジェクトに統合し、基本的なリアルタイム音声および動画機能を実装済みである必要があります。SDK の統合方法については、「SDK のダウンロードおよび統合」をご参照ください。音声および動画通話の実装については、「音声および動画通話の実装」をご参照ください。
実装手順
1. チャンネル参加前の音声エンコーディングおよびシナリオモードの設定
ARTC SDK では、setAudioProfile メソッドを使用して、音声エンコーディングモードおよび音声シナリオモードを設定できます。このメソッドを使用して、異なるビジネスシナリオに応じて音声品質を最適化します。
setAudioProfileは、チャンネル参加前のみ呼び出すことができます。参加後は設定を変更できません。ARTC SDK では、高品質音声エンコーディングモード
AliRtcEngineHighQualityModeおよび音楽シナリオモードAliRtcSceneMusicModeの使用を推奨します。
1.1. 音声エンコーディングモード (AliRtcAudioProfile)
高品質モード (
AliRtcEngineHighQualityMode) を使用します。Web クライアントとの相互運用性を確保するには、48 kHz のサンプルレートを持つモードを選択します。
ステレオ音声の場合は、モードを
AliRtcEngineStereoHighQualityModeに設定します。
列挙型 | 説明 | サンプルレート | チャネル | 最大ビットレート |
AliRtcEngineLowQualityMode | 低品質音声モード | 8000 Hz | モノラル | 12 kbps |
AliRtcEngineBasicQualityMode | 標準品質音声モード | 16000 Hz | モノラル | 24 kbps |
AliRtcEngineHighQualityMode | 高品質音声モード | 48000 Hz | モノラル | 64 kbps |
AliRtcEngineStereoHighQualityMode | ステレオ高品質音声モード | 48000 Hz | ステレオ | 80 kbps |
AliRtcEngineSuperHighQualityMode | 超高品質音声モード | 48000 Hz | モノラル | 96 kbps |
AliRtcEngineStereoSuperHighQualityMode | ステレオ超高品質音声モード | 48000 Hz | ステレオ | 128 kbps |
1.2. 音声シナリオモード (AliRtcAudioScenario)
列挙型 | 説明 |
AliRtcSceneDefaultMode | デフォルトモード。ハードウェアベースの 3A 処理を使用し、Bluetooth デバイスからの音声キャプチャをサポートします。Bluetooth ヘッドセットからの音声キャプチャに使用します。 |
AliRtcSceneMusicMode | (推奨) 音楽シナリオ。ソフトウェアベースの 3A 処理を使用し、デバイスの内蔵マイクからの音声キャプチャにより、より高い音声忠実度を実現します。 |
1.3. サンプルコード
以下の例では、一般的なユースケースにおける音声エンコーディングおよびシナリオモードの構成方法を示します。
Bluetooth キャプチャの場合
Android
// 音声シナリオを AliRtcSceneDefaultMode に設定します。
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneDefaultMode);iOS
// 音声シナリオを AliRtcSceneDefaultMode に設定します。
engine.setAudioProfile(AliRtcAudioProfile.engineHighQualityMode, audio_scene: AliRtcAudioScenario.sceneDefaultMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcHighQualityMode, AliRtcAudioScenario.AliRtcSceneDefaultMode);Mac
[self.engine setAudioProfile:AliRtcEngineHighQualityMode audio_scene:AliRtcSceneDefaultMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineHighQualityMode, AliEngineSceneDefaultMode);Web クライアントとの相互運用性を確保する場合
Android
// 48 kHz のサンプルレートを持つエンコーディングモード (例: AliRtcEngineHighQualityMode) を選択します。
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneMusicMode);iOS
// 48 kHz のサンプルレートを持つエンコーディングモード (例: AliRtcEngineHighQualityMode) を選択します。
engine.setAudioProfile(AliRtcAudioProfile.engineHighQualityMode, audio_scene: AliRtcAudioScenario.sceneMusicMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcHighQualityMode, AliRtcAudioScenario.AliRtcSceneMusicMode);Mac
[self.engine setAudioProfile:AliRtcEngineHighQualityMode audio_scene:AliRtcSceneMusicMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineHighQualityMode, AliEngineSceneMusicMode);ステレオ音声の場合
Android
// ステレオ対応のモード (例: AliRtcEngineStereoHighQualityMode) を設定します。
mAliRtcEngine.setAudioProfile(AliRtcEngineStereoHighQualityMode, AliRtcSceneMusicMode);iOS
// ステレオ対応のモード (例: AliRtcEngineStereoHighQualityMode) を設定します。
engine.setAudioProfile(AliRtcAudioProfile.engineStereoHighQualityMode, audio_scene: AliRtcAudioScenario.sceneMusicMode)Harmony
this.rtcEngine.setAudioProfile(AliRtcAudioProfile.AliRtcStereoHighQualityMode, AliRtcAudioScenario.AliRtcSceneMusicMode);Mac
[self.engine setAudioProfile:AliRtcEngineStereoHighQualityMode audio_scene:AliRtcSceneMusicMode];Windows
mAliRtcEngine->SetAudioProfile(AliEngineStereoHighQualityMode, AliEngineSceneMusicMode);2. ローカル音声のキャプチャ
本セクションでは、マイクのミュートやマイクキャプチャの停止など、ローカル音声のキャプチャを制御する方法について説明します。以下の表に、これらの操作で使用される主なメソッドを比較します。
メソッド |
|
|
動作 | 無音フレームを送信します。 | マイクキャプチャを停止または開始します。 |
呼び出しタイミング | チャンネル参加前および参加後、いずれでも呼び出せます。 | チャンネル参加後に呼び出す必要があります。 |
マイクリソースの解放 | いいえ | はい |
2.1. ローカルマイクのミュート
muteLocalMic メソッドを使用して、ローカルマイクおよび外部音声入力をミュートできます。このメソッドは、チャンネル参加前および参加後、いずれでも呼び出してミュート状態を設定できます。
stopAudioCapture とは異なり、muteLocalMic メソッドはマイクリソースを解放しません。キャプチャおよびエンコーディングモジュールは引き続き動作しますが、極めて低いビットレートで無音フレームを送信します。
以下の AliRtcMuteLocalAudioMode モードがサポートされています。
| デフォルトモード。 |
| すべての音声をミュートします。マイクおよび外部 PCM 入力の両方から配信される音声を停止します。 |
| マイクのみをミュートします。マイクによってキャプチャされた音声の配信を停止します。 |
サンプルコード:
Android
// すべての音声をミュート
mAliRtcEngine.muteLocalMic(true, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteAllAudioMode);
// すべての音声をアンミュート
mAliRtcEngine.muteLocalMic(false, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteAllAudioMode);
// マイクのみをミュート
mAliRtcEngine.muteLocalMic(true, AliRtcEngine.AliRtcMuteLocalAudioMode.AliRtcMuteOnlyMicAudioMode);iOS
// すべての音声をミュート
self.rtcEngine?.muteLocalMic(true, mode: .allAudioMode)
// すべての音声をアンミュート
self.rtcEngine?.muteLocalMic(false, mode: .allAudioMode)
// マイクのみをミュート
self.rtcEngine?.muteLocalMic(true, mode: .onlyMicAudioMode)Harmony
// すべての音声をミュート
this.rtcEngine.muteLocalMic(true, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteAll);
// すべての音声をアンミュート
this.rtcEngine.muteLocalMic(false, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteAll);
// マイクのみをミュート
this.rtcEngine.muteLocalMic(true, AliRtcMuteLocalAudioMode.AliRtcMuteLocalAudioModeMuteOnlyMic);Mac
// すべての音声をミュート
[self.engine muteLocalMic:TRUE mode:AliRtcMuteAllAudioMode];
// すべての音声をアンミュート
[self.engine muteLocalMic:FALSE mode:AliRtcMuteAllAudioMode];
// マイクのみをミュート
[self.engine muteLocalMic:TRUE mode:AliRtcMuteOnlyMicAudioMode];Windows
// すべての音声をミュート
mAliRtcEngine->MuteLocalMic(true, AliEngineMuteLocalAudioModeMuteAll);
// すべての音声をアンミュート
mAliRtcEngine->MuteLocalMic(false, AliEngineMuteLocalAudioModeMuteAll);
// マイクのみをミュート
mAliRtcEngine->MuteLocalMic(true, AliEngineMuteLocalAudioModeMuteOnlyMic);2.2. マイクキャプチャの停止または再開
SDK は、チャンネル参加時にデフォルトでマイクキャプチャを有効にします。マイクキャプチャを停止するには、stopAudioCapture を呼び出します。この呼び出しにより、音声キャプチャが停止され、マイクリソースが解放されます。マイクキャプチャを再開するには、startAudioCapture を呼び出します。
Android
// マイクキャプチャを停止します。
mAliRtcEngine.stopAudioCapture();
// マイクキャプチャを再開します。
mAliRtcEngine.startAudioCapture();iOS
// マイクキャプチャを停止します。
self.rtcEngine?.stopAudioCapture()
// マイクキャプチャを再開します。
self.rtcEngine?.startAudioCapture()Harmony
// マイクキャプチャを停止します。
this.rtcEngine.stopAudioCapture();
// マイクキャプチャを再開します。
this.rtcEngine.startAudioCapture();Mac
// マイクキャプチャを停止します。
[self.engine stopAudioCapture];
// マイクキャプチャを再開します。
[self.engine startAudioCapture];Windows
// マイクキャプチャを停止します。
mAliRtcEngine->StopAudioCapture();
// マイクキャプチャを再開します。
mAliRtcEngine->StartAudioCapture();3. リモート音声の再生設定
本セクションでは、リモート音声の再生を制御する方法について説明します。
3.1. リモートユーザーのミュート
ARTC では、特定のリモートユーザーの音声再生を停止または再開するための muteRemoteAudioPlaying メソッドを提供しています。このメソッドの定義は以下のとおりです。
public abstract int muteRemoteAudioPlaying(String uid, boolean mute);ミュート設定は、音声ストリームの受信およびデコードには影響しません。この設定は、セッション参加前および参加後、いずれでも構成できます。
ミュート設定は、リモートユーザーの音声のローカル再生にのみ影響します。リモートユーザーの音声キャプチャには影響しません。
3.2. 特定のリモートユーザーの再生ボリュームの設定
ARTC では、ローカル再生ボリュームを制御するための setPlayoutVolume メソッドを提供しています。
/**
* @brief 再生ボリュームを設定します。
* @param volume 再生ボリューム。値の範囲は 0 ~ 400 です。
* - 0: ミュート。
* - <100: ボリュームを低下させます。
* - >100: ボリュームを増加させます。
* @return
* - 0: 成功。
* - 0 以外の値: 失敗。
*/
public abstract int setPlayoutVolume(int volume);ARTC では、特定のリモートユーザーの音声再生ボリュームを制御するための setRemoteAudioVolume メソッドも提供しています。volume パラメーターを 0 に設定すると、このメソッドは muteRemoteAudioPlaying メソッドと同じ効果を持ちます。
/**
* @brief 特定のリモートユーザーのローカル再生ボリュームを調整します。
* @param uid ユーザー ID。これは、アプリケーションサーバーによって割り当てられた一意の識別子です。
* @param volume 再生ボリューム。値の範囲は 0 ~ 100 です。0 はミュート、100 は元のボリュームを意味します。
* @return
* - 0: 成功。
* - 0 以外の値: 失敗。
*/
public abstract int setRemoteAudioVolume(String uid, int volume);4. インイヤーモニタリング
インイヤーモニタリングでは、ヘッドホンを通じてマイクからの音声を聞くことができます。
4.1. インイヤーモニタリングの有効化
チャンネル参加前および参加後、いずれでも enableEarBack メソッドを呼び出してインイヤーモニタリングを有効化できます。無効化するには、再度 enableEarBack を呼び出し、パラメーターを false に設定します。
インイヤーモニタリングを有効化する際は、ヘッドホンをご使用ください。
Android
rtcEngine.enableEarBack(true);iOS
engine.enableEarBack(true)Harmony
this.rtcEngine.enableEarBack(true);Mac
[self.engine enableEarBack:YES];Windows
mAliRtcEngine->EnableEarBack(TRUE);4.2. インイヤーモニタリングボリュームの設定
setEarBackVolume メソッドを呼び出して、インイヤーモニタリングボリュームを調整します。volume パラメーターは、0 ~ 100 の範囲でボリュームを設定します。0 はミュート、100 は元のボリュームを意味します。デフォルト値は 100 です。
Android
rtcEngine.setEarBackVolume(60);iOS
rtcEngine?.setEarBackVolume(volume)Harmony
this.rtcEngine.setEarBackVolume(value);Mac
[self.engine setEarBackVolume:60];Windows
mAliRtcEngine->SetEarBackVolume(volume);5. ユーザー音量およびアクティブスピーカーコールバック
ARTC では、ユーザー音量およびアクティブスピーカーコールバックを提供しています。これらのコールバックにより、アプリケーションでユーザーのリアルタイム発話状態を検出できます。
この機能はデフォルトで無効です。enableAudioVolumeIndication メソッドを呼び出して有効化します。この機能を有効化すると、システムは指定された頻度で各ユーザーのリアルタイム音量および現在のアクティブスピーカーを定期的に報告します。この情報を使用して、ユーザーインターフェース (UI) のインタラクションを実装できます。
5.1. コールバック機能の有効化
enableAudioVolumeIndication を呼び出して、この機能を有効化し、パラメーターを構成します。パラメーターの説明は以下のとおりです。
interval: コールバック間隔 (ミリ秒単位)。推奨範囲は 300 ms ~ 500 ms です。最小値は 10 ms です。負の値を指定すると、この機能が無効になります。
smooth: 平滑化係数。値が大きいほど音量変化が滑らかになりますが、値が小さいほどリアルタイム性能が向上します。推奨値は 3 です。有効範囲は 0 ~ 9 です。
reportVad: アクティブスピーカー検出スイッチ。0 を指定するとこの機能が無効になり、1 を指定すると有効になります。
Android
mAliRtcEngine.enableAudioVolumeIndication(500, 3,1);iOS
// ユーザー音量コールバックおよびアクティブスピーカー検出
engine.enableAudioVolumeIndication(500, smooth: 3, reportVad: 1)Harmony
// ユーザー音量コールバックおよびアクティブスピーカー検出
this.rtcEngine.enableAudioVolumeIndication(1000, 3, 1);Mac
// ユーザー音量コールバックおよびアクティブスピーカー検出
[self.engine enableAudioVolumeIndication:500 smooth:3 reportVad:1];Windows
// ユーザー音量コールバックおよびアクティブスピーカー検出
mAliRtcEngine->EnableAudioVolumeIndication(500, 3, 1);5.2. コールバックの実装および登録
registerAudioVolumeObserver メソッドを呼び出して、コールバックを登録します。その後、システムは指定された間隔で以下のコールバックをトリガーします。
onAudioVolume: このコールバックは、各ユーザーのリアルタイム発話強度を監視するために、定期的に音量情報を提供します。システムは、ローカルユーザーおよびリモートユーザーを含む、検出されたすべてのユーザーの音量レベルを報告します。この情報を使用して、サウンドウェーブアニメーション、音量インジケーター、ミュート検出などの UI フィードバックを実装できます。mUserIdが "0" の場合、そのエントリはローカルキャプチャ音量を示します。mUserIdが "1" の場合、そのエントリはすべてのリモートユーザーの混合音量を示します。その他の値は、特定のユーザーの音量を示します。totalVolumeは、すべてのリモートユーザーの混合音量の合計を示します。onActiveSpeaker: これは、音声区間検出 (VAD) によってトリガーされるアクティブスピーカーコールバックです。システムは、ユーザーが最もアクティブなスピーカーになったと検出したときにこのコールバックをトリガーします。ユーザーは、発話音量および持続時間がしきい値を超えた場合に、アクティブスピーカーと見なされます。このイベントを使用して、アクティブスピーカーへの自動フォーカスなどの機能を実装できます。たとえば、会議ではアクティブスピーカーの動画ウィンドウを最大化できます。
Android
private final AliRtcEngine.AliRtcAudioVolumeObserver mAliRtcAudioVolumeObserver = new AliRtcEngine.AliRtcAudioVolumeObserver() {
// ユーザー音量コールバック
@Override
public void onAudioVolume(List<AliRtcEngine.AliRtcAudioVolume> speakers, int totalVolume){
handler.post(() -> {
if(!speakers.isEmpty()) {
for(AliRtcEngine.AliRtcAudioVolume volume : speakers) {
if("0".equals(volume.mUserId)) {
// ローカルユーザーの音量
} else if ("1".equals(volume.mUserId)) {
// リモートユーザーの全体音量
} else {
// リモートユーザーの音量
}
}
}
});
}
// アクティブスピーカー検出コールバック
@Override
public void onActiveSpeaker(String uid){
// アクティブスピーカー
handler.post(() -> {
String mag = "onActiveSpeaker uid:" + uid;
ToastHelper.showToast(AudioBasicUsageActivity.this, mag, Toast.LENGTH_SHORT);
});
}
};
// コールバックを登録します
mAliRtcEngine.registerAudioVolumeObserver(mAliRtcAudioVolumeObserver);iOS
iOS の場合、コールバックを登録するためのメソッドを呼び出す必要はありません。以下のコールバックを実装するだけで十分です。
onAudioVolumeCallback
onActiveSpeaker
func onAudioVolumeCallback(_ array: [AliRtcUserVolumeInfo]?, totalVolume: Int32) {
// ユーザー音量コールバック
"onAudioVolumeCallback, totalVolume: \(totalVolume)".printLog()
}
func onActiveSpeaker(_ uid: String) {
// アクティブスピーカーコールバック
"onActiveSpeaker, uid: \(uid)".printLog()
}Harmony
this.rtcEngineEventListener.onAudioVolumeCallback(
(volumeInfo : AliRtcUserVolumeInfo[], volumeInfoCount : number, totalVolume : number) => {
console.info(`Volume callback: volumeInfo=${volumeInfo}, volumeInfoCount=${volumeInfoCount}, totalVolume=${totalVolume}`);
}
)
this.rtcEngineEventListener.onActiveSpeaker((uid: string) => {
console.info(`Current active user: uid=${uid}`);
});Mac
- (void)onAudioVolumeCallback:(NSArray <AliRtcUserVolumeInfo *> *)array totalVolume:(int)totalVolume {
for(AliRtcUserVolumeInfo *info in array) {
NSString *uid = info.uid;
NSInteger volume = info.volume;
dispatch_async(dispatch_get_main_queue(), ^{
NSArray * volumeArray = [ _audioVolumeLabel.stringValue componentsSeparatedByString:@"\n"];
if ([uid isEqualToString:@"1"]) { // リモートユーザーの音量
// リモートユーザーの全体音量
}else if ([uid isEqualToString:@"0"] ){ // ローカルユーザーの音量
// ローカルユーザーの音量を表示
} else {
// リモートユーザーの全体音量
}
});
}
}
- (void)onActiveSpeaker:(NSString *)uid {
if ([uid isEqualToString:@"0"]) {
[self log:[@"Active speaker: Self" UTF8String]];
} else {
NSDictionary *dic = [self.engine getUserInfo:uid];
NSString *name = dic[@"displayName"];
MyLog(@"Active speaker: %@",name);
}
}
Windows
void CTutorialDlg::OnAudioVolumeCallback(const AliEngineUserVolumeInfo* volumeInfo, int volumeInfoCount, int totalVolume)
{
CArray<AliEngineUserVolumeInfo*>* pArray = new CArray<AliEngineUserVolumeInfo*>;
for (int i = 0; i < volumeInfoCount; i++)
{
AliEngineUserVolumeInfo* p = new AliEngineUserVolumeInfo;
p->uid = volumeInfo[i].uid;
p->volume = volumeInfo[i].volume;
p->speechState = volumeInfo[i].speechState;
p->sumVolume = volumeInfo[i].sumVolume;
pArray->Add(p);
}
/* UI を更新するよう通知 */
PostMessage(MM_VOLUME_CALLBACK, (WPARAM)totalVolume, (LPARAM)pArray);
}
void CTutorialDlg::OnActiveSpeaker(const char *uid)
{
m_strCurSpeaker = CString(uid);
/* UI を更新するよう通知 */
PostMessage(MM_ACTIVE_SPEAKER, NULL, NULL);
}
6. 音声ルーティングの構成
音声ルーティングは、音声デバイス管理において重要な要素です。通話中の音声再生デバイスを決定および調整します。デバイスタイプには以下があります。
内蔵再生デバイス: 通常、スピーカーおよびイヤピースが含まれます。
音声がスピーカーにルーティングされている場合、電話を耳に当てなくても十分な音量で聞こえるため、ハンズフリー機能が可能になります。
音声がイヤピースにルーティングされている場合、音量は低くなります。明瞭に聞くには、電話を耳に当てる必要があります。これによりプライバシーが向上し、電話の着信応答に適しています。
外部デバイス: 有線ヘッドホンおよび Bluetooth ヘッドセットなどの外部音声デバイス、および外部サウンドカードなどのプロフェッショナル音響インターフェースが含まれます。
SDK には、音声ルーティングの事前定義された優先順位があり、周辺機器の接続状態に基づいてデバイスを自動的に切り替えます。以下のフローチャートに、このプロセスを示します。
6.1. デフォルト音声ルート
ミーティング参加前に、デフォルト音声ルートをイヤピースまたはスピーカーに設定します。デフォルトルートを設定しない場合、スピーカーが使用されます。
Bluetooth ヘッドセットや有線ヘッドホンなどの周辺機器が切断された場合、この関数で設定したデバイスから音声が出力されます。
外部デバイスが接続されておらず、ユーザーが現在のデバイスを設定していない場合、SDK のデフォルト設定が使用されます。SDK では、スピーカーがデフォルト出力として使用されます。このデフォルト設定を変更するには、
setDefaultAudioRoutetoSpeakerphoneを呼び出します。
/**
* @brief デフォルト音声出力をスピーカーにするかどうかを設定します。デフォルトはスピーカーです。
* @param defaultToSpeakerphone
* - true: スピーカーモード。
* - false: イヤピースモード。
* @return
* - 0: 成功。
* - <0: 失敗。
*/
public int setDefaultAudioRoutetoSpeakerphone(boolean defaultToSpeakerphone);6.2. 現在の音声ルート
ミーティング中に、現在の音声ルートをイヤピースまたはスピーカーに設定します。現在のルートを設定しない場合、デフォルト音声ルートで指定されたデバイスが使用されます。
この関数呼び出しは、有線ヘッドホンや Bluetooth ヘッドセットなどの周辺機器が接続されている場合には効果がありません。
外部デバイスが接続されていない場合、enableSpeakerphone を呼び出してスピーカーを使用します。false を設定するとイヤピースが使用されます。現在の音声デバイスがスピーカーかイヤピースかを確認するには、isSpeakerOn インターフェースを呼び出します。
/**
* @brief 音声出力をイヤピースまたはスピーカーに設定します。
* @param enable true: スピーカーモード。false: イヤピースモード。
* @return
* - 0: 成功。
* - <0: 失敗。
*/
public int enableSpeakerphone(boolean enable);
/**
* @brief 現在の音声出力がイヤピースかスピーカーかを取得します。
* @return
* - true: スピーカーモード。
* - false: イヤピースモード。
*/
public boolean isSpeakerOn();6.3. 音声ルート変更コールバック
音声再生デバイスが変更されたときにコールバックを受信するには、以下のコールバックを登録およびリッスンします。
public abstract class AliRtcEngineEventListener {
/**
* @brief 警告通知。
* @details エンジン内で警告が発生した場合、このコールバックを通じてアプリケーションに通知します。
* @param warn 警告の種類。
* @param message 警告メッセージ。
*/
public void onOccurWarning(int warn, String message);
}以下の表に、warn の戻り値とデバイスタイプのマッピングを示します。
戻り値 | デバイス |
1 | マイク付き有線ヘッドホン |
2 | イヤピース |
3 | マイクなし有線ヘッドホン |
4 | スピーカー |
6 | SCO Bluetooth デバイス |
7 | A2DP Bluetooth デバイス |