none
音声録音再生処理をなるべく簡単な方法で実装したい

    質問

  • 半年前に同じような内容を上げてたのですが、その時の依頼が再浮上したので、
    少し質問を絞って再登録しました。

    開発環境は VisualStudio2010/2013で、MFCを中心に使っております。


    waveOut系を少し調べているのですが、もう少しシンプルなAPIが無いか と思ってご質問を上げました。


    必要な機能
     1. マイクからの音を録音してファイルに保存 (.wav フォーマツトは検討中)
     2. 保存された音声ファイルを再生/停止。 ファイルの途中から開始位置の指定して再生する場合がある
     3. 再生は複数のファイル(最大5ファイル)を同時に行う場合がある。

     4. 頭出し、巻き戻し、早送り、再生音量の調整がある。


    iOS/AndroidのAPIだと、音声ファイルの構成など意識しないで、
    録音/ファイル書き出し/再生/再生位置指定/停止 など殆ど1関数で出来ますので
    できれば、wavファイルの構造など細かく理解しなくても簡単に使えるAPIがあればベストです。

    いまのところ外部ライブラリやDirectSoundを使う事は考えていません。

    みなさんよろしくお願い致します。

    2018年5月19日 7:02

回答

  • 質問をするときは最低限のマナーとして、実行環境(ターゲット環境)に関する情報を記載するようにしてください。

    WinMMのうち、Wave系APIよりも上位レベルに位置するMCI (Media Control Interface) を利用する方法もあります。MCIについては自分で調べてください。

    なおDirectSoundはレガシーAPIであり、Vista以降では後継のXAudio2/WASAPIとMedia Foundationが推奨されます。いずれもCOMベースの下位レベルAPIであり、機能は豊富ですがWinMMより難易度は高くなります。

    Vista以降のCore Audio基盤と旧APIとの関係は以下となっています。

    楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要 – Windows Multimedia Hacks

    About the Windows Core Audio APIs (Windows)

    Windows 8以降に実装されているWindows Runtime (WinRT) には、上位レベルAPIであるWindows.Media.Captureが存在します。MediaCaptureクラスを使うことで録音/録画を行なうことができますが、Windows 7以前では利用できません。Windows 8以降であればストアアプリだけでなくデスクトップアプリからもWinRTのクラスライブラリを利用することができます。再生にはWindows.UI.Xaml.Controls.MediaElementクラスを使いますが、XAMLベースアプリのUIスレッドからでないと生成・操作できません。Windows 10以降であればオフスクリーンオブジェクトのWindows.Media.Playback.MediaPlayerクラスも用意されています。

    WinMMはWindows 3.x時代に生まれた古いAPIであり、現在は互換性維持のために一応残っているというレベルです。今後の機能拡充が期待できるのはUWPアプリ開発に使われるWinRTやDirectXなど一部のコンポーネントのみとなります。

    2018年5月19日 15:17

すべての返信

  • 質問をするときは最低限のマナーとして、実行環境(ターゲット環境)に関する情報を記載するようにしてください。

    WinMMのうち、Wave系APIよりも上位レベルに位置するMCI (Media Control Interface) を利用する方法もあります。MCIについては自分で調べてください。

    なおDirectSoundはレガシーAPIであり、Vista以降では後継のXAudio2/WASAPIとMedia Foundationが推奨されます。いずれもCOMベースの下位レベルAPIであり、機能は豊富ですがWinMMより難易度は高くなります。

    Vista以降のCore Audio基盤と旧APIとの関係は以下となっています。

    楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要 – Windows Multimedia Hacks

    About the Windows Core Audio APIs (Windows)

    Windows 8以降に実装されているWindows Runtime (WinRT) には、上位レベルAPIであるWindows.Media.Captureが存在します。MediaCaptureクラスを使うことで録音/録画を行なうことができますが、Windows 7以前では利用できません。Windows 8以降であればストアアプリだけでなくデスクトップアプリからもWinRTのクラスライブラリを利用することができます。再生にはWindows.UI.Xaml.Controls.MediaElementクラスを使いますが、XAMLベースアプリのUIスレッドからでないと生成・操作できません。Windows 10以降であればオフスクリーンオブジェクトのWindows.Media.Playback.MediaPlayerクラスも用意されています。

    WinMMはWindows 3.x時代に生まれた古いAPIであり、現在は互換性維持のために一応残っているというレベルです。今後の機能拡充が期待できるのはUWPアプリ開発に使われるWinRTやDirectXなど一部のコンポーネントのみとなります。

    2018年5月19日 15:17
  • ご回答ありがとうございます。

    ターゲットのOSは Windows7~ となります。

    mciだと STOP/PAUSEがデバイスによって挙動が変わる問題があるようですが、APIとしてはシンプルで使いやすいので、要件にあうかどうか調査します。


    2018年5月20日 1:29