【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

質問させていただきます。

大学の課題で、ある楽器の入力音声を録音し、ドレミの音階を判定するプログラムを作ることになりました。

プログラムの流れとしては、
入力音声 → フーリエ変換 → 周波数特性により識別
という流れになると思います。

そこで、まず入力音声を録音するソフトを探しています。
音声波形を数値としてのデータを取りたいのです。
録音した音声ファイルを、テキストエディタで見たとき
0.00000
13.0034
268.344



のように数値化したファイルを作りたいです。

MATLABの場合、その機能があるようですが、
家で作れる範囲で作成したいです。
何かいいソフトはないでしょうか??

Windows、Linux(家はUbuntu)どちらで構いません。

よろしくおねがいします。 

このQ&Aに関連する最新のQ&A

A 回答 (2件)

たんに波形をテキスト化するであれば


WAVファイルは、WAVヘッダ+べたPCMです。

これのバイナリになっている値をテキストの文字列であれば
( CSV変換などしたいのであれば )
WAVヘッダの部分を読み込んで(mono/2ch, big/little)を意識して
取り出していった値をテキスト化、文字列化すればいいです。

----

それはさておき、録音自体は必須です。
ライン入力やマイク入力経由で録音するソフトであれば
Audacity というソフトを提案します。 (Windows and Linux)
ちなみに $ sudo apt-get install audacity です。

いじっていればわかりますが
単に情報の可視化(波形として)であれば、ファイルを読み込んだり
録音したりすれば、デフォルトで波形表示してくれます。

解析-スペクトル表示すると、おそらくお望みの「グラフ表示」が可能です。
それを書き出しで、spectrum.txtに保存したもの例です。

周波数 (Hz) レベル (dB)
86.132812 -32.616058
172.265625 -28.212019
258.398438 -25.235647
・・・省略・・・
21877.734375 -95.532463
21963.867188 -95.540146

おそらく何かをCSVテキスト化して、Calc/Excelなどの表計算ソフトで
(記録として)グラフ表示したいのだと思うのですが、そのへんですよね?

--
ある楽器の入力音声=MIDIである場合は
Audacity というよりMIDIソフトで対応した方が柔軟です。

--
フーリエ変換あたりの学習でしたら
mp3なんかであればフォーマットが……それ自体勉強内容みたいなものです。
エンコーダ/デコーダのソフトの類としてフォーマットチェック機能が
付いたものがあります。

その中には「フレーム単位でばらした状態」程度のモノの連続データを
可視化してグラフ表示するソフトもありますよ。
# glame , mp3splt  , mp3check , mp3gain のどれかだったような気がします。
# 今ちょっと時間がないので詳細確認はご容赦。

--
周波数特性というのが、オーディオの性能測定なんかの類でしたら (DA , AD)
・周波数ジェネレータなどでのこぎり波などを生成しファイルに保存
・ファイルを再生して、サウンドカードでライン出力する
・出力したモノを折り返しのループバック接続で、アナログのライン入力経由で録音・計測する
http://park21.wakwak.com/~eyp/jk1eyp/amp/measure …

--
ある楽器の入力音声がケーブル品質のような「音は魔物」の
ピュア系に近い世界であれば、
奥津電工の「AirCable比較試聴プロジェクト」などが
入門になるかもしれません。
http://www.okutsu.co.jp/download/index.html

脱線しすぎました。
「音声波形のサンプルの取り方」の回答画像2
    • good
    • 0

Linux は知らないので Windows だけ:


その数値の意味が分からないのですが,
・WAVE で録音できる適当な録音ソフトを調達する (Windows にサウンドレコーダーはあるけど機能がちょっと微妙)
・WAVE ファイルをそのように「数値化」するプログラムを作る
のが, コストが最もかからない方法かと.
あるいは, ウインドウプログラムが作れるコンパイラ (たとえば VisualStudio) があれば DirectX SDK のサンプルに「録音する」というのがあるので, そこにちょっと手を加えればできます.
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qwavファイルをcsvファイルに変換する。

wavファイルについて教えてください。

(1)wavファイルをcsvファイルに変換するフリーソフト等があれば紹介してください。

(2)wavファイルの詳細について紹介している書籍、ホームページ等あれば紹介してください。

以上

Aベストアンサー

こんにちは。

通常、wavファイルは1秒間の音声を44,100個のデータで表現します。
つまり、エクセルでは65,536行しか表現できないので1秒半程度しかグラフ化できません。
しかも時間軸の調整もしなければなりません。
そこまで親切なフリーウェアがあるとは思えません。
(あるかもしれませんけど。)

波形ソフトの画像を貼り付けた方が早いとは思いますが、
どうしてもやるのなら、下の二つくらいでしょうか。
・自分でつくる
・波形ソフトでrawデータ(生データ)で出力し、バイナリからテキスト形式に変換する。その後にcsv形式に変換する。

もし、自作されるのであれば、このソースが役に立つと思います。
http://oku.edu.mie-u.ac.jp/~okumura/dumpwave.c
wavから抜き出し、ヘッダ情報を削ってサンプル数を適当にまびいた後にそれぞれの値にカンマをつけてcsv形式で出力する、というところでしょうか。

wavデータのフォーマットに詳しいHPを挙げておきます。
ご参考になれば。

参考URL:http://www.kk.iij4u.or.jp/~kondo/wave/

こんにちは。

通常、wavファイルは1秒間の音声を44,100個のデータで表現します。
つまり、エクセルでは65,536行しか表現できないので1秒半程度しかグラフ化できません。
しかも時間軸の調整もしなければなりません。
そこまで親切なフリーウェアがあるとは思えません。
(あるかもしれませんけど。)

波形ソフトの画像を貼り付けた方が早いとは思いますが、
どうしてもやるのなら、下の二つくらいでしょうか。
・自分でつくる
・波形ソフトでrawデータ(生データ)で出力し、バイナリからテキスト形...続きを読む

Q音声の波形データ(振幅)から音量(dB)を取得したい

+1.0~-1.0の値を取る音声の波形データから音量を単位dBとして取得したいです。
どのようにすればいいのでしょうか?
また、もしこの条件がdBを得るのに十分でない条件なら必要な条件を教えてください。

Aベストアンサー

音声の波形データの +1.0~-1.0 というのはV単位の電圧のことですね?
電圧波形のデータから音圧(dB単位)を計算するには、マイクの感度とアンプの利得が分かっている必要があります。それが分かっていれば、電圧(の実効値)は以下のようになります。
   電圧(V) = 音圧(Pa)×マイク感度(V/Pa)×アンプ利得(倍)
マイク感度の V/Pa という単位は、1Paの音圧で1Vの出力電圧(実効値)が出るという意味です。音圧 0dB というのは20μPaのことなので
   音圧(Pa) = 2×10^(-6)×10^{音圧(dB)/20}
になります( 1Pa の音圧は 94dB )。したがって元の音量が dB 単位のときは次式で計算できます。
   電圧(V) = 2×10^(-6)×10^{音圧(dB)/20}×マイク感度(V/Pa)×アンプ利得(倍)
逆に電圧の実効値から音圧を計算するには
   音圧 (dB) = 20*log10[ 電圧(V)/{ 2×10^(-6)×マイク感度(V/Pa)×アンプ利得(倍)} ]
になります。 log10 は自然対数です。

マイクの感度はいろいろな表記法があります。例えば -52 dBV/Pa なら、0 dBV = 1V のことなので、マイク感度は
   -52 dBV/Pa = 10^(-52/20) V/Pa = 2.5×10^(-3) V/Pa
です。マイクの感度が単に -70dB と書いてある場合は 0dB = 1 V/Pa という意味なので、マイク感度は
   -70 dB = 10^(-70/20) V = 3.16×10^(-4) V/Pa
となります。

電圧波形から実効値の計算式は
   電圧(V) =√{ ( 1/N )*Σ[ n = 1, 2, ..., N ] V(n)^2 }
