• 締切済み

Wave波形の描画について

現在C,C++を用いてwave波形の描画が出来るソフトを作成してみようと思っています。 最終的には一般的な波形データ編集ソフトと同じようなものを目指しているのですが、以下の点にてどのように実装するといいのか悩んでいます。 1、波形データを描画する 2、表示した波形データを伸縮できるようにする(縦横) 3、waveデータを再生した際に、再生位置にあわせて波形データをスクロールさせる 現在waveデータからサンプルデータ値を抽出するところまでは出来ています。 単純に1つ1つのサンプルどうしを線で結ぶという処理を大量に繰り返すという方法だととても重たくなるため別の方法を探していたところ、DirectXを使ってロードの際に波形データをテクスチャに一気に描画しておいてあとはそれを表示/加工する、といった処理が出来るのかなと思っているのですが具体的な方法がわからずに困っています。 上記実装についてご助言いただけないでしょうか。上記以外の方法でも結構でございます。 DirectXについても初心者ですのでお勧めの書籍やWebサイトなど併せて紹介していただけると非常に幸いでございます。 どうぞ宜しくお願い致します。

みんなの回答

noname#137556
noname#137556
回答No.1

扱うデータの長さや,表示するときの縮尺によって,色々と工夫のしがいがありそうですね。 まず,画面に収まっている範囲だけ描画するのが基本でしょう。 ただ,ズームアウトすると,描画すべき標本の数が増えてくるので,うまく間引く必要はありそうですね。 # 描画時に裏画面を使うと良いかもしれません。 長いデータになると,全てをメモリ上に持つことすら困難なので, 必要な時に必要な部分だけファイルから読み込まないといけないでしょう。 (現在位置の前後だけメモリに持っておく) 大昔にそんなプログラムを作りました。 # 44.1 kHz で 1 時間サンプリングすると,158,760,000 サンプルです。 # x 軸方向に 1 ピクセル 1 サンプルで描画するとして, # DirectX なら,そんな巨大なテクスチャが作れるのだろうか・・・

huwaxl623
質問者

お礼

ご返答遅れてすいません。 なるほど、まずは画面内に収まっている範囲だけ表示するところからやってみようと思います。 裏画面の方法も参考になりました。 ありがとうございました!

