VQE制御
Voice Quality Enhancement(VQE)は、PlanetKitのオーディオ処理モジュールで通話中の音声品質を向上させます。VQEは、リアルタイム通信で頻繁に発生するオーディオの問題を解決し、より鮮明で一貫した通話体験を提供します。
| 対応する通話タイプ | SDKの最低バージョン |
|---|---|
| 1対1通話、グループ通話(カンファレンス) | PlanetKit 4.3 |
VQEフィルター
VQEは、独立して制御できる3つのオーディオフィルターを提供します。
- エコー除去フィルター
- 音量調整フィルター
- ノイズ除去フィルター
VQEとオーディオフィルターの詳細については、ブログの優れた音質を届けるためのVQEを参照してください。
エコー除去フィルター
エコー(echo)とは、直接的な音の後に遅れてリスナーに届く反響音です。音声通話中にエコーがマイクに混入すると、話者に自分の声が聞こえてくることもあります。エコー除去フィルター(acoustic echo canceller, AEC)は、音からエコーを除去します。
音量調整フィルター
マイクの感度(マイクハードウェアの特性)によっては、マイクで取得された音の音量が低すぎたり高すぎたりして、会話が困難になることがあります。音量調整フィルター(auto gain control、AGC)は、音量を適切なレベルに調整します。
AGCモード
PlanetKitは、ソフトウェアモードとハードウェアモード、2つのAGCモードをサポートします。
ソフトウェアモードでは、入力音声が一定の音量に保たれるようにソフトウェアで補正します。しかし、ソフトウェアによる補正を過度に行うと、音質に悪影響を与える可能性があるという制約があります。それよりも、マイクから適度な音量が入る方がより良い音質を保証でき、そのために使用するのがハードウェアモードです。
ハードウェアモードでは、マイクに入力された信号から音声区間のエネルギーを計算し、以下のようにハードウェアで音量を調整します。
- 音声区間のエネルギーが基準レベル範囲より大きければ、マイク感度を下げます。
- 音声区間のエネルギーが基準レベル範囲より小さければ、マイク感度を上げます。
- 音声区間のエネルギーが基準レベル範囲内にあれば、マイク感度を維持します。
ハードウェアモードはマイクデバイスを直接制御するため、WindowsやmacOSなどのマイクを制御できるプラットフォームでのみ使用できます。また、ハードウェアモードはソフトウェアモードよりも音量の増幅が大きく、ソフトウェアモードでは聞き取りにくい音声であっても、適切な音量レベルに調整できます。
プラットフォーム別のAGC基本モード
各プラットフォームのAGC基本モードは、次のとおりです。
| プラットフォーム | 基本モード | 注 |
|---|---|---|
| Android | ソフトウェアモード | ハードウェアモードは非対応 |
| iOS | ソフトウェアモード | ハードウェアモードは非対応 |
| macOS | ハードウェアモード | |
| Windows | ハードウェアモード |
ノイズ除去フィルター
ノイズとは、話者の声以外にマイクで取得される不要な音(キーボードのタイピング、PCファンのノイズなど)を指します。ノイズ除去フィルター(noise suppressor、NS)は、これらのノイズを減らし、話者の声の明瞭度を向上させ、全体的なオーディオ品質を改善します。
APIの概要
PlanetKitSendVoiceProcessorクラスでVQE機能を制御するAPIを提供します。
PlanetKitSendVoiceProcessorが有効の場合(デフォルト)、各フィルターを制御できます。PlanetKitSendVoiceProcessorが無効の場合、すべてのフィルターが無効になります。
ユーザーは、VoIP会議向けに開発され内部音声処理を備えたオーディオデバイスをつなげて、PlanetKit通話機能を利用することもできます。この場合、PlanetKitSendVoiceProcessorが既に処理されたオーディオストリームを二重に処理してしまい、音声品質に悪影響を及ぼす可能性があります。このような環境では、より良い音声品質を提供するためにPlanetKitSendVoiceProcessorを無効にすることを推奨します。
VQEインスタンスの取得
PlanetKitCallまたはPlanetKitConferenceインスタンスを通じて、PlanetKitSendVoiceProcessorインスタンスを取得できます。
// 1-to-1 call
val call: PlanetKitCall
... // Obtain the PlanetKitCall instance from the result of makeCall() or verifyCall()
val voiceProcessor = call.sendVoiceProcessor
// Group call
val conference: PlanetKitConference
... // Obtain the PlanetKitConference instance from the result of joinConference()
val voiceProcessor = conference.sendVoiceProcessor
VQEを有効または無効にする
VQEを有効または無効にするには、PlanetKitSendVoiceProcessorの enable()またはdisable()を使用してください。
// Enable VQE
voiceProcessor.enable { result ->
if (result.isSuccessful) {
Log.d(TAG, "VQE enabled successfully")
}
}
// Disable VQE
voiceProcessor.disable { result ->
if (result.isSuccessful) {
Log.d(TAG, "VQE disabled successfully")
}
}
// Check if VQE is enabled
val isEnabled = voiceProcessor.isEnable()
個々のフィルターを制御する
VQEを有効にすると、APIを使用して各オーディオフィルターを制御できます。
以下の場合、個々のフィルターを制御することで音質の改善が期待できます。
- 内蔵AECが動作するオーディオデバイスを使用する場合
- 楽器を演奏したり、音楽を再生したりする場合
- カスタムオーディオデバイスを使用して、実際のデバイスではないオーディオ入力/出力を使用する場合
詳しくは、VQEフィルター制御とVQE制御のAEC設定が必要な場合を参照してください。
AECを設定する
AECを制御するには、PlanetKitVoiceProcessor.AcousticEchoCancellerModeを引数として受け取るsetAcousticEchoCancellerMode()メソッドを使用してください。PlanetKitVoiceProcessor.AcousticEchoCancellerMode列挙型は、次のモードを提供します。
| モード | 説明 |
|---|---|
DISABLED | AECを無効にします。 |
INTENSITY_RECOMMENDED | オーディオ装置およびOSタイプを考慮した品質テストを通じてあらかじめ設定したプリセットを適用します。どのモードを設定すべきか分からない場合は、このモードを使用してください。 |
INTENSITY_MIN | エコー除去を最小限に抑えます。 |
INTENSITY_MAX | エコーを最大限に除去します。 |
INTENSITY_ADAPTIVE | エコー除去の強度を適切に調整します。 |
// Set AEC mode
voiceProcessor.setAcousticEchoCancellerMode(PlanetKitVoiceProcessor.AcousticEchoCancellerMode.INTENSITY_RECOMMENDED) { result ->
Log.d(TAG, "AEC configured with result: ${result.isSuccessful}")
}
// Get current AEC mode
val currentMode = voiceProcessor.getAcousticEchoCancellerMode()
AGCを設定する
AGCを制御するには、PlanetKitVoiceProcessor.AutoGainControlModeを引数として受け取るsetAutoGainControlMode()メソッドを使用してください。PlanetKitVoiceProcessor.AutoGainControlMode列挙型は、次のモードを提供します。
| モード | 説明 |
|---|---|
DISABLED | AGCを無効にします。 |
SOFTWARE | ソフトウェアで音量調整を制御します。 |
プラットフォームによって提供する音量調整制御機能に相違点があります。プラットフォーム別の基本モードとサポートされるモードは、プラットフォーム別AGC基本モードを参照してください。
// Set AGC mode
voiceProcessor.setAutoGainControlMode(PlanetKitVoiceProcessor.AutoGainControlMode.SOFTWARE) { result ->
Log.d(TAG, "AGC configured with result: ${result.isSuccessful}")
}
// Get current AGC mode
val currentMode = voiceProcessor.getAutoGainControlMode()
NSを設定する
NSを制御するには、PlanetKitVoiceProcessor.NoiseSuppressorModeを引数として受け取るsetNoiseSuppressorMode()メソッドを使用してください。PlanetKitVoiceProcessor.NoiseSuppressorMode列挙型は、次のモードを提供します。
| モード | 説明 |
|---|---|
DISABLED | NSを無効にします。 |
ENABLED | NSを有効にします。(デフォルト値) |
// Set NS mode
voiceProcessor.setNoiseSuppressorMode(PlanetKitVoiceProcessor.NoiseSuppressorMode.ENABLED) { result ->
Log.d(TAG, "NS configured with result: ${result.isSuccessful}")
}
// Get current NS mode
val currentMode = voiceProcessor.getNoiseSuppressorMode()
関連API
VQE制御に関連するAPIは、以下のとおりです。