ページ 11

PC内の音をプログラムで取得する方法

Posted: 2014年1月26日(日) 18:39
by だんごさん
PC内で鳴っているあらゆる音のレベル?を取得したいのですが、いい方法が見つかりません。
音量ミキサーを開いたときのスピーカーの欄に、音量を変更するバーがありますよね。そのバーの中に音のレベルに合わせて上下する灰色と緑のものがありますが、その値を取得したいです。
音のレベルと言っていいのかわかないので検索しようもなく、調べても現在のマスター音量を取得するものくらいしか見つかりません。
何か方法はありますでしょうか?

windows7
VC++2010
C言語

Re: PC内の音をプログラムで取得する方法

Posted: 2014年1月26日(日) 18:52
by softya(ソフト屋)
たぶん、仮想ドライバを作らないと出来ないかもしれません。
PC出力の音を録音するソフトやステレオミキサーのソフトなどもドライバですので。

Re: PC内の音をプログラムで取得する方法

Posted: 2014年1月26日(日) 21:44
by だんごさん
softya(ソフト屋) さんが書きました:たぶん、仮想ドライバを作らないと出来ないかもしれません。
そうですか…。
どうやらwindowsのドライバ開発キットはVCの有償版にしか対応していないようで、お金のない私にはドライバの開発が行えないようです。
他の方法があるのかもしれませんが、そこまでして作りたいわけでは無いのであきらめます。

Re: PC内の音をプログラムで取得する方法

Posted: 2014年1月26日(日) 21:58
by softya(ソフト屋)
まぁ、ドライバは難しいと思うので無理して挑戦することはないです。
WDFと言うフレームワークは楽になっているらしいですが、ドライバ自体を私はやったことがありません。

とりあえず、やってみたい人向けに情報だけ載せておきます。一応無料出来るはずです。
「Windowsデバイスドライバ開発入門 - 人とか機械とか」
http://seashowwww.hatenablog.jp/entry/2 ... 1268399521

デバッグ途中ではブルースクリーンとか色々危険な目に合うと思うので、仮想PC上でドライバのデバッグをやるべきかと思う次第です。
サウンド系の仮想ドライバがユーザーモードで動くなら、この危険はありませんがサウンドドライバを書いたことがないのでこれまた不明です。

Re: PC内の音をプログラムで取得する方法

Posted: 2014年1月27日(月) 17:35
by Cir
windows7なら,録音デバイスのステレオミキサーを有効にしてから,
waveIn系のAPIを使えばそれっぽいことができるかもしれないです.

Re: PC内の音をプログラムで取得する方法

Posted: 2014年2月01日(土) 14:12
by だんごさん
wavein系のAPIでPCMのデータを受け取ることまではできました。
しかし、そのPCMのデータのどこの部分が波形として表示させるべき場所でしょうか?
データはchar型ですが数値として取る場所がわかりません
今は携帯の投稿なので詳しく書けませんが、どうぞよろしくお願いします

Re: PC内の音をプログラムで取得する方法

Posted: 2014年2月01日(土) 15:21
by softya(ソフト屋)
waveInは使ったことが無いですが、ただのPCMなのでベタでバッファに格納されているはずです。
ステレオかモノラルか、8bitか16bitかはwaveInOpenの時にご自身で指定されているはずですが。
※ char型のバッファからwaveInOpenのパラメータに応じて自分で1バイトづつとりだしてください。

Re: PC内の音をプログラムで取得する方法

Posted: 2014年2月01日(土) 22:21
by だんごさん
1バイトずつ取ってみると、きちんと整数が入っていました。
無事に取得することができました。
ありがとうございました。

Re: PC内の音をプログラムで取得する方法

Posted: 2014年2月01日(土) 22:26
by softya(ソフト屋)
PCMが16bitの場合は1バイトづつじゃなく、shortにキャストした方が良いんですが大丈夫ですか?

Re: PC内の音をプログラムで取得する方法

Posted: 2014年2月02日(日) 12:24
by だんごさん
はい、8ビットに設定してるので大丈夫です