ページ 11

C・C++ 音声データの情報を出力したい です

Posted: 2013年1月02日(水) 03:20
by ウォルトル
はじめましてウォルトルです。名前に意味はありません。
 件名が非常に曖昧ですいません。言語はC・C++と書きましたがアプリケーションは最終的にWindowsPC,Android,iOSで動くものにします。最初はWindowsOSで動くものを完成させてから携帯端末へ攻めて行こうと思っています。

 本題に入ります。私がやらんとしていることは
音声ファイル(WAVE等)を読み込み→再生し→リアルタイムで→再生中の振り幅(数値)や波形を出力、です。
わかりにくいですね。フリーソフトのaudacityのスクリーンショットを見てください。
http://audacity.sourceforge.net/about/screenshots
ギザギザして振り幅や波形が見えていますがこれを数値化したいということです。
例えばシンバルだったら振り幅は高く波形は短めですよね。でも何Hzくらいなんだろうとか気にな りはしないんですが、振り幅はこのくらいで波形がこのパターンのときはシンバルっぽくて。。。。。。と言うのがアプリケーションに必要なのです。

 肝心になってくるのがやはり振り幅と波形ですのでそれらを音声ファイルから読み取りたいわけですが、音声ファイルを再生することはできても
もっと詳しい波形データなどへのアクセスのやり方がわかりません。参考に以下のサイトを見さして頂きましたが、見さして頂いたサイトのやり方が自分の目指しているものなのかもよくわかりません。
http://hooktail.org/computer/index.php? ... 4%DF%A4%EB
http://www.kk.iij4u.or.jp/~kondo/wave/
http://marupeke296.com/DS_No2_GetSoundDataFromWav.html

 私の理解力が足りないこともありこれからも音声ファイル等の知識を深めてゆきますが、何かやり方があるよとかこうすればできない?とかこのサイト見ろとか意見をくださると非常に助かります。新年早々ですがよろしくお願いします。

//---------------------------------------
開発環境 Windows7 64bit。ViusalStudio2010.

httpのttp省略が面倒なだけなので修正させてもらいました。 by softya(ソフト屋)

Re: C・C++ 音声データの情報を出力したい です

Posted: 2013年1月02日(水) 09:18
by beatle
基本的に、デジタルな音データは数値化された振幅データが時系列に並んでいます。
ファイルフォーマット(wave, MP3など)によっては、ファイル容量を減らすために圧縮技術を用いるものもありますが、
音として再生する段階では必ず振幅データを時系列に並べた形式に直されます。

例えば、時刻 0, T, 2T, 3T, ... に対応する振幅は 0, 100, 0, 100, ... である、というようになっています。
ここで、Tはサンプリング周期の意味です(サンプリング周波数として44.1KHz、16KHzなどが有名)。

各種オーディオフォーマット用のデコーダと呼ばれるソフトウェアがあります。
音楽を再生するソフトウェアはデコーダを搭載しているので、オーディオファイルから振幅列を復元して再生できるわけです。
自分で波形データを扱いたい場合は、扱いたいファイルフォーマットに対応したデコーダ(MP3デコーダなど)を用意して、それをプログラムから使用すればいいのですね。

Re: C・C++ 音声データの情報を出力したい です

Posted: 2013年1月02日(水) 11:11
by softya(ソフト屋)
無圧縮waveに関しては、リニアPCMされたデータがそのまま入っていますので、参考リンクされたページに問題の波形を扱う全ての情報が書かれています。

「パルス符号変調 - Wikipedia」
http://ja.wikipedia.org/wiki/%E3%83%91% ... 9%E8%AA%BF

参考リンクのページの内容が理解できないのなら、C言語の理解不足かバイナリファイルの取り扱い経験がないということになりますが、どちらでしょうか?

> 振り幅はこのくらいで波形がこのパターンのときはシンバルっぽくて

ちなみに波形からシンバルを自動判定するのは非常に難しい技術です。
とくにこのパターンってのがクセモノです。

[補足]
まぁ、よく卒業論文や研究論文に取り上げられたりするのでPDFになどを検索することが出来ます。どの方法も一長一短あるようです。
「楽器音認識 - Google 検索」
https://www.google.co.jp/search?num=100 ... JtuBUMEqAA

Re: C・C++ 音声データの情報を出力したい です

Posted: 2013年1月02日(水) 16:12
by ウォルトル
こんにちは。
>>Beatleさん
はい音声ファイルって大抵どの形式でも波形情報があるわけですよね。将来的にはオーソドックスな形式すべて対応したものにしようと思っています。
>>softyaさん
C言語の勉強不足もありますがバイナリファイルというかファイルの取り扱いは完璧に初心者ですすいません。しかし見さして頂いたサイトを理解できればやらんとしてる事ができると聞いて一安心しました。わからないところを淡々と調べて体で覚えていくようにしたいと思います。
シンバルはひとつの例で・・・さすがに波形と振り幅でどの楽器かを識別するのは相当難しいというのはわかります。。精度は日が進むにつれ向上させていければと思っています。PDFは面白そうなので後で読んでみます笑

お二方ありがとうございます。とりあえずはサイトの内容を把握できるようにしていきたいと思います