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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
だんごさん
記事: 273
登録日時: 13年前

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

#1

投稿記事 by だんごさん » 11年前

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

windows7
VC++2010
C言語
 Dango San

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 11年前

たぶん、仮想ドライバを作らないと出来ないかもしれません。
PC出力の音を録音するソフトやステレオミキサーのソフトなどもドライバですので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 13年前

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

#3

投稿記事 by だんごさん » 11年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 11年前

まぁ、ドライバは難しいと思うので無理して挑戦することはないです。
WDFと言うフレームワークは楽になっているらしいですが、ドライバ自体を私はやったことがありません。

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

デバッグ途中ではブルースクリーンとか色々危険な目に合うと思うので、仮想PC上でドライバのデバッグをやるべきかと思う次第です。
サウンド系の仮想ドライバがユーザーモードで動くなら、この危険はありませんがサウンドドライバを書いたことがないのでこれまた不明です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Cir
記事: 32
登録日時: 14年前
住所: 近畿地方

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

#5

投稿記事 by Cir » 11年前

windows7なら,録音デバイスのステレオミキサーを有効にしてから,
waveIn系のAPIを使えばそれっぽいことができるかもしれないです.

だんごさん
記事: 273
登録日時: 13年前

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

#6

投稿記事 by だんごさん » 11年前

wavein系のAPIでPCMのデータを受け取ることまではできました。
しかし、そのPCMのデータのどこの部分が波形として表示させるべき場所でしょうか?
データはchar型ですが数値として取る場所がわかりません
今は携帯の投稿なので詳しく書けませんが、どうぞよろしくお願いします
 Dango San

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#7

投稿記事 by softya(ソフト屋) » 11年前

waveInは使ったことが無いですが、ただのPCMなのでベタでバッファに格納されているはずです。
ステレオかモノラルか、8bitか16bitかはwaveInOpenの時にご自身で指定されているはずですが。
※ char型のバッファからwaveInOpenのパラメータに応じて自分で1バイトづつとりだしてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 13年前

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

#8

投稿記事 by だんごさん » 11年前

1バイトずつ取ってみると、きちんと整数が入っていました。
無事に取得することができました。
ありがとうございました。
 Dango San

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#9

投稿記事 by softya(ソフト屋) » 11年前

PCMが16bitの場合は1バイトづつじゃなく、shortにキャストした方が良いんですが大丈夫ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 13年前

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

#10

投稿記事 by だんごさん » 11年前

はい、8ビットに設定してるので大丈夫です
 Dango San

閉鎖

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