Witam!
Mam nastepujacy problem probuje odczytac dane z pliku wave i odczytujac nagłówek wszystko jest OK, ale jezeli probuje odczytac dane dotyczce juz samego sygnalu pojawia sie problem, gdy jest to wave 16 bitowy to probki sa zapisane w 2 bajtach i probuje je odczytac do jakiegos typu 2 bajktowego ze znakiem, no i np jest to Int16 ale uzyskiwane liczby w ten sposob sa jakies abstrakcyjne, gdyz liczby powinny byc mniejwiecej z zakresu od -32 do 32, i nie wiem co z tym fantem zrobic
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 Microsoft.DirectX.DirectSound;
namespace Zabawa_z_wav_em
{
public partial class Form1 : Form
{
private string big_endian(BinaryReader reader, int ile) // funkcyjka czyta 4 znaki i zamienia z binarnego na ascii
{
byte[] ch = new byte[ile];
reader.Read(ch, 0, ch.Length);
return Encoding.ASCII.GetString(ch, 0, ch.Length);
}
private string little_endian(BinaryReader reader, int ile) // funkcyjka czyta 4 znaki i zamienia z binarnego na ascii
{
byte[] temp = new byte[ile];
reader.Read(temp, 0, temp.Length);
int t;
if (ile == 4)
{
t = BitConverter.ToInt32(temp, 0);
}
else
t = BitConverter.ToInt16(temp, 0);
return t.ToString();
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.Title = "Otwieranie pliku wave";
op.InitialDirectory = "C:\\Users\\Sylwuś\\Desktop";
op.Filter = "Pliki wav |*.wav";
op.ShowDialog();
byte[] tab1;
short[] tab2;
try
{
op.OpenFile();
FileStream file = new FileStream(op.FileName, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(file);
textBox1.Text = op.FileName.ToString();
if (big_endian(reader,4) != "RIFF") // czy to jest plik RIFF
{
MessageBox.Show("To nie jest plik RIFF");
//throw new RiffParserException("To nie jest plik RIFF");
}
else
{
textBox3.Text = little_endian(reader, 4);
textBox2.Text = big_endian(reader, 4);
reader.ReadBytes(8);
int rodzaj_kompresji;
rodzaj_kompresji = Convert.ToInt16(little_endian(reader, 2));
if (rodzaj_kompresji == 1 || rodzaj_kompresji==-1)
textBox4.Text = "Brak kompresji";
else
{
if (rodzaj_kompresji == 2 || rodzaj_kompresji==-2)
textBox4.Text = "Kompresja PCM";
else
textBox4.Text = rodzaj_kompresji.ToString();
}
int kanaly;
kanaly=Convert.ToInt32(little_endian(reader, 2));
if (kanaly == 1)
textBox5.Text = "MONO";
else
{
if (kanaly == 2)
textBox5.Text = "STEREO";
else
textBox5.Text = kanaly.ToString();
}
textBox6.Text = little_endian(reader, 4);
reader.ReadBytes(4);
textBox7.Text = little_endian(reader, 2);
textBox8.Text = little_endian(reader, 2);
int rozdzielczosc = Convert.ToInt32(textBox8.Text);
if (rozdzielczosc == 8)
{
tab1 = new byte[Convert.ToInt32(textBox3.Text)];
reader.ReadBytes(4);
tab1 = reader.ReadBytes(Convert.ToInt32(textBox3.Text));
}
if (rozdzielczosc == 16)
{
tab2 = new short[Convert.ToInt32(textBox3.Text)/2];
reader.ReadBytes(4);
for (int i = 0; i < tab2.Length; i++)
{
tab2[i] = reader.ReadInt16();
MessageBox.Show(tab2[i].ToString());
}
}
int ii;
file.Close();
}
}
catch
{
MessageBox.Show("Dupa");
}
}
}
}
Pozdrwawiam