マイク入力にwaveファイルのデータを流す方法 (windows)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
piglet

マイク入力にwaveファイルのデータを流す方法 (windows)

#1

投稿記事 by piglet » 11ヶ月前

windowsの話です

skypeやdiscordなど最近ボイスチャットが流行っています
そこでそれらアプリケーションのAPIなどを使わずにマイクへ音声データを流しこむ方法を探しています。

例えばボイスチャット中に最近はやりの音楽をマイクを通して聞かせてあげるということをしたいのですが
windowsでどのように実装すればいいのかわかりません。

物理的には、サウンドカードの出力とマイク端子をケーブルで直結すれば可能ですが
最近は、マイクもサウンドもUSBの人が多く、それもできそうにありません
また、仮想ステレオミキサーという方法もあるのですが、設定が難しかったり動作しなかったりするので
自分でソフトウェアで実装したいと考えています。

このAPI (DirectSoundやらWASAPIなど)でああすれば実現できるのではでもいいので
何かヒントをいただけないでしょうか?

白い変人

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#2

投稿記事 by 白い変人 » 11ヶ月前

私もマイクからの入力方法で疑問があったので、気になったので調べてみました。

http://wisdom.sakura.ne.jp/system/winap ... index.html

というサイトを参考にすればイケそうなのではないかと私は思いました。

私はUSBのマイクとやらを所有していないので何とも言えませんが、USBであれ、マシンがマイクの音声を認識出来る状態になっているという事は、マシンに対応するドライバが入って使える状態になっている事が前提条件と思えますので、その障壁は上記サイトの説明を読む限りは取り払われている様に思えます。

あと、マイク端子にも複数パターンが存在する様に思えます。

私が確認しているのは、SKYPE等のボイスチャット可能なアプリ上でしか動作しなかったマイクと、録音ソフトでもボイスチャット可能なアプリ上でも動作したマイクと2パターン。

前者は、ステレオ端子と同型の見た目の端子であり、後者はモノラル端子と同型の見た目の端子。

そのモノラル/ステレオの使い分けで通話を実現するマイクなのかとも思いましたが、通常のマイク端子から音声を入力するにしても、その点は懸念事項だと私は思っています。

アバター
あたっしゅ
記事: 149
登録日時: 7年前
住所: 東京23区
連絡を取る:

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#3

投稿記事 by あたっしゅ » 11ヶ月前

JASRAC 登録曲なら JASRAC へのお支払いも忘れずに。

Discord の様な、しゃべっている時しか、データを送らない奴は、音楽のような連続音を送ると、途切れ途切れに再生されます。これは、YAMAHA AG-03 通称ミク・ミキサー経由で、iPad の出力を Desktop PC から Discord して、Note PC で別の ID で Discord で受けて確認しました。

仮想ステレオミキサー(ステミキ)類は、Windows Core Audio APIs を使用しているようです。
<a href="https://msdn.microsoft.com/ja-jp/librar ... spx">About the Windows Core Audio APIs(en)</a> 英語の資料しか見つからなかった。
手提鞄あたっしゅ、[MrAtassyu]

piglet

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#4

投稿記事 by piglet » 11ヶ月前

返信ありがとうございます
私もいろいろとC#周りのライブラリのコード(NAudio.dll)を追ってみましたが
やはりマイクからの録音は、最終的に白い変人 さんの挙げられているページの
音声の入力 と同じ手段でしたのでその辺のAPIを調べてみました。

デバイスオープン[ waveInOpen() ] -> バッファの作成[ waveInPrepareHeader() ] ->
  -> バッファをデバイスに登録する[ waveInAddBuffer() ] -> 録音を開始 [ waveInStart() ] ->
      -> バッファにデータがたまる

こんな感じなのでしょうか? ですが一体どの時点でwindowsのマイクIOにデータが流されていて、どこで手を付ければいいんでしょう?
DirectSoundの資料と照らし合わせるとwaveInStart()の開始と同時に
デバイスバッファに一定量のデータが溜まり次第、ドライバを通してwindowsのIOへと流れてると想像していますが・・・
そうなるとwaveInStart()を開始してから、waveInAddBuffer()で登録したバッファをアドレスと大きさがわかっているので書き換えてしまえば乗っ取れるのかな?

なんだかDirectSoundの資料を覗いてると、こっちはデータの加工を前提に作られてる感じもするし・・・
だんだんと何がわからないのか分からない状態になってきました(´・ω・`)
windowsの録音がどうしう仕組みになってるのかわかるような資料はないでしょうか?

>> マイク端子にも複数パターンが存在する様
これはもしかするとマイク端子をさしているのがオンボードの蟹サウンドの場合ではないでしょうか?
蟹サウンドはステレオとアナログ端子を識別して、マイクとLineInのドライバを差し替えてる感じです。うまく動かないのはそのせいかも

piglet

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#5

投稿記事 by piglet » 11ヶ月前

>>Discord の様な、しゃべっている時しか、データを送らない奴は、音楽のような連続音を送ると、途切れ途切れに再生されます
なるほど、人間の音声だけを識別して送信する仕組み入っているようなのでその弊害でしょうか、対策が必要ですね

>>仮想ステレオミキサー(ステミキ)類は、Windows Core Audio APIs を使用しているようです
WASAPIですよね。自分も調べてはいるんですが、英語の資料しかなく苦労しています
というか仕組み自体が英語の資料なので本当に苦労しています・・・

もう物理的なステレオミキサーか、仮想ステレオミキサーを利用して逃げちゃおうかな~とか現実逃避したくなるくらい資料がない

アバター
あたっしゅ
記事: 149
登録日時: 7年前
住所: 東京23区
連絡を取る:

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#6

投稿記事 by あたっしゅ » 7ヶ月前

 Discord で BGM が流れてました。検索したところ、

http://guleruungamememo.blog.jp/archives/1309717.html
Discordに音楽を流してくれるBotを作りたい(高音質) - ぐれんのゲームメモ(ja)

なんらかの方法があるようです。
手提鞄あたっしゅ、[MrAtassyu]

swat

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#7

投稿記事 by swat » 7ヶ月前

ミキサー
WAV →┏┓
マイク→┃┃ →デバイス→スカイプ
CD → ┃┃
    ┗┛     

アバター
あたっしゅ
記事: 149
登録日時: 7年前
住所: 東京23区
連絡を取る:

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#8

投稿記事 by あたっしゅ » 4ヶ月前

「無音部をカットして負担を減らした Discord だと、その方法では、うまくいかない」という話をしています。
手提鞄あたっしゅ、[MrAtassyu]

アバター
あたっしゅ
記事: 149
登録日時: 7年前
住所: 東京23区
連絡を取る:

Re: マイク入力にwaveファイルのデータを流す方法 (windows)

#9

投稿記事 by あたっしゅ » 6日前

Discord 2018(H30)-05-14 の update で、

>音声ファイルがDiscordから直接再生できるようになった。 これできみが作ったいい感じのミックステープをみんなにすぐに聞かせることができるね。

音楽著作権料金の処理等は、不明。


あと、
>もしきみがYouTuberなどの動画配信者で、しかもDiscordを愛しているなら、Discord Partner Programに応募してみてね。最低でも16%はモテ度が上がるらしい。

https://discordapp.com/partners

英文なので、よくわからず。
手提鞄あたっしゅ、[MrAtassyu]

返信

“C言語何でも質問掲示板” へ戻る