Help us understand the problem. What is going on with this article?

MacでPhotonVoiceを使用したときに他アプリケーションの音量が小さくなる問題

概要

PhotonVoice を使用した Unity 製アプリを起動した途端、別アプリケーションとして起動している Google Chrome 上の YouTube や Spotify 等の音量が極小になる。また、通話中の Discord に至っては音量だけではなくマイク入力も極小になるようだった。本事象は UnityEditor 上でアプリケーションを実行しても発生した。

同じ事象は PhotonVoice を使用していないと思われる LINE や Skype, Zoom の通話中でも発生しているが、Discord や Slack, Google Chrome 上の Facebook Messenger の通話中では発生していないので、何か解決方法があることが分かる。

確定的な原因は分からなかったが、対処方法は分かったので記事として残しておく。

各種バージョン

環境 バージョン
macOS macOS 10.15.4
Unity Unity 2018.2.21f1
Photon Unity Network PUN 1.91

(全体的にバージョンが古くてお恥ずかしい限りです)

対処方法

PhotonVoiceRecorder にある Microphone Type で「Unity」を使用する。
自分のプロジェクトでは「Photon」を使用していたが、これを「Unity」に変更したら解決した。

image.png

ただし、基本的には Unity マイクよりも Photon マイクのほうが何かと優秀なので、Mac で起動したときのみ「Unity」マイクを使用するようにするために下記コードを書いた。 (PhotonマイクのクライアントとUnityマイクのクライアント同士で音声通信が正常に出来ることは検証済み)

private void Start() {
  GetComponent<PhotonVoiceRecorder>().MicrophoneType = IsMacOs() 
    ? PhotonVoiceRecorder.MicAudioSourceType.Unity 
    : PhotonVoiceRecorder.MicAudioSourceType.Photon;

  // 念の為PhotonVoiceSettingも変更しておく
  PhotonVoiceSettings.Instance.MicrophoneType = IsMacOs() 
    ? PhotonVoiceSettings.MicAudioSourceType.Unity 
    : PhotonVoiceSettings.MicAudioSourceType.Photon;
}

// Macで実行されていたらtrue
private bool IsMacOs() {
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
  return true;
#endif
  return false;
}

原因究明 (未解決)

下記のフォーラムで探して回ったが、とにかく同じ事で悩んでいる人が少なかった。
また、投稿があっても回答が無いパターンも多かった。

  • Unity Forum
  • Apple Developer Forums
  • Photon Engine Support Forum
  • Stack Overflow

似たような問題を抱えている人

本事象に一番近いなと思ったのは、Apple Developer Forums に投稿されていた下記の質問。
(もしかしたら全く関係無いかもしれないが)
VoiceProcessingIO lowers the volume of all othe... |Apple Developer Forums

VoIPアプリケーションでVoiceProcessingIO(kAudioUnitSubType_VoiceProcessingIO)オーディオユニットを使用してオーディオを録音および再生しています。ユニットが初期化されている場合を除き、すべてが正常に動作します。他に何かがオーディオを再生している場合、そのオーディオは非常に静かになりますが、出力はすべてフルボリュームで聞こえます。

こちらの投稿には回答が付いていなかったが、macOS のオーディオ API 周りの機能が原因である事が分かる。
(上記記事で紹介されていた kAUVoiceIOProperty_DuckNonVoiceAudio - AudioToolbox | Apple Developer Documentation のプロパティをドキュメントから参照したが、非推奨と書いてあったので対応出来なかった。)

全てのアプリケーションにおいて音声入力時に他のアプリケーションの音量が小さくなるのならここで諦めるが、上述した通り Discord や Slack の通話では音量が変わる事が無かったので、もう少し調べてみることにした。

Photon Voice のマイクタイプについて

公式ドキュメントの「Photon」マイクの説明を見ると、ネイティブのオーディオAPIとやりとりしている事が分かる。

Unityマイクは、ほぼ同じコードベースを使用して複数のプラットフォームをターゲットにすることを容易にするのに最適です。ただし、いくつかの点で、UnityのマイクAPIは制限されているか、あちこちにいくつかの問題があります。そのため、オーディオ入力デバイスと直接やり取りし、UnityのマイクAPIをバイパスする独自の方法を導入しました。これの主な理由の1つは、デバイスのハードウェアに組み込まれているエコーキャンセレーションを利用することです。 ※ Photon Voice For PUN | Photon Engine より引用

macOS の API (特にオーディオ周り)には詳しくないが、オーディオ API が本事象の原因であり、Photon マイクの実装がネイティブのオーディオ API を利用しているのならもしかして?と思ってマイクタイプを「Unity」に変更したら他アプリケーションの音量に影響を与えない事が出来た。

最後に

Unity マイクも内部的にはネイティブのオーディオ API を参照しているのでは?と思ったが、他アプリケーションの音量操作は Unity API 側で無効にされているという認識で良かったのだろうか。

結局、具体的に何のオーディオ API の何のパラメータが原因で、どのような場合に音量操作を行うのかというのは分からなかったので、もし詳しい方がいらっしゃいましたらご教示いただけますと幸いです。

参考リンク

yakimeron
株式会社テックコネクト代表取締役兼エンジニアです。Scala/Swift/Kotlin/C#/Java/C++/Go/Ruby/PHP/Python/JavaScriptを書き、AWS/Firebaseを使います。現在はUnity+Go+Nuxt.js+AWS+Firebase+PhotonEngineを利用してVRサービスを開発しています。コードを書いて物を作り出すのが何よりも好き!!
https://techconnect.co.jp/
techconnect
仮想世界の未来を創る VR SNS「TECO」を開発しています!日本のxR業界の発展に少しでも貢献できればと思い立ち上げました。
https://techconnect.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした