はじめましてウォルトルです。名前に意味はありません。
件名が非常に曖昧ですいません。言語は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(ソフト屋)
C・C++ 音声データの情報を出力したい です
Re: C・C++ 音声データの情報を出力したい です
基本的に、デジタルな音データは数値化された振幅データが時系列に並んでいます。
ファイルフォーマット(wave, MP3など)によっては、ファイル容量を減らすために圧縮技術を用いるものもありますが、
音として再生する段階では必ず振幅データを時系列に並べた形式に直されます。
例えば、時刻 0, T, 2T, 3T, ... に対応する振幅は 0, 100, 0, 100, ... である、というようになっています。
ここで、Tはサンプリング周期の意味です(サンプリング周波数として44.1KHz、16KHzなどが有名)。
各種オーディオフォーマット用のデコーダと呼ばれるソフトウェアがあります。
音楽を再生するソフトウェアはデコーダを搭載しているので、オーディオファイルから振幅列を復元して再生できるわけです。
自分で波形データを扱いたい場合は、扱いたいファイルフォーマットに対応したデコーダ(MP3デコーダなど)を用意して、それをプログラムから使用すればいいのですね。
ファイルフォーマット(wave, MP3など)によっては、ファイル容量を減らすために圧縮技術を用いるものもありますが、
音として再生する段階では必ず振幅データを時系列に並べた形式に直されます。
例えば、時刻 0, T, 2T, 3T, ... に対応する振幅は 0, 100, 0, 100, ... である、というようになっています。
ここで、Tはサンプリング周期の意味です(サンプリング周波数として44.1KHz、16KHzなどが有名)。
各種オーディオフォーマット用のデコーダと呼ばれるソフトウェアがあります。
音楽を再生するソフトウェアはデコーダを搭載しているので、オーディオファイルから振幅列を復元して再生できるわけです。
自分で波形データを扱いたい場合は、扱いたいファイルフォーマットに対応したデコーダ(MP3デコーダなど)を用意して、それをプログラムから使用すればいいのですね。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: C・C++ 音声データの情報を出力したい です
無圧縮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
「パルス符号変調 - 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
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C・C++ 音声データの情報を出力したい です
こんにちは。
>>Beatleさん
はい音声ファイルって大抵どの形式でも波形情報があるわけですよね。将来的にはオーソドックスな形式すべて対応したものにしようと思っています。
>>softyaさん
C言語の勉強不足もありますがバイナリファイルというかファイルの取り扱いは完璧に初心者ですすいません。しかし見さして頂いたサイトを理解できればやらんとしてる事ができると聞いて一安心しました。わからないところを淡々と調べて体で覚えていくようにしたいと思います。
シンバルはひとつの例で・・・さすがに波形と振り幅でどの楽器かを識別するのは相当難しいというのはわかります。。精度は日が進むにつれ向上させていければと思っています。PDFは面白そうなので後で読んでみます笑
お二方ありがとうございます。とりあえずはサイトの内容を把握できるようにしていきたいと思います
>>Beatleさん
はい音声ファイルって大抵どの形式でも波形情報があるわけですよね。将来的にはオーソドックスな形式すべて対応したものにしようと思っています。
>>softyaさん
C言語の勉強不足もありますがバイナリファイルというかファイルの取り扱いは完璧に初心者ですすいません。しかし見さして頂いたサイトを理解できればやらんとしてる事ができると聞いて一安心しました。わからないところを淡々と調べて体で覚えていくようにしたいと思います。
シンバルはひとつの例で・・・さすがに波形と振り幅でどの楽器かを識別するのは相当難しいというのはわかります。。精度は日が進むにつれ向上させていければと思っています。PDFは面白そうなので後で読んでみます笑
お二方ありがとうございます。とりあえずはサイトの内容を把握できるようにしていきたいと思います