前田稔(Maeda Minoru)の超初心者のプログラム入門
![]()
![]()
//★ WAV FILE ステレオ 16bit のグラフを表示する 前田 稔
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
public class MyForm : Form
{
static string file_name = "C:\\data\\test\\もらいなき.wav";
static byte[] byt = new byte[20000000];
static int m_leng, m_idx, m_siz;
public MyForm()
{
Width = 1200;
Height = 700;
Text = "Wave S16 Graph";
MainMenu menu = new MainMenu();
MenuItem item = menu.MenuItems.Add("ファイル(&F)");
item.MenuItems.Add(new MenuItem("音量を下げる(&D)", new EventHandler(this.Level)));
item.MenuItems.Add(new MenuItem("終了(&X)", new EventHandler(this.FileExit), Shortcut.CtrlQ));
item = menu.MenuItems.Add("ヘルプ(&H)");
item.MenuItems.Add(new MenuItem("バージョン情報(&A)...", new EventHandler(this.HelpAbout)));
this.Menu = menu;
Paint += new PaintEventHandler(MyHandler);
m_siz = WavRead();
if (m_siz==-1) this.Close();
}
private void Level(object sender, EventArgs e)
{ int i,idx;
short v;
for (i=0; i<m_siz; i+=2)
{ idx = m_idx+i;
v = (short)(get_short(idx)/2);
byt[idx] = (byte)(v & 0XFF);
byt[idx+1] = (byte)(v >> 8);
}
Invalidate();
}
// ファイル-終了メニューのイベントハンドラ
private void FileExit(object sender, EventArgs e)
{ this.Close(); }
// ヘルプ-バージョン情報メニューのイベントハンドラ
private void HelpAbout(object sender, EventArgs e)
{ MessageBox.Show("Wave Graph S16 by Maeda Minoru"); }
private void MyHandler(object sender, PaintEventArgs e)
{
int i, idx, dt, wk;
short v;
Graphics g = e.Graphics;
g.DrawLine(new Pen(Color.Black),100,100,1100,100);
g.DrawLine(new Pen(Color.Black,3),100,200,1100,200);
g.DrawLine(new Pen(Color.Black), 100, 300, 1100, 300);
g.DrawLine(new Pen(Color.Black, 3), 100, 400, 1100, 400);
g.DrawLine(new Pen(Color.Black), 100, 500, 1100, 500);
if (m_leng==-1) return;
dt = m_siz/1000;
if (dt%2==1) dt++;
for (i=0; i<1000; i++)
{
if (i*dt>=m_siz) break;
idx = m_idx + i*dt;
v = (short)get_short(idx);
wk = v/327;
if (wk<0) wk = 0-wk;
if (v < 0) g.DrawLine(new Pen(Color.Blue), 100+i, 200-wk, 100+i, 200);
else g.DrawLine(new Pen(Color.Blue), 100+i, 200, 100+i, 200+wk);
idx+=2;
v = (short)get_short(idx);
wk = v/327;
if (wk<0) wk = 0-wk;
if (v < 0) g.DrawLine(new Pen(Color.Red), 100+i, 400-wk, 100+i, 400);
else g.DrawLine(new Pen(Color.Red), 100+i, 400, 100+i, 400+wk);
}
}
private int WavRead()
{ int siz; //Data Size
if (!File.Exists(file_name)) return -1;
FileStream reader = File.Open(file_name,FileMode.Open);
m_leng= reader.Read(byt,0,byt.Length);
reader.Close();
if (get_str(0)!="RIFF")
{ MessageBox.Show("Header Error");
return -1;
}
if (get_str(8)!="WAVE")
{ MessageBox.Show("Header Error");
return -1;
}
if (get_str(12)!="fmt ")
{ MessageBox.Show("Header Error");
return -1;
}
if (get_short(20) != 1)
{ MessageBox.Show("Format Error");
return -1;
}
if (get_short(22) != 2)
{ MessageBox.Show("Format Error");
return -1;
}
m_idx = 12;
m_idx = m_idx+get_int(m_idx+4)+8;
if (get_str(m_idx) != "data")
{ m_idx = m_idx+get_int(m_idx+4)+8;
if (get_str(m_idx) != "data")
{ MessageBox.Show("Format Error");
return -1;
}
}
siz = get_int(m_idx+4);
m_idx = m_idx + 8;
return siz;
}
//☆ get_str() 関数, get_short() 関数, get_int() 関数の定義
}
class Draw
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|
![]()
[Next Chapter ↓] Sound Menu
[Previous Chapter ↑] Graph M8