KaraokePC/CdgLib/GraphicFileStream.cs
Brett Sanderson deade2f47d refactor
2016-03-06 10:37:29 -05:00

49 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using CdgLib.SubCode;
namespace CdgLib
{
public class GraphicFileStream : FileStream
{
private const int PacketSize = 24;
public GraphicFileStream(string path) : base(path, FileMode.Open, FileAccess.Read, FileShare.Read)
{
}
public async Task<IEnumerable<Packet>> ReadFile()
{
Position = 0;
var subCodePackets = new List<Packet>();
var buffer = new byte[Length];
var bytesRead = await ReadAsync(buffer, 0, buffer.Length);
for (var i = 0; i < bytesRead/PacketSize; i++)
{
var cdgPacket = new byte[PacketSize];
Array.Copy(buffer,i*PacketSize,cdgPacket,0,PacketSize);
var subCodePacket = new Packet(cdgPacket);
subCodePackets.Add(subCodePacket);
}
return subCodePackets;
}
private async Task<IEnumerable<Packet>> ReadSubCodeAsync(long numberOfPackets)
{
var subCodePackets = new List<Packet>();
var buffer = new byte[PacketSize*numberOfPackets];
var bytesRead = await ReadAsync(buffer, 0, buffer.Length);
for (var i = 0; i < bytesRead/PacketSize; i++)
{
var subCodePacket = new Packet(buffer.Skip(i*PacketSize).Take(PacketSize).ToArray());
subCodePackets.Add(subCodePacket);
}
return subCodePackets;
}
}
}