関連するQ&A

  • directxのspriteの描画について

    VisualStudioによりc++とdirectxを使って3Dオブジェクト(xファイルなど)とspriteによるテクスチャの描画をしたいのです。3Dの格闘ゲームのようにカメラが動いているのに、ライフバーが固定されているようなものを作りたいのです。 3Dオブジェクトはプロジェクション変換とビューポート変換をして描画し、spriteのテクスチャは画面の左上を座標(0,0)として描画したいのですが、どのように実装すればいいのでしょうか? 現時点ではspriteを描画する前にプロジェクション変換とビューポート変換のときに使うポインタを初期化してパイプラインに送ればいいと考えやったのですが、3Dオブジェクトは描画されているのですがspriteはうまくいきませんでした。

  • Directxで一度に描画する方法

    DirectXで複数枚のポリゴンを描画しているのですが、それぞれ頂点変換行列やテクスチャが違うのでDrawPrimitiveをポリゴン毎に呼び出さなければいけなくなっています。 上記のような状態で一度に描画する方法はありますでしょうか?

  • C# ビットマップの描画を高速にしたい

    C# ビットマップの描画を高速にしたいです。 ピクチャーコントロールでは限界でして、DirectXやDirectShow、OpenGLなど他のライブラリを用いて簡単に実装したいのです。 何かおすすめのライブラリがありましたらお教え頂けないでしょうか?サンプルなどが多いものですと・・非常に助かります。

  • 音声波形データのグラフ化について

    音声波形データのグラフ化について 開発環境:Visual C# 入力音声データ:ステレオ 16bit 44100HzのWAVデータ 目標:Windows Form上に音声の波形データをグラフ描画(折線グラフ)し、波形エディタのようなガイドライン機能を付加する。 まず、グラフ化を行う際、1秒間に44100個のデータがある場合、データのプロット数が非常に多くなってしまい、秒数次第では波形の全体描画にとても時間がかかってしまうと思うのですが、こういった場合、どのようにグラフ化するとよいのでしょうか? また、波形上に波形エディタのようにガイドラインを表示して、ガイドラインの時間における音声データの出力値も表示したいと思っております。 ガイドラインの移動はトラックバーによる移動を考えているのですが、プロット数が多くなると、上記の問題により再描画が追いつかず、スムーズなガイドライン移動ができません。 現在、グラフライブラリであるNPlotやZedGraphを使用して、グラフ描画を行ってみたのですが、どちらもプロット数が多くなると、描画自体にとても時間がかかるようになってしまい、ガイドラインの移動なんて出来たものではありません。 良いやり方、また、参考になるサイト、サンプルなどありましたら、 どうか教えていただきたく、よろしくお願い致します。

  • WAVEファイルのサイズ縮小

    WAVEファイルを、圧縮せずにサイズを小さくする方法を どなたかご存知でないでしょうか? もともとMIDIファイルから作成したWAVEデータで、 波形編集も行い削れる部分は削ったのですが・・・ なんとかWAVEのままさらにサイズを 小さくしたいのです。

  • リアルタイムで多数の3角形ポリゴン(2D)を描画したい

    リアルタイムでテクスチャを貼った多数の3角形ポリゴン(2D)をアルファブレンドを加味して描画したいのですが、OpenGL,DirectX等は使わずに自前のコードで実装したいのです。参考になるアルゴリズムを紹介したサイト、ソースコードなどを掲載しているサイトなどありましたら教えてください。検索のヒントになるワードでも結構です。お願いします。

  • 【VC++】コントロールの上に描画

    【VC++】コントロールの上に描画 Visual C++ 2005環境です。 ニコニコ動画みたいな動画プレイヤを作ろうとしているのですが、 作成するにあたって、コントロールの上にテキストを描画する方法で悩んでいます。 ボタンでもチェックボックスでもなんでも良いのですが、 そういったフォーム上のコントロールの上にテキストなり図形なりを描画するのって どういう方法で実装したら良いのでしょうか? サンプルのコードがあれば嬉しいですが、 無くても「こういうものを調べれば出来る」という取っ掛かりだけでも 教えて頂けると助かります。 すみませんが、方法ご存知の方居ましたらお願いします。

  • DIRECTXのスプライト描画で質問です

    いつもお世話になってます。 DIRECTX9.0、VC++6.0を使っています。 DIRECTXでLPDIRECT3DTEXTURE9(テクスチャ)とLPD3DXSPRITE(スプライト)を使って描画しています。 ですが、テクスチャの縦と横のサイズが256*256を超えたものが正常に表示できません。 色々調べてみると、縦と横のピクセル数が2の乗数以外の中途半端なサイズのテクスチャは、キリの良いサイズに変換されるみたいですが、一応縦横共に2の乗数のテクスチャなのにうまく表示できません。 例:768*512ピクセルのTGA形式のファイル 大きな画像ファイルを表示する方法はないでしょうか? どうぞ宜しくお願いします。

  • 二つの波形の合致を調べる方法は?

    波形解析について初心者の為、分かりづらいかもしれませんが宜しくお願い致します。 例えば、Excel等で単位の異なる二系列の折れ線グラフを描画したとします。 この二つのデータの波形が、どれくらい似ているかを調べるにはどの様な方法があるでしょうか。 解析ツール等を使うという方法ではなく、具体的な計算方法を教えて頂きたいのです。 二つの波形間を積分して、その面積を求めれば良いのか、フーリエ解析をすれば良いのか。。。等など通常はどのように解析しているのか、考えても良く分かりません。 どうぞ宜しくお願い致します。

  • waveファイルがインポートできません

     Music Creator6を使って音楽の編集をしているのですが、TASCAMのDR-07MKIIで録音したWaveファイルをインポートすると、一見インポートされたように動作が進むのですが、音の波形も表示されず、再生しても音が出ません。MKIIのWaveファイルは、他のフリーソフト(メディアプレイヤーも含む)ではちゃんと音が出ます。また、逆に、Music Creator6には他のWaveファイルは正しくインポートできるのです。  インターネットをくぐってみても解決策を見つけることができなくて、困っています。  どなたか、アドバイスをいただけると大変助かります。  どうぞよろしくお願いします。

専門家に質問してみよう