質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Q&A

解決済

1回答

4673閲覧

wavファイルの波形表示

nnahito

総合スコア2004

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

0グッド

2クリップ

投稿2015/03/18 07:54

編集2015/03/18 07:55

wavファイルの勉強がてら、プログラムを書いています。

wavファイルを読み込んで波形を表示したいのですが、どうも速度が遅すぎます。
約30秒ほどのwavファイルが、1~2分かかってしまいます。
最適な読み込み方法はあるのでしょうか。
言語は「C言語」とさせてください。(本当は違いますが、タグになかったので……)

現在利用しているアルゴリズムは、以下のサイト様のものを利用しています。
ActiveBasic講座様

lang

1For n=0 To wh.pcmbytes/2 2 描画処理 3Next

おそらくこの部分で時間を食っていますが、
最適な読み込み方法はあるのでしょうか?
Audacityなどでは一瞬で読み込まれるので……

ご存知の片、いらっしゃいましたらご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBで波形データを扱ったことがないのでなんともいえませんが、pcmbytesの値はどうなっていますか?
これが例えば16bitステレオの場合の4bytesを指しているなら、毎回ディスクに4バイト読み込むように指示しているので、かなりのオーバーヘッドになります。

最低でも数キロバイトずつメモリに読み込んで、そこから波形データを取得するような形にするのがよろしかと思います。
以下、オレオレ言語記述ですが、ロジック的にはご理解いただけるかと存じます。

FileStream fileStream = FileStream.open('test.dat');
Buffer buffer = new Buffer(4096);
while (fileStream.read(buffer, 4096)>0){
for (int i=0; i<buffer.count; i++){
byte data = buffer.get(i);
//do something for data
}
}
fileStream.close();

投稿2015/03/18 10:30

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2015/03/18 16:26

ご回答有難うございます。 メモリにデータはすでに格納しています。 その後の描画処理で、動作が遅いので苦労しております… また、申し訳ありませんが、当方、Javaが大の苦手で全くわかりませんでした…
terushu

2015/03/19 05:55

既にファイルをバッファリングしておられるのでしたら、読みこみ方法については問題無いかと存じます。 恐らく、描画方法に問題があるのではないでしょうか。 具体的な描画コードを掲載すれば、どなたか回答してくださるかもしれません。 一般的な話をすれば、描画する時に、言語で用意されている線を引いたりするメソッドを使うのでは無く、描画領域のビットマップのメモリデータを直接書き換えるような方法がよくある高速化の手法です。
nnahito

2015/03/19 08:03

ご回答有難うございます! DCをメモリDCに先に描画すると、高速化出来ました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問