ページ 1 / 1
マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年6月21日(水) 05:48
by piglet
windowsの話です
skypeやdiscordなど最近ボイスチャットが流行っています
そこでそれらアプリケーションのAPIなどを使わずにマイクへ音声データを流しこむ方法を探しています。
例えばボイスチャット中に最近はやりの音楽をマイクを通して聞かせてあげるということをしたいのですが
windowsでどのように実装すればいいのかわかりません。
物理的には、サウンドカードの出力とマイク端子をケーブルで直結すれば可能ですが
最近は、マイクもサウンドもUSBの人が多く、それもできそうにありません
また、仮想ステレオミキサーという方法もあるのですが、設定が難しかったり動作しなかったりするので
自分でソフトウェアで実装したいと考えています。
このAPI (DirectSoundやらWASAPIなど)でああすれば実現できるのではでもいいので
何かヒントをいただけないでしょうか?
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年6月21日(水) 20:54
by 白い変人
私もマイクからの入力方法で疑問があったので、気になったので調べてみました。
http://wisdom.sakura.ne.jp/system/winap ... index.html
というサイトを参考にすればイケそうなのではないかと私は思いました。
私はUSBのマイクとやらを所有していないので何とも言えませんが、USBであれ、マシンがマイクの音声を認識出来る状態になっているという事は、マシンに対応するドライバが入って使える状態になっている事が前提条件と思えますので、その障壁は上記サイトの説明を読む限りは取り払われている様に思えます。
あと、マイク端子にも複数パターンが存在する様に思えます。
私が確認しているのは、SKYPE等のボイスチャット可能なアプリ上でしか動作しなかったマイクと、録音ソフトでもボイスチャット可能なアプリ上でも動作したマイクと2パターン。
前者は、ステレオ端子と同型の見た目の端子であり、後者はモノラル端子と同型の見た目の端子。
そのモノラル/ステレオの使い分けで通話を実現するマイクなのかとも思いましたが、通常のマイク端子から音声を入力するにしても、その点は懸念事項だと私は思っています。
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年6月22日(木) 19:01
by あたっしゅ
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> 英語の資料しか見つからなかった。
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年6月23日(金) 16:40
by piglet
返信ありがとうございます
私もいろいろとC#周りのライブラリのコード(NAudio.dll)を追ってみましたが
やはりマイクからの録音は、最終的に白い変人 さんの挙げられているページの
音声の入力 と同じ手段でしたのでその辺のAPIを調べてみました。
デバイスオープン[ waveInOpen() ] -> バッファの作成[ waveInPrepareHeader() ] ->
-> バッファをデバイスに登録する[ waveInAddBuffer() ] -> 録音を開始 [ waveInStart() ] ->
-> バッファにデータがたまる
こんな感じなのでしょうか? ですが一体どの時点でwindowsのマイクIOにデータが流されていて、どこで手を付ければいいんでしょう?
DirectSoundの資料と照らし合わせるとwaveInStart()の開始と同時に
デバイスバッファに一定量のデータが溜まり次第、ドライバを通してwindowsのIOへと流れてると想像していますが・・・
そうなるとwaveInStart()を開始してから、waveInAddBuffer()で登録したバッファをアドレスと大きさがわかっているので書き換えてしまえば乗っ取れるのかな?
なんだかDirectSoundの資料を覗いてると、こっちはデータの加工を前提に作られてる感じもするし・・・
だんだんと何がわからないのか分からない状態になってきました(´・ω・`)
windowsの録音がどうしう仕組みになってるのかわかるような資料はないでしょうか?
>> マイク端子にも複数パターンが存在する様
これはもしかするとマイク端子をさしているのがオンボードの蟹サウンドの場合ではないでしょうか?
蟹サウンドはステレオとアナログ端子を識別して、マイクとLineInのドライバを差し替えてる感じです。うまく動かないのはそのせいかも
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年6月23日(金) 16:50
by piglet
>>Discord の様な、しゃべっている時しか、データを送らない奴は、音楽のような連続音を送ると、途切れ途切れに再生されます
なるほど、人間の音声だけを識別して送信する仕組み入っているようなのでその弊害でしょうか、対策が必要ですね
>>仮想ステレオミキサー(ステミキ)類は、Windows Core Audio APIs を使用しているようです
WASAPIですよね。自分も調べてはいるんですが、英語の資料しかなく苦労しています
というか仕組み自体が英語の資料なので本当に苦労しています・・・
もう物理的なステレオミキサーか、仮想ステレオミキサーを利用して逃げちゃおうかな~とか現実逃避したくなるくらい資料がない
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年9月26日(火) 21:28
by あたっしゅ
Discord で BGM が流れてました。検索したところ、
http://guleruungamememo.blog.jp/archives/1309717.html
Discordに音楽を流してくれるBotを作りたい(高音質) - ぐれんのゲームメモ(ja)
なんらかの方法があるようです。
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年10月03日(火) 16:05
by swat
ミキサー
WAV →┏┓
マイク→┃┃ →デバイス→スカイプ
CD → ┃┃
┗┛
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2017年12月26日(火) 20:38
by あたっしゅ
「無音部をカットして負担を減らした Discord だと、その方法では、うまくいかない」という話をしています。
Re: マイク入力にwaveファイルのデータを流す方法 (windows)
Posted: 2018年5月15日(火) 19:38
by あたっしゅ
Discord 2018(H30)-05-14 の update で、
>音声ファイルがDiscordから直接再生できるようになった。 これできみが作ったいい感じのミックステープをみんなにすぐに聞かせることができるね。
音楽著作権料金の処理等は、不明。
あと、
>もしきみがYouTuberなどの動画配信者で、しかもDiscordを愛しているなら、Discord Partner Programに応募してみてね。最低でも16%はモテ度が上がるらしい。
https://discordapp.com/partners
英文なので、よくわからず。