です。N はデータ数、V(n) は電圧データです。データの範囲は基本周波数の整数倍になるようにしてください(基本周波数が分からないときはなるべく大きく)。

音声の波形データの +1.0~-1.0 というのはV単位の電圧のことですね?
電圧波形のデータから音圧(dB単位)を計算するには、マイクの感度とアンプの利得が分かっている必要があります。それが分かっていれば、電圧(の実効値)は以下のようになります。
   電圧(V) = 音圧(Pa)×マイク感度(V/Pa)×アンプ利得(倍)
マイク感度の V/Pa という単位は、1Paの音圧で1Vの出力電圧(実効値)が出るという意味です。音圧 0dB というのは20μPaのことなので
   音圧(Pa) = 2×10^(-6)×10^{音圧(dB)/20}
になりま...続きを読む

Qwavファイルの音量を数値で調べたい(dB)

wav形式の音声ファイルがあります。
この音量を数値で知りたいのですが、デジベル表示するツールなどありませんでしょうか。
ご存知の方教えて下さい。
宜しくお願いします。

Aベストアンサー

どんなレベルで使うのかわからないので
ふたつ挙げておきます。

■WaveSpectra
設定のWaveタブでレベルメータを表示するにチェックを入れます。

<<WaveSpectra>>
 http://www.ne.jp/asahi/fa/efu/soft/ws/ws.html

■SpWave
厳密な値が必要なときは SpWave でマウスを置いた
座標の音圧 E が出るので

 dB = 20*log(|E|/E0)

を計算。
E0 はサンプリングビットが b であれば

 E0 = 2^(b-1)

とすれば 0dB をフルスケールに合わせることができます。

<<spwave>>
 http://www.itakura.nuee.nagoya-u.ac.jp/people/banno/spLibs/spwave/index-j.html

参考URL:http://www.ne.jp/asahi/fa/efu/soft/ws/ws.html

Qwav ファイルから音声を数値データとして取り出したい

C++ 言語(あるいは C 言語)を使って、
wav ファイルから音声データを数値データとして
取り出すには、どうしたらいいのでしょうか。

質問が漠然としていたら補足させていただきますので、
どうぞよろしくお願いいたします。

Aベストアンサー

WAVEファイルなどはバイナリファイルとして扱って下さい。

・stdio.h
テキストファイル fopen(filename, "r");
バイナリファイル fopen(filename, "rb");

・iostream
テキストファイル ifstream fin(filename);
バイナリファイル ifstream fin(filename, ios::binary);

Q「ご質問があります」「ご回答いたします」 この「ご」はいるの?

先日、メールのやりとりの中で、「いくつかご質問があります。」という一文がありました。相手が、私に対して質問したいことがあるという状況です。
自分が質問したい場合に、そのことをさして「ご質問があります」は、なんだか違和感があるな、と思ったのですが正しい用法なのでしょうか?
また、そういったご質問に対して、「"ご"回答いたします。」と自分が回答することに対して「ご」をつけるのは正しいでしょうか?
仕事のメールでしばしば見かけるし、私も曖昧な使い方をしているかもしれないと思って、不安になってきました。まスマートな表現をお教えいただけましたら幸いです。

ちなみに私は下記のようにしています。
質問があるとき「下記の事項についてお教え下さいますでしょうか」「ご教示下さい」「質問があります」
回答するとき「ご質問頂きました件につき、下記の通り回答いたします」もしくは、質問事項(引用)に回答を付記する。

Aベストアンサー

