質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1185閲覧

UnityでAudioListenerの内容をPhotonなどで送信

teraps

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/10/25 07:54

編集2018/10/25 10:02

UnityでAudioListenerの内容をPhotonなどで送信

Unityの3D Soundで,マルチプレイヤーでの立体音響を実装しています.
PCでホスト,スマホで各プレイヤーのクライアントを実装しています.

本来はAudioListenerをシーン内に複数用意し,クライアント側で
自分に割り当てられたAudioListenerを起動させるのみで済むと思います.

しかし,今回はやや特殊な状況で,PCのホスト側に処理を全て集約し,
スマホのクライアント側は単なる音響装置として利用しています.

そこで,クライアント側に効果音を用意し,ホスト側から発信した信号に応じてクライアント側の効果音を
鳴らすことは可能なのですが,立体音響を実装するのが難しい状況です.

各プレイヤーのAudioListenerが聴こえている音響状況を再現したいのですが,
各クライアントには空間情報や他のオブジェクトは内蔵されておらず,効果音データしかありません.
そのため,AudioListenerの聴こえている音響をなんらかの形で送信する形で解決できればと思っています.

https://qiita.com/pchan52/items/19d2899c167ce6da0710
このようにPhotonVoiceによってマイクやAudioMixerの音をOutputに格納して送信することはできるのですが,
AudioListerを取得して送ることはできなさそうです.

AudioListener.GetOutputDataなどで波形を取ることはできるのですが,
音源として復元することは難しそうです.

ちなみに,ホスト側で各オブジェクトの距離を取得し,
それに応じて音量を変更し,音量のみクライアントで再現することで擬似的に立体音響を実現することは
できそうなのですが,オブジェクトを複数配置して複雑な音響を作る場合には
やはりAudioListenerの3D Soundを使いたいところです.

すみませんが,なにか良い案があればご教授ください.

追記:
音声のパケット送信は可能なようです.
https://qiita.com/CST_negi/items/bf3bc0ede34bbcd2f7b2

AudioListenerの音をどうにか引っ張ってこれればいいのですが,,

https://answers.unity.com/questions/1427912/converting-audiolistenergetoutputdata-to-a-wav-fil.html
http://akiiro.hatenablog.com/entry/2017/08/09/031237
https://qiita.com/r-ngtm/items/a949b067be99c94b5ada
wavに録音は難しくて理解ができていません….

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ネットワークゲームは経験がなく具体的回答ができずすみません。

ホスト側から音データ自体を送信し、クライアント側でリアルタイムに再生するという方針はかなり高負荷のように感じます。

オーディオクリップはクライアント側がすでに持っているのでしたら、ホスト側からは再生したいオーディオクリップ名(名前でなくとも、オーディオクリップを識別できれば何でもいいでしょう)と音源の座標だけを送信し、クライアント側では該当するオーディオクリップをAudioSource.PlayClipAtPointで鳴らしてみてはいかがでしょうか?
このときホストから受け取った音源座標を引数に与えてやれば、その位置で音が鳴っているように聞こえるかと思うのですが...

投稿2018/10/25 23:19

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teraps

2018/10/29 03:43

回答ありがとうございます! 確かに負荷を考えるとスマートな実装ではありませんね…. 結局,アドバイスいただいたように,クライアントに音源を持たせ,座標に応じて音量情報のみ送信することで擬似的に立体音響を再現いたしました. これですら少しの遅延などがあるのですが,いったんの解決策といたしました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問