• 締切済み

音量のプログラミング

現在waveIn()関数を使って音声を取得するプログラムを作っています。このプログラムにある一定の音量以上でメッセージを出し、それ以下なら別のメッセージを出すというのをリアルタイムで実行したいのですが、どんな関数を使えばいいのかで戸惑っています。 何かいいものがあれば教えてください。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

リアルタイムってのも厳しいんじゃないですかねぇ……。 waveInOpen()でコールバックを指定して、WIM_DATAメッセージで通知されたデータブロックの内容を解析して…ということになるかと……。 「waveIn リアルタイム 波形」辺りで検索することになりますかねぇ。 # 軽く探した限りじゃなぜかVBばかり… WAVEFORMATEX構造体で指定した情報により、1サンプリングデータのビット数とかは判っているでしょうし。 なるべくリアルタイムに処理しようとしてWAVEHDR構造体でサイズを小さく設定した場合は…取りこぼしとか発生しませんかねぇ。 まぁ試したことはないのですが…。

bach663877
質問者

お礼

ご回答ありがとうございます。 そうなんです。検索はいろいろ試みているのですが、VBであったりとなかなか望むものまでたどり着けない場合がおおくて。 もう少し別な角度から追求してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そんな関数は用意されていないと思う. そもそも何をもって「音量」とするのか書かれていないわけだし. 手を抜くなら RMS なり分散なりを使う... かなぁ?

bach663877
質問者

お礼

やはりそうですか。 まず音量以外の方法でもいいので音を認識したかどうか区別できる手段はないものでしょうか。 アドバイスおねがいします。