こんにちは(^^
この件、昔上司と議論になったことがあります(汗。

基本的には、敬語はNo.2のkeydaimonが仰る通り、「尊敬」「謙譲」「丁寧」の3種類に分かれます。

では、この「ご」はどれに当たるかというと・・・この3種類、どの用法でも使われます。(Goo辞書「ご」で調べてもそうありますね)。

ですから、文法的には「ご回答いたします」はアリです。
たとえばNo.5のStella_Marisさんが出していただいた例「ご案内いたします」や、ビジネスの場だとよく出てくる「ご紹介いたします」などと用法的には全く一緒です。

でも、感覚的な問題で「ご質問致します」「ご回答致します」は敬語の使い方としておかしい!と思っている方も多いですから、seven_heavenさんの仰る通り、「ご質問いたします」と書いてくる相手には「ご回答いたします」、そうでない相手には「ご」無しが無難だと思います(^^。

私の場合、質問があるときには、seven_heavenの書かれている例の他、
「いくつかおうかがいしたい点がございます」
も使ったりします。
回答の場合は、(「ご回答」を避けるために)
「ご質問いただきました点につきましては、以下の通りですので、宜しくご確認お願いいたします」
と書いたりします。


ちなみに蛇足ですが「いたします」には「謙譲」「丁寧」の両方の意味がありますが、相手によっては「丁寧」の意味しか無いと思っている場合がありますね~。 これもあいまいなとこです(^^;

こんにちは(^^
この件、昔上司と議論になったことがあります(汗。

基本的には、敬語はNo.2のkeydaimonが仰る通り、「尊敬」「謙譲」「丁寧」の3種類に分かれます。

では、この「ご」はどれに当たるかというと・・・この3種類、どの用法でも使われます。(Goo辞書「ご」で調べてもそうありますね)。

ですから、文法的には「ご回答いたします」はアリです。
たとえばNo.5のStella_Marisさんが出していただいた例「ご案内いたします」や、ビジネスの場だとよく出てくる「ご紹介いたします」などと...続きを読む

QwaveIn、waveOutでの音声録音・再生プログラミングを作成して

waveIn、waveOutでの音声録音・再生プログラミングを作成しています。
内容は、マルチバッファリング機能で音声の取り込みを行い、同時にファイルへの書き込みと、スピーカーへの出力をするのですが、当然waveInで取り込み後にwaveOutするので、元の音声とずれて音がスピーカーへ出力されます。
WAVEFORMATEX構造体のメンバには秒単位での設定値であるため、最小1秒のずれが計算上でます。実際のズレは1秒も無いですが、かなり気になります。
同様の機能のフリーソフトでは、若干のズレはあってもこのプログラムほどではありません。どのようにすれば、このズレを少なく出来るのでしょうか。
どなたか、ご教示願いたくお願いします。

Aベストアンサー

> (wf.nAvgBytesPerSec=wf.nSamplesPerSec * wf.nBlockAlign / 10;)

それはやったらダメです。
これは「ファイルフォーマット」を指定するものですので、入出力のバッファサイズ(処理時間単位)とは関係なく、常に

1秒あたりのバイト数=1秒あたりのサンプル数×1サンプルあたりのバイト数

でなければなりません。必ず
wf.nAvgBytesPerSec=wf.nSamplesPerSec * wf.nBlockAlign;
にする必要があります。

その上で、PrepareFormat 時の WAVEHDR で指定する dwBufferLengthを、バッファしたい秒数にあわせて、nAvgBytesPerSecの1/10のサイズにしたりする、
といったことになります。

Q音声波形を表示する

PC周りに飾る装飾として音声波形を表示する機械がほしいのですが、名前も平均的な値段もわからないので教えていただきたいです

このような商品が存在するのかわかりませんが、名前も知らないので調べようもなくお聞きしたいです 

高めのオーディオインターフェイスとかには付いてるのも有るんですが、少し値が張るので安めのものがほしいです。

別に音声波形が表示されるならなんでもOKです(アンプとかIFでも)
ただなるべく安めがいいです。

Aベストアンサー

「オッシロスコープ」のことですかね?

そんなかんじのようなもの・・・で良ければキットでもあります。

>●パソコンでオシロスコープ
>http://photo-n.cocolog-nifty.com/dara/2009/05/post-b878.html


 業務用のオッシロスコープは物にも依りますが20万円はする高級機材のひとつです。


人気Q&Aランキング