예제 #1
0
        public void ReadData(byte[] data, FmtBlock fmt)
        {
            int id = BitConverter.ToInt32(data, 36);

            id = Tricks.SwapEndianness(id);

            if (id != 0x64617461)
            {
                Console.WriteLine("Something happened");
            }

            DataSize = BitConverter.ToUInt32(data, 40);

            NumSamples = (int)(DataSize / 2);
        }
예제 #2
0
        public void ReadData(FileStream inFS, FmtBlock fmt)
        {
            object locker = new object();

            byte[] buffer = new byte[inFS.Length];

            lock (locker)
            {
                inFS.Seek(0, System.IO.SeekOrigin.Begin);
                inFS.Read(buffer, 0, (int)(inFS.Length - 1));
            }

            ReadData(buffer, fmt);
            Read(buffer, fmt);
        }
예제 #3
0
        public void Read(byte[] data, FmtBlock fmt)
        {
            _data = new List <Channel>(fmt.NumChannels);

            for (int c = 1; c <= fmt.NumChannels; c++)
            {
                _data.Add(new Channel((byte)c));
            }

            Task[] list   = new Task[fmt.NumChannels];
            var    number = 0;

            foreach (var item in _data)
            {
                var task = new Task(() =>
                {
                    var channelNumber = item.channelNumber - 1;
                    var i             = (fmt.BitsPerSample / 8) * (channelNumber) + 44;
                    var skip          = fmt.BlockAlign;

                    for (; i < data.Length; i += skip)
                    {
                        byte[] sample = new byte[fmt.BitsPerSample / 8];

                        try
                        {
                            Array.Copy(data, i, sample, 0, sample.Length);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                            Console.ReadLine();
                            Environment.Exit(-1);
                        }

                        item.AddSample(Sample.CreateSample(sample));
                    }

                    Console.WriteLine("Channel " + item.channelNumber + " finished");
                });
                list[number] = task;
                number++;
                task.Start(TaskScheduler.Current);
            }

            //Wait until all channels are done getting samples
            Task.WaitAll(list);
        }
예제 #4
0
 public DataBlock(FileStream inFS, FmtBlock fmt)
 {
     ReadData(inFS, fmt);
 }
예제 #5
0
 public DataBlock(byte[] data, FmtBlock fmt)
 {
     ReadData(data, fmt);
 }