関連するQ&A

  • マイク入力の音量を取得する方法

    現在VisualC++2010でプログラムを組んでいます。 マイクから入ってきた音の音量を具体的な数値などでリアルタイムに取得したいのですが、そのようなことができる関数、もしくは手法などないでしょうか。 説明不足な点などあれば指摘してください。 よろしくお願いします。

  • 音量認識が可能なソフトウェアはありませんでしょうか?

    音量認識が可能なソフトウェアはありませんでしょうか? (音声の認識ではなくて、声量の認識が出来るもの) ・使いたいと思っている事  ・PC 上でリアルタイムに音量を認識できるもの  ・音量が認識されたものがテキストなり何かの形でリアルタイムで保存されるもの  ※ 出来るだけ安くて、可能に出来るもの  例)大声でマイクに叫んだ時に、声の大きさをデータ(テキスト)として取得された 色々調べてみたのですが、リアルタイム性とデータ取得の2つを付けたものが 見つかりませんでした。 ソフトウェアだけでは無理なら、ハードウェアを加えて考えても構いません。 よろしくお願いします。

  • waveIn、waveOut系プログラミングについて

    立て続けに投稿させて頂いております。 【要点】 メッセージ処理のタイミングについて。  現在win32APIを用いた録音再生をするプログラムを作成中です。最終目的はPCが音声をスピーカーから出力し、それを再度PCに録音するというものです。  waveIn系、waveOut系の関数を用いたプログラムについて様々なホームページを参考にさせて 頂いたのですがホームページごとに関数とメッセージの関係が異なっていた為、挙動をしっかりと 理解する為教えて頂きたいです。  例えば最初にGUI上の録音ボタンを押したときに waveInOpen→waveInPrepare→waveInAddBuffer→waveInStart と行っているのですが 私の認識ではwaveInPrepareはMM_WIM_OPENメッセージを受け取ってから行うものだと考えていたのですが あるホームページではMM_WIM_OPENに対する処理が記述されていない、つまりcase MM_WIM_OPENがないサンプルソース もあり、メッセージを処理するタイミングがわからなくなってしまいました。 1: waveInOpenによりMM_WIM_OPENが発行されるとしたら発行されたかわからないタイミングでwaveInPrepareはやるべきでないと思ったのです。 2: その他waveInAddはどのタイミングで行うのか、等もアドバイスいただけると助かります。 3: 私が見た限りのソースでは録音ボタンを押すとWAVEHDR、HWAVEINを行っているのですが などの準備を行っているのですが、録音前に準備しておけばタイムラグがないのに、、と考えるのですが何か意図が あるのでしょうか。 4:MMSYSERR_~というエラーをwave系関数は出すようなのですがそれについて調べたいのですがMSDN等で調べられるのでしょうか(私が調べた限りなさそうでした) 質問が多くて申し訳ないのですが極力自分で調べたので よろしくお願いいたします。具体的な回答でなくとも 調べるヒントなどいただければ幸いです。

  • 動画と音声の処理に強いプログラミング言語は何でしょうか?

    動画と音声の処理に強いプログラミング言語は何でしょうか? カメラとマイクを使った人工知能を持つプログラムを遊び半分で作ってみたいと思っているのですが、どのプログラミング言語で作るかまだ決めていません。 調べたところ、JavaにはJava Media Frameworkなどがありよさそうなのですが、CやC++などにも同じようなものがあるのでしょうか。また他の言語でもっと優れているものはあるでしょうか? プログラミング言語に限らず、音声ファイルをバイナリとして読み込めばいいかもしれませんが、音量や周波数などを取得するために自分でコードを書くのはちょっとつらいのでそれらをしてくれるライブラリがある言語を探しています。また、音声や動画をリアルタイムで処理したいので、それも可能なものがあったら教えて欲しいです。よろしくお願いします。

  • プログラミング分からないので教えてください

    【演習1】 コマンド引数で台形の上底、下底、及び高さを指定して実行すると、台形の面積を算出し表示するプログラムを作成せよ。ただし、以下の条件を満たすこと。 条件: (1)コマンド引数が不足していた場合は<実行例(2)>のようにエラーメッセージを表示する。 (2)上底、下底、高さ、及び面積は実数値として処理する。 (3)台形の上底、下底、及び高さを引数として受け取って面積を算出するユーザー関数を作成し使用する。 (4)面積の表示はmain関数で行い、<実行例(1)>のように表示する。 そのとき、上底、下底、高さは小数点以下2桁、面積は小数点以下3桁で表示する。 <実行例(1)> Z:\>ee1001 3.5 4.2 8.37↓ 上底3.50,下底4.20,高さ8.37の台形の面積は32.224 <実行例(2)> Z:\>ee1001 3.5 4.2↓ 引数が足りません。 【演習2】 点数を3つキー入力すると、3つの点数の合計点と平均点を表示するプログラムを作成せよ。ただし、以下の条件を満たすこと。 条件: (1)点数は整数で入力する。。 (2)入力された3つの点数のうち1つでも0未満だった場合は、<実行例(3)>のようにエラーメッセージを表示する。 (3)3つの点数を受け取って、3つの点数の合計点と平均点を算出するユーザー関数を作成し使用する。また、合計点は整数、平均点は実数で算出する。 (4)合計点と平均点の表示はmain関数で行い、<実行例(1)(2)>のように表示する。 そのとき、合計点は全4桁、平均点は全6桁小数点以下1桁で表示する。 <実行例(1)> 点数: 80↓ 点数: 65↓ 点数: 98↓ 合計点 243 平均点 81.0 <例実行(2)> 点数: 80↓ 点数: -1↓ 点数: 98↓ 点数は0以上で入力してください よろしくお願いします

  • マイク入力にリアルタイムでフィルタするフリーソフト

    マイクからの入力音声に、高音のノイズが混じってしまって困っています。 また、できればキーボード入力などの音も拾いたくありません。 音声ファイルに対してノイズキャンセルをしたり、 一定音量以下の音を除去したりといったフィルタリングをするフリーソフトは沢山見つかりましたが、 マイクからの入力音声をリアルタイムでフィルタリングするフリーソフトはあるのでしょうか。 できれば、ノイズキャンセルよりは、一定音量以下の音を除去するものの方が望ましいです。 よろしくお願いします。

  • 【C言語プログラミング】 time()関数について

    現在の時刻を表示させるプログラムをC言語で作成したいのですが、 書籍などを参考に以下のコーディングを行いました。 #include <stdio.h> #include <time.h> int main(void) { time_t timer; /* 現在の時刻を取得する */ timer = time(&timer); /* 現在の時刻を出力する */ printf("現在の時刻: "); printf("%s", ctime(&timer)); printf("です。\n"); return 0; } 質問内容は以下の通りです。 (1)「time_t timer;」とは、time_t型の変数timerを宣言し、   この変数にはtime()関数で取得した現在時刻の値が入る? (2)「timer = time(&timer);」に関して、time()関数で取得した値   を変数timerが指すアドレスの場所に入れる? その場合、   返り値を格納する変数timerに、time()関数の引数と同じtimerが   指定されているのはなぜ? (3)プログラムを実行すると以下の結果となる。(time.exeを実行)   C:\>time   現在の時刻: 12:52:07.61   新しい時刻を入力してください:   現在の時刻を表示した直後に「新しい時刻を入力して下さい」が   表示される。これはtime()関数の仕様どおり? 以上です。初歩的な質問で申し訳ございませんが、ご回答よろしく お願いいたします。

  • 音量調整ソフト

    mp3の音量を一定化させたいのですがうまくいきません mp3gainというソフトを使っているのですがエラーがでてしまいます 理由として考えられるのは音声ファイルが短すぎる可能性があります 扱っているmp3ファイルは語学単語の短めのものです 他のソフトですと 現在値から+-なんぼかするというソフトで 元の音量がばらばらだと一定になりません mp3gainのように特定の値にするソフトではありません なにか良いソフトがありませんでしょうか? ネットサイト上でできるものも探しましたが 多分1万ファイルくらいあるので日が暮れてしまいます

  • Audacityでの音量調整(マキシマイズ?)

    現在、Podcastingをやっております。 使用しているソフトはAudacity. アナログミキサーにて、2人のトークの声をパソコンに取り込み、編集して公開しています。 ただ、声の大きい部分と小さい部分があり、BGMを混ぜると小さい部分の声が聞こえなくなってしまいます。 知り合いに聞いたところ、Audacityはわからないが、マキシマイズ・ノーマライズという機能を使えば、音量を一定化することが可能と言われました。 この音量を一定化することを、Audacityで実行することは可能でしょうか? また、やり方はどのようにすればよろしいのでしょうか。 よろしくおねがいします。

  • マイクからの入力で呼吸音等を取り除きたい

    マイクがキーボードの音や呼吸音を拾ってしまうのが気になるので、 入力が一定音量を超えないと拾わないようにしたいです。 リアルタイムでそのようなフィルタリングができるフリーソフトはあるでしょうか。 録音した音声ファイルに対してではなく、リアルタイムに直接できるものでお願いします。

専門家に質問してみよう