読者です 読者をやめる 読者になる 読者になる

Hope is a Dream. Dream is a Hope.

非公開ふぃふぃ工房ブログ

NAudioで信号処理 (その10)

NAudioで信号処理 (目次) - Hope is a Dream. Dream is a Hope.

NAudioで信号処理 (その10)

f:id:hope_is_dream:20170506144102p:plain

グラフ描画!

C# Audio Tutorial 10 - Plotting Audio Waveforms

いよいよグラフ描画です。信号処理はグラフを描画することから始まります。チュートリアルでは独自グラフの実装ではなく、chartクラスと、NAudioのWaveViewerクラスを使っての実装となります。

using System;
using System.Windows.Forms;
using NAudio.Wave;
using System.Drawing;

namespace Tutorial
{
    public partial class Form1 : Form
    {
        #region form
        public Form1()
        {
            InitializeComponent();
        }



        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // WAV File Open
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "WAV File (*.wav)|*.wav;";
            if (open.ShowDialog() != DialogResult.OK) return;


            // NAudio WaveViewerのセットアップ
            waveViewer1.BackColor = Color.White;
            waveViewer1.SamplesPerPixel = 400;
            waveViewer1.StartPosition = 40000;
            waveViewer1.WaveStream = new WaveFileReader(open.FileName); // ストリームを指定するだけでよい



            // 以下、chartのセットアップ
            chart1.Series.Add("wave");
            chart1.Series["wave"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
            chart1.Series["wave"].ChartArea = "ChartArea1";

            WaveChannel32 wave = new WaveChannel32(new WaveFileReader(open.FileName));

            byte[] buffer = new byte[16384];
            int read = 0;
            while(wave.Position < wave.Length)
            {
                read = wave.Read(buffer, 0, 16384);

                for (int i = 0; i < read/4; i++)
                {
                    chart1.Series["wave"].Points.Add(BitConverter.ToSingle(buffer, i * 4));
                }
            }



        }
    }

}