本文にスキップする
Version: 6.2

VQE制御

Voice Quality Enhancement(VQE)は、PlanetKitのオーディオ処理モジュールで通話中の音声品質を向上させます。VQEは、リアルタイム通信で頻繁に発生するオーディオの問題を解決し、より鮮明で一貫した通話体験を提供します。

対応する通話タイプSDKの最低バージョン
1対1通話、グループ通話(カンファレンス)PlanetKit 4.3

VQEフィルター

VQEは、独立して制御できる3つのオーディオフィルターを提供します。

  • エコー除去フィルター
  • 音量調整フィルター
  • ノイズ除去フィルター
Tip

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の概要

SendVoiceProcessorクラスでVQE機能を制御するAPIを提供します。

  • SendVoiceProcessorが有効の場合(デフォルト)、各フィルターを制御できます。
  • SendVoiceProcessorが無効の場合、すべてのフィルターが無効になります。
Note

ユーザーは、VoIP会議向けに開発され内部音声処理を備えたオーディオデバイスをつなげて、PlanetKit通話機能を利用することもできます。この場合、SendVoiceProcessorが既に処理されたオーディオストリームを二重に処理してしまい、音声品質に悪影響を及ぼす可能性があります。このような環境では、より良い音声品質を提供するためにSendVoiceProcessorを無効にすることを推奨します。

VQEインスタンスの取得

PlanetKitCallまたはPlanetKitConferenceインスタンスを通じて、SendVoiceProcessorインスタンスを取得できます。

// 1-to-1 call
PlanetKit::PlanetKitCallPtr m_pCall;
... // Obtain the PlanetKitCall instance from the result of MakeCall() or VerifyCall()

PlanetKit::SendVoiceProcessorPtr voiceProcessor = m_pCall->GetSendVoiceProcessor();

// Group call
PlanetKit::PlanetKitConferencePtr m_pConference;
... // Obtain the PlanetKitConference instance from the result of JoinConference()

PlanetKit::SendVoiceProcessorPtr voiceProcessor = m_pConference->GetSendVoiceProcessor();

VQEを有効または無効にする

VQEを有効または無効にするには、SendVoiceProcessorEnable()またはDisable()を使用してください。

// Enable VQE
voiceProcessor->Enable(nullptr, [](void* pUserData, bool bSuccess) {
if (bSuccess) {
std::wcout << L"VQE enabled successfully" << std::endl;
}
});

// Disable VQE
voiceProcessor->Disable(nullptr, [](void* pUserData, bool bSuccess) {
if (bSuccess) {
std::wcout << L"VQE disabled successfully" << std::endl;
}
});

// Check if VQE is enabled
bool isEnabled = voiceProcessor->IsEnabled();

個々のフィルターを制御する

VQEを有効にすると、APIを使用して各オーディオフィルターを制御できます。

Note

以下の場合、個々のフィルターを制御することで音質の改善が期待できます。

  • 内蔵AECが動作するオーディオデバイスを使用する場合
  • 楽器を演奏したり、音楽を再生したりする場合
  • カスタムオーディオデバイスを使用して、実際のデバイスではないオーディオ入力/出力を使用する場合

詳しくは、VQEフィルター制御VQE制御のAEC設定が必要な場合を参照してください。

AECを設定する

AECを制御するには、EPlanetKitAcousticEchoCancellerを引数として受け取るSetAcousticEchoCanceller()メソッドを使用してください。EPlanetKitAcousticEchoCanceller列挙型は、次のモードを提供します。

モード説明
PLNK_ACOUSTIC_ECHO_CANCELLER_DISABLEDAECを無効にします。
PLNK_ACOUSTIC_ECHO_CANCELLER_INTENSITY_RECOMMENDEDオーディオ装置およびOSタイプを考慮した品質テストを通じてあらかじめ設定したプリセットを適用します。どのモードを設定すべきか分からない場合は、このモードを使用してください。
PLNK_ACOUSTIC_ECHO_CANCELLER_INTENSITY_MINエコー除去を最小限に抑えます。
PLNK_ACOUSTIC_ECHO_CANCELLER_INTENSITY_MAXエコーを最大限に除去します。
PLNK_ACOUSTIC_ECHO_CANCELLER_INTENSITY_ADAPTIVEエコー除去の強度を適切に調整します。
// Set AEC mode
voiceProcessor->SetAcousticEchoCanceller(PLNK_ACOUSTIC_ECHO_CANCELLER_INTENSITY_RECOMMENDED, nullptr, [](void* pUserData, bool bSuccess) {
std::wcout << L"AEC configured with result: " << bSuccess << std::endl;
});

// Get current AEC mode
EPlanetKitAcousticEchoCanceller currentMode = voiceProcessor->GetAcousticEchoCancellerMode();

AGCを設定する

AGCを制御するには、EPlanetKitAutoGainControlを引数として受け取るSetAutoGainControl()メソッドを使用してください。EPlanetKitAutoGainControl列挙型は、次のモードを提供します。

モード説明
PLNK_AUTO_GAIN_CONTROL_TYPE_DISABLEDAGCを無効にします。
PLNK_AUTO_GAIN_CONTROL_TYPE_SOFTWAREソフトウェアで音量調整を制御します。
PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWAREハードウェアで音量調整を制御します。(iOS、Androidでは使用不可)
参考

プラットフォームによって提供する音量調整制御機能に相違点があります。プラットフォーム別の基本モードとサポートされるモードは、プラットフォーム別AGC基本モードを参照してください。

// Set AGC mode
voiceProcessor->SetAutoGainControl(PLNK_AUTO_GAIN_CONTROL_TYPE_SOFTWARE, nullptr, [](void* pUserData, bool bSuccess) {
std::wcout << L"AGC configured with result: " << bSuccess << std::endl;
});

// Get current AGC mode
EPlanetKitAutoGainControl currentMode = voiceProcessor->GetAutoGainControlMode();

NSを設定する

NSを制御するには、EPlanetkitNoiseSuppressorModeを引数として受け取るSetNoiseSuppressor()メソッドを使用してください。EPlanetkitNoiseSuppressorMode列挙型は、次のモードを提供します。

モード説明
PLNK_NOISE_SUPPRESSOR_MODE_DISABLEDNSを無効にします。
PLNK_NOISE_SUPPRESSOR_MODE_ENABLENSを有効にします。(デフォルト値)
// Set NS mode
voiceProcessor->SetNoiseSuppressor(PLNK_NOISE_SUPPRESSOR_MODE_ENABLE, nullptr, [](void* pUserData, bool bSuccess) {
std::wcout << L"NS configured with result: " << bSuccess << std::endl;
});

// Get current NS mode
EPlanetkitNoiseSuppressorMode currentMode = voiceProcessor->GetNoiseSuppressorMode();

関連API

VQE制御に関連するAPIは、以下のとおりです。

クラス

メソッド

列挙型