Witam forumowiczów. Potrzebuję pomocy w dokończeniu programu na zaliczenie. Mój program wczytuje plik WAVE i wyświetla dane z nagłówka oraz rysuje jego wykres wraz z powiększeniem jego. I właśnie przy tym wykresie mam najwięcej problemów. Może ktoś coś doradzi i pomoże.Oto kod programu:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Drawing2D;
namespace wykres_wav
{
public partial class Form1 : Form
{
int liczbaprobek;
int[] probki;
int rozmiar_bloku_danych;
Int16 rozmiarprobki;
int kanaly;
private string metoda1(BinaryReader czytaj, int ile)//pierwsza funkcja do zczytywania bajtów i konwersacja na ASCII
{
byte[] n = new byte[ile];
czytaj.Read(n, 0, n.Length);
return Encoding.ASCII.GetString(n, 0, n.Length);//konwersacja na ASCII(stringi)
}
private string metoda2(BinaryReader czytaj, int ile)
{
byte[] m = new byte[ile];
czytaj.Read(m, 0, m.Length);
int temp;
if (ile == 4)
temp = BitConverter.ToInt32(m, 0);
else
temp = BitConverter.ToInt16(m, 0);
return temp.ToString(); //konwersacja z Int16/Int32 na String
}
public Form1()
{
InitializeComponent();
}
private void wczytaj_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog plik = new OpenFileDialog();
plik.Title = "Otwieranie pliku wave";
plik.InitialDirectory = "C:\\Users\\*\\Desktop";
plik.Filter = "Pliki wav |*.wav";
plik.ShowDialog();
plik.OpenFile();
scieszka.Text = plik.FileName;
BinaryReader reader = new BinaryReader(File.OpenRead(plik.FileName));
textBox1.Text = metoda1(reader, 4);
textBox2.Text = metoda2(reader, 4);
textBox3.Text = metoda1(reader, 4);
textBox4.Text = metoda1(reader, 4);
textBox5.Text = metoda2(reader, 4);
if ((Convert.ToInt16(metoda2(reader, 2))) == 1)
textBox6.Text = "Brak kompresji";
else
textBox6.Text = "Kompresja modulacja PCM";
kanaly = Convert.ToInt32(metoda2(reader, 2));
if (kanaly == 1)
textBox7.Text = "MONO";
else
textBox7.Text = "STEREO";
textBox8.Text = metoda2(reader, 4);
textBox9.Text = metoda2(reader, 4);
rozmiarprobki = reader.ReadInt16();
textBox10.Text = Convert.ToString(rozmiarprobki);
textBox11.Text = metoda2(reader, 2);
byte data = 0;
while (data == 0)
{
if (metoda1(reader, 1) != "d") continue;
if (metoda1(reader, 1) != "a") continue;
if (metoda1(reader, 1) != "t") continue;
if (metoda1(reader, 1) != "a") continue;
data = 1;
}
textBox12.Text = "data";
rozmiar_bloku_danych = (int)reader.ReadUInt32();
textBox13.Text = Convert.ToString(rozmiar_bloku_danych);
liczbaprobek = ((rozmiar_bloku_danych / rozmiarprobki) / kanaly);
textBox15.Text = Convert.ToString(liczbaprobek);
probki = new int[liczbaprobek];
for (int i = 0; i < liczbaprobek; i++)
{
probki[i] = reader.ReadInt16();
}
int z = liczbaprobek / PictureBox.Width;
trackBar1.Maximum = Convert.ToInt32(liczbaprobek / PictureBox.Width);
trackBar1.Value = hScrollBar1.Maximum;
trackBar1.Value = 0;
reader.Close();
rysowanie();
}
catch
{
MessageBox.Show("Nie wybrałeś pliku");
}
}
private void rysowanie()
{
Graphics wykres = PictureBox.CreateGraphics();
Pen narysuj = new Pen(Color.Blue);
hScrollBar1.Maximum = Convert.ToInt32(liczbaprobek - PictureBox.Width - 1);
hScrollBar1.LargeChange = trackBar1.Value * PictureBox.Width;
hScrollBar1.SmallChange = trackBar1.Value * PictureBox.Width;
hScrollBar1.Refresh();
Refresh();
int a = 0, b1 = 0, b2 = 0;
for (int i = hScrollBar1.Value; (i < hScrollBar1.Value + PictureBox.Width) || a < PictureBox.Width; i += trackBar1.Value)
{
b1 = ((PictureBox.Height / 2) - (probki[i] / PictureBox.Height));
b2 = ((PictureBox.Height / 2) - (probki[i + trackBar1.Value] / PictureBox.Height));
wykres.DrawLine(narysuj, a, b1, a + 1, b2);
a++;
}
hScrollBar1.Enabled = true;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
hScrollBar1.Value = 0;
rysowanie();
}
}
}