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

オーディオデバイスの選択

Windowsでは、AudioManagerを使用して、1対1通話とグループ通話用のマイクおよびスピーカーデバイスを一覧表示し、選択できます。

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

PlanetKitは初期状態ではマイクもスピーカーも選択しません。Windowsのデフォルトデバイスは別途照会できます。Windowsのデフォルトを変更しただけでは、PlanetKitですでに選択したデバイスは置き換わりません。

オーディオマネージャーのインスタンスを取得する​

PlanetKitを初期化した後、PlanetKitManagerのGetAudioManager()を呼び出してAudioManagerを取得してください。

auto pAudioManager = PlanetKit::PlanetKitManager::GetInstance()->GetAudioManager();

利用可能なデバイスを一覧表示する​

現在有効なマイクとスピーカーを一覧表示するには、別々のAudioDeviceInfoArrayを渡してGetMicList()とGetSpeakerList()を呼び出してください。各一覧を使用する前に、それぞれの戻り値を確認してください。デバイスのID、名前、種類を調べるには、AudioDeviceInfoのGetID()、GetName()、GetDeviceType()を呼び出してください。

PlanetKit::AudioDeviceInfoArray microphones;
PlanetKit::AudioDeviceInfoArray speakers;

if (pAudioManager->GetMicList(microphones)) {
for (size_t i = 0; i < microphones.Size(); ++i) {
auto device = microphones.At(i);
std::wcout << L"Microphone: " << device->GetName().c_str()
<< L" (" << device->GetID().c_str() << L")" << std::endl;
}
}

if (pAudioManager->GetSpeakerList(speakers)) {
for (size_t i = 0; i < speakers.Size(); ++i) {
auto device = speakers.At(i);
std::wcout << L"Speaker: " << device->GetName().c_str()
<< L" (" << device->GetID().c_str() << L")" << std::endl;
}
}

現在の選択を確認する​

現在選択中のデバイスを確認するには、GetCurrentMic()を呼び出してMicOptionalを取得し、GetCurrentSpeaker()を呼び出してSpeakerOptionalを取得してください。選択されたデバイスにアクセスする前にHasValue()を確認してください。デバイス一覧から選択したマイクまたはスピーカーのAudioDeviceInfoを調べるには、GetDeviceInfo()を使用してください。

auto currentMic = pAudioManager->GetCurrentMic();
if (currentMic.HasValue()) {
auto info = currentMic.Value()->GetDeviceInfo();
if (info) {
std::wcout << L"Current microphone: " << info->GetName().c_str() << std::endl;
}
}

auto currentSpeaker = pAudioManager->GetCurrentSpeaker();
if (currentSpeaker.HasValue()) {
auto info = currentSpeaker.Value()->GetDeviceInfo();
if (info) {
std::wcout << L"Current speaker: " << info->GetName().c_str() << std::endl;
}
}

値を持たないoptionalは、その種類のデバイスが選択されていないことを示します。

デバイスを選択する​

対応する一覧のAudioDeviceInfoPtrをChangeMic()またはChangeSpeaker()に渡してください。各メソッドは成功時に選択されたマイクまたはスピーカーを返し、失敗時には値を持たないoptionalを返します。

PlanetKit::AudioDeviceInfoArray microphones;
if (pAudioManager->GetMicList(microphones) && microphones.Size() > 0) {
auto selectedMic = pAudioManager->ChangeMic(microphones.At(0));
if (!selectedMic.HasValue()) {
std::wcerr << L"Could not select microphone" << std::endl;
}
}

PlanetKit::AudioDeviceInfoArray speakers;
if (pAudioManager->GetSpeakerList(speakers) && speakers.Size() > 0) {
auto selectedSpeaker = pAudioManager->ChangeSpeaker(speakers.At(0));
if (!selectedSpeaker.HasValue()) {
std::wcerr << L"Could not select speaker" << std::endl;
}
}

