none
音データの取り込みについて RRS feed

  • 質問

  • 現在音域をチューニングするプログラムを作成しています。

    音を取り込んで音のHz数を知りたいのですが、

    マイクから音を取り込む際に公開されているAPI関数などありますでしょうか?

    環境は以下です。

    使用言語:C    開発環境:Visual Studio Express 2013 

    マイク端子:ライン

    よろしくお願い致します。

    2015年1月19日 12:49

すべての返信

  • もちろん答えることは可能ですが、その前に確認ですが、Windowsに付属するサウンドレコーダーで録音し、そのファイルを読み込むのではダメですか?
    2015年1月19日 13:04
  • 解析目的の場合でかつ静的で十分な場合は、佐祐理さんの発言にあるとおり、
    既にファイルに録音済みのデータを対象にした方がよいでしょう。

    さて、リアルタイム分析&計測が目的の場合は

    1.DirectSoundを利用する
     XDSPというFFT機能もある。

    2.Win32APIのwaveInを使用する。
     FFTは自身で実装しなければならないが、
     大昔からある機能なので実装例が見つかりやすい。

    などの方法が考えられます。
    Windowsには歴史的経緯により、さまざまなレベルの
    オーディオに関するAPI群がありますが、
    本ケースの場合は、Low-level APIを使用するのが吉だと思われます。

    2015年1月20日 4:36
  • 私がプログラムでの実装方法を紹介しなかったのはいろいろな事情を考慮したためでした。しかしその部分を説明せずに挙げられてしまったので補足します。

    方法は4種類あります。

    1. Core Audio APIのIAudioCaptureClient(仲澤さんのLow-level API)
    2. Windows MultimediaのwaveIn(仲澤さんの2.)
    3. DirectSound(仲澤さんの1.)
    4. Media Foundation

    私が1つも挙げなかったのは全て問題があるからです。質問文には「使用言語:C」とあります。敢えてこういう記述をする方はC++言語を対象にしていないと思われます。しかし、ここに挙げた1. 3. 4.はCOMインターフェースを採用しており基本的にはC++言語から扱うことになります。もちろんCOMそのものはC言語からも呼び出せるように設計されていますが、それを扱うためにはC++言語に関する深い知識(vtblとか)が必要になります。ですので、1. 3. 4.は回答としてお勧めしづらいです。

    また2. Windows MultimediaはC言語ですが、Windows 3.0辺りから続く20年以上も前のインターフェースであり、Windows Vistaからは1. Core Audio APIに置き換えられました。そのため現在新規に使用することは推奨されていません。

    2015年1月20日 5:35
  • なるほどです。配慮に欠けた発言で申し訳ありません。
    ご発言の内容を考慮すると、

     1.C言語のみ使用

    の条件をつけると、現在のOSの推奨範囲では
    いずれの実装方法においても、非推奨または困難が伴うという判断ですね。

    2015年1月20日 6:08
  • ありがとうございます。

    できるならリアルタイム分析がいいです。

    FFTも調べながらやってますが実装されているものもあるのですね。

    挙げられた方法で調べてみます。

    2015年1月20日 15:21
  • ありがとうございます。

    すみませんこちらの配慮が足りませんでした。

    C++も対象としています。

    C言語そのものでも考えていましたが、やはり実現性は少ないのですね。

    聞いたことのないものもありましたので、それらに関しても調べてみたいと思います。

    参考になりました。

    2015年1月20日 15:24