「C#によるWaveファイルの解析」で解析したデータをパソコンに表示します。Visual Studio Express 2013を使用し、C#言語によりChartコントロールを用いて、チャートタイプが折れ線グラフで、取得したWaveファイルのデータを波形表示します。プログラムを実行した結果を次に示します。
C#言語のChartコントロール-折れ線
波形データを表示するために、C#言語のChartコントロールを用いて、チャートタイプを折れ線にして表示します。
Chartコントロールを使用するための参照設定への追加
名前空間は、「System.Windows.Forms.DataVisualization.Charting」とします。ソリューションエクスプローラーの「参照設定」で「System.Windows.Forms.DataVisualization」の「参照の追加」を行います。
折れ線グラフのデータの設定方法
データの設定は、プロパティのSeriesコレクションに表示される[…]ボタンをクリックして、「Seriesコレクションエディター」を表示します。次に、Pointsコレクションに表示される[…]ボタンをクリックして、「SataPointコレクションエディター」を表示し、データを設定していきます。Seriesコレクションでは、グラフの座標データや,グラフの種類,色等々が格納されている。
プログラムからタイトルを設定するときは、次のように行います。座標データは、DataPointCollection型のSeries.Pointsプロパティで管理されます。
//Seriesの作成 Series test = new Series(); //折れ線グラフのタイプを指定 test.ChartType = SeriesChartType.Line; //グラフのデータを追加 for (int i = 0; i < value.Length; i++) { test.Points.AddXY(i, value[i]); } //凡例に表示される文字列を指定 test.Name = "Waveデータ";
折れ線グラフのタイトルの設定方法
タイトルの設定は、プロパティのTitlesコレクションに表示される[…]ボタンをクリックして、「Titleコレクションエディター」を表示します。「外観」欄にある「Text」に表示したいグラフタイトルを入力します。
プログラムからタイトルを設定するときは、次のように行います。
Title title1 = new Title("波形データ"); chtWave.Titles.Add(title1);
折れ線グラフの軸の設定方法
軸の設定は、プロパティのChartAreasコレクションが持つAxesコレクションで設定します。ChartAreasコレクションに表示される[…]ボタンをクリックして「ChartAreコレクションエディター」を表示します。次に、メンバーを選択してAxesコレクションに表示される[…]ボタンをクリックして「Axesコレクションエディター」を表示します。メンバー一覧の「X Axes」および「Y Axes(Value)」は第1軸を示します。
プログラムから軸を設定するときは、次のように行います。「ChartArea1」は、ChartAreコレクションエディターを使ってすでに設定しています。
//軸ラベルの設定 chtWave.ChartAreas["ChartArea1"].AxisX.Title = "時間(ms)"; //X軸最小値、最大値、目盛間隔の設定 chtWave.ChartAreas["ChartArea1"].AxisX.Minimum = 0; //Y軸最小値、最大値、目盛間隔の設定 chtWave.ChartAreas["ChartArea1"].AxisY.Minimum = -1 * rangeY*3; //目盛線の消去 chtWave.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
折れ線グラフの凡例の設定方法
凡例の設定は、プロパティのLegendコレクションで設定します。
プログラムから軸を設定するときは、次のようにChartAreaに近づけて表示します。
//凡例の作成と位置情報の指定 Legend leg = new Legend(); leg.DockedToChartArea = "ChartArea1"; leg.Alignment = StringAlignment.Near; chtWave.Legends.Add(leg);
Waveデータの振幅値データの波形表示プログラムの作成
取得した振幅値データ基づき、パソコンの画面にChartコントロールを用いて、チャートタイプを折れ線グラフとする波形表示メソッド「displayWave」を次に示します。「chtWave」は、Chartコントロールのインスタンスを示します。
private void displayWave(int[] value) { //デフォルトで追加されているSeriesとLegendの初期化 chtWave.Series.Clear(); chtWave.Legends.Clear(); chtWave.Titles.Clear(); Title title1 = new Title("波形データ"); //軸ラベルの設定 chtWave.ChartAreas["ChartArea1"].AxisX.Title = "時間(ms)"; chtWave.ChartAreas["ChartArea1"].AxisY.Title = "振幅"; //※Axis.TitleFontでフォントも指定できるがこれはデザイナで変更したほうが楽 //X軸最小値、最大値、目盛間隔の設定 int rangeX = (value.Length + (value.Length / waveHeader.PlayTimeMsec)) / waveHeader.PlayTimeMsec; chtWave.ChartAreas["ChartArea1"].AxisX.Minimum = 0; chtWave.ChartAreas["ChartArea1"].AxisX.Maximum = (value.Length + (value.Length / waveHeader.PlayTimeMsec)); chtWave.ChartAreas["ChartArea1"].AxisX.Interval = value.Length / waveHeader.PlayTimeMsec * 10; //Y軸最小値、最大値、目盛間隔(正負3ブロック+マックス値よりマックス値の4分の1空間を空ける)の設定 int rangeY = (maxValue + (maxValue / 4)) / 3; chtWave.ChartAreas["ChartArea1"].AxisY.Minimum = -1 * rangeY * 3; chtWave.ChartAreas["ChartArea1"].AxisY.Maximum = rangeY * 3; chtWave.ChartAreas["ChartArea1"].AxisY.Interval = rangeY; //目盛線の消去 chtWave.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false; chtWave.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false; //Seriesの作成 Series test = new Series(); //グラフのタイプを指定(今回は線) test.ChartType = SeriesChartType.Line; //凡例に表示される文字列を指定 test.Name = "Waveデータ"; //グラフのデータを追加 for (int i = 0; i < value.Length; i++) { Debug.WriteLine(string.Format("value[i] : {0:X} ", value[i])); test.Points.AddXY(i, value[i]); } // 波形データ 周波数成分 //凡例の作成と位置情報の指定 Legend leg = new Legend(); leg.DockedToChartArea = "ChartArea1"; leg.Alignment = StringAlignment.Near; //作ったSeriesをchartコントロールに追加する chtWave.Series.Add(test); chtWave.Legends.Add(leg); chtWave.Titles.Add(title1); }