スピーカーの情報をChangeMic()に渡すか、マイクの情報をChangeSpeaker()に渡すと、呼び出しは失敗し、以前の選択は変わりません。進行中の通話またはカンファレンスで代わりのデバイスを開始できない場合、メソッドは値を持たないoptionalを返し、その種類のデバイスの選択は空になります。

Windowsのデフォルトデバイスを選択する​

Windowsのマルチメディアロールのデフォルトデバイスを照会するには、GetDefaultMicInfo()とGetDefaultSpeakerInfo()を呼び出してください。これらの呼び出しだけでは現在の選択は変わりません。デフォルトデバイスを選択するには、返されたデバイスを対応する変更メソッドに渡してください。

auto defaultMic = pAudioManager->GetDefaultMicInfo();
if (defaultMic.HasValue()) {
auto selectedMic = pAudioManager->ChangeMic(defaultMic.Value());
}

auto defaultSpeaker = pAudioManager->GetDefaultSpeakerInfo();
if (defaultSpeaker.HasValue()) {
auto selectedSpeaker = pAudioManager->ChangeSpeaker(defaultSpeaker.Value());
}
Note

Windowsのデフォルトデバイス変更通知はコンソールロールのデフォルトを報告します。これは、上記の照会で返されるマルチメディアロールのデバイスと異なる場合があります。

デバイスの選択を解除する​

マイクまたはスピーカーの選択を解除するには、ChangeMic()またはChangeSpeaker()を引数なしで呼び出してください。これはミュートとは別の操作であり、Windowsのデフォルトデバイスを選択する操作でもありません。

pAudioManager->ChangeMic();
pAudioManager->ChangeSpeaker();

いずれかを呼び出した後は、対応するGetCurrentMic()またはGetCurrentSpeaker()の結果に値がありません。

通話開始時にマイクを選択する​

PlanetKitManagerのMakeCall()、VerifyCall()、JoinConference()で通話またはカンファレンスを開始する際は、MicOptional引数を渡してください。以前に選択したマイクを使用するには、GetCurrentMic()の結果を渡してください。NullOptionalを渡すと、PlanetKitは以前のマイク選択を解除し、マイクなしで通話を開始します。マイクなしで通話またはカンファレンスを継続するには、対応する開始パラメーターでSetAllowCallWithoutMic(true)またはSetAllowConferenceWithoutMic(true)を有効にしてください。

デバイスの変更を監視する​

IAudioDeviceEventを実装し、RegisterAudioDeviceEvent()で登録すると、デバイスの追加、取り外し、Windowsのデフォルトデバイス変更について通知を受け取れます。各コールバックには、IDや入力・出力の種類を含むデバイス情報が渡されます。

class AudioDeviceObserver : public PlanetKit::IAudioDeviceEvent {
public:
void OnDefaultAudioDeviceChanged(PlanetKit::AudioDeviceInfoPtr device) override {
if (device) {
std::wcout << L"Default device changed: " << device->GetID().c_str() << std::endl;
}
}

void OnAudioDeviceAdded(PlanetKit::AudioDeviceInfoPtr device) override {
if (device) {
std::wcout << L"Device added: " << device->GetID().c_str() << std::endl;
}
}

void OnAudioDeviceRemoved(PlanetKit::AudioDeviceInfoPtr device) override {
if (device) {
std::wcout << L"Device removed: " << device->GetID().c_str() << std::endl;
}
}
};

AudioDeviceObserver observer;
bool registered = pAudioManager->RegisterAudioDeviceEvent(&observer);

登録中はobserverを保持し、破棄する前にDeregisterAudioDeviceEvent()を呼び出してください。別のオーディオデバイスリスナーがすでに登録されている場合、登録は失敗します。選択中のデバイスが取り外されると、PlanetKitはOnAudioDeviceRemoved()を呼び出す前にその選択を解除します。必要に応じて現在のデバイスを照会し、代わりのデバイスを選択してください。

関連API​

オーディオデバイスの選択に関連するAPIは次のとおりです。

クラス​

メソッド​

イベント​