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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

894閲覧

javascriptのgetUserMedia()で3ch以上の音を取得したい

John-John

総合スコア9

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/07/01 07:28

前提・実現したいこと

3ch以上音声入力が可能なオーディオインターフェースをWindows10orMacにUSBで接続し、
javascriptのgetUserMedia()で3ch以上の音を取得したいです。

発生している問題

navigator.mediaDevices.getUserMedia(constraints);で
音声を取得しようとしたところ、2chまでしか音声が入ってきませんでした。

該当のソースコード

javascript

1var constraints = { 2 video: false, 3 audio: { 4 optional: [{ 5 sourceId: //ここにオーディオインターフェースのID// 6 }] 7 } 8 }; 9 10navigator.mediaDevices.getUserMedia(constraints) 11.then(function(stream) 12{ 13//以下、省略

試したこと

オーディオインターフェースに付属のデジタルミキサーソフトはASIOドライバーと紐付いているので3ch以上取れています。
おそらく、getUserMedia()にはWindowsデフォルトのオーディオドライバーが紐付いているため、2chまでしか取得できないのではと想像しています。

ちなみにmacのデフォルトのオーディオドライバーはUSB AUDIO CLASS 2.0なので複数音声取れるかなと試してみましたがやはりgetUserMedia()で2chまでしか取れませんでした。
これがなぜなのかもわかりません。

想像ですが、getUserMedia()でWindowsやmacのデフォルトのオーディオドライバーからでなく
ASIOドライバーから音声が取得できれば3ch以上の音声が取得できるのかなと思っています。


何かご存知の方いらっしゃいましたら教えてください。
よろしくお願い致します!

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

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

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

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

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

guest

回答1

0

ベストアンサー

試してみたことがないので解決方法として参考になるかわからないですが、、、

1,ブラウザで取得しているデフォルトのインターフェースが内部インターフェースでなく、外部であるかを確認し、もしそうでなければ外部インターフェースから音声ソースを取得するように設定を変更する

2,ASIOのドライバーを利用して3ch対応アプリケーションをCppで作ったことがありました。なのでもしかしたらドライバーを使ったらうまい事裏でごにょごにょしてくれるかも?
JSだったらこれとかどうでしょうか?(node.jsですが)
https://github.com/distopik/node-audio-asio

参考になればうれしいです。

投稿2018/07/01 08:42

kuramon

総合スコア51

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

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

John-John

2018/07/01 11:49

kuramonさん> 回答ありがとうございます。 >1,ブラウザで取得しているデフォルトのインターフェースが内部インターフェースでなく、外部である>かを確認し、もしそうでなければ外部インターフェースから音声ソースを取得するように設定を変更する これなのですが、getUserMedia(constraints)の引数constraintsにUSB接続したオーディオインターフェースのデバイスIDは指定できていて、そのオーディオインターフェースの1ch2chから音声は取得できることを確認済みです。 この設定だけで取れることを期待していたのですが、そうはうまくいきませんでした。。 >2,ASIOのドライバーを利用して3ch対応アプリケーションをCppで作ったことがありました。 >なのでもしかしたらドライバーを使ったらうまい事裏>でごにょごにょしてくれるかも?  →有益な情報ありがとうございます。   ソースコード拝見しました。   const nodeAsio= require('./build/Release/nodeAudioAsio'),   なのですが'./build/Release/nodeAudioAsio'はどうやって入手できるのでしょうか?ASIO SDKを(https://www.steinberg.net/en/company/developers.html)から入手すればよいのでしょうか? どのようにrequire()でASIO Driverを取得できるようにできるのかがわかりませんでした。 また、「ASIOのドライバーを利用して3ch対応アプリケーションをCppで作った」とのことですがこれはどのように作成しましたか? 質問ばかりで申し訳ございませんがよろしくお願い致します!
kuramon

2018/07/02 02:36

> ASIOのドライバーを利用して3ch対応アプリケーションをCppで作った 申し訳ないのですが、業務の内容なので細かくお伝えすることはできません。 その点ご了承ください。 >'./build/Release/nodeAudioAsio'はどうやって入手できるのでしょうか? nodeJSのパッケージ管理ツールで依存関係を全て解決させた方がいい気がします。 あれが足りないこれが足りないなんていうエラーはいらないタスクでしかありませんし、あまり有益でないので。 npm経由で僕が提示したリポジトリをRequireしてみてください! (もし、ブラウザに組み込む標準JSのままでやろうと考えられているのであれば、ChromeやFirefoxなどのブラウザが対応するまで待つしかないでしょう) P.S. https://productforums.google.com/forum/#!topic/chrome-ja/G4KzekA74tc こちらのスレッドにある内容を見ている限り、環境依存っぽいですね。 AbletonなどのDAW環境で3チャネルがきちんと動くか一度確認してみるとより一層対応策をねれるかと。 P.S. Unityでむりやり3chに対応する方法を考えてみたことがあって それが、以下の構造です。 1)メインスレッドからRxもしくはCorutineを利用して並列スレッドインスタンスを3つ立ち上げる。 2※optional)各スレッドのインターバルごとにブロックチェーンでタイムスレッドを監視 3)各スレッドごとに別の端末を設定しておき音声データをQueueに入れる 4)インターバル終了後Dequeue後音声をMix 5)MixデータをOutput これで最悪2ch以降の音声データを取得することは可能になったのですが、 あくまでなんちゃって機能なので、非同期で回さないと重すぎてまず使い物にならないのと、ノイズがめっちゃ入るという点、あとはUnity上のテストなのでJsで同じようにできるかわからないこと。 参考になるかわかんないですが試す価値はあるかと。
John-John

2018/07/03 01:46

kuramonさん> 回答ありがとうございます。 >AbletonなどのDAW環境で3チャネルがきちんと動くか一度確認してみるとより一層対応策をねれるかと。  →手持ちのDAWソフトではオーディオインタフェース対応分のチャンネル数分の音声が取得できることを確認できました。 教えていただいたnodeJSの方は検証中です。
John-John

2018/07/12 02:19

ブラウザでは無理そうなのでネイティブのアプリの方向で行くことにしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問