XSample ConvertSample(int count, SSampleHeader sh, byte [] sample, Zone izone) { // Indices in sf2 are numbers of samples, not byte length. So double them. var xs = new XSample(); xs.Extension = ".wav"; xs.LoopStart = sh.StartLoop - sh.Start; xs.LoopEnd = sh.EndLoop - sh.Start; int sampleModes = izone.SampleModes(); xs.LoopMode = sampleModes == 0 ? InstrumentSampleLoopMode.Off : InstrumentSampleLoopMode.Forward; xs.Name = String.Format("Sample{0:D02} ({1})", count, sh.SampleName); xs.BaseNote = (sbyte)izone.OverridingRootKey(); // xs.Volume = (izone.VelocityRange () & 0xFF00 >> 8); // low range if (xs.BaseNote == 0) { xs.BaseNote = (sbyte)sh.OriginalPitch; } //Console.WriteLine ("{0} ({1}/{2}/{3}/{4}) {5}:{6}:{7}:{8}", xs.Name, sh.Start, sh.StartLoop, sh.EndLoop, sh.End, sh.SampleRate != 0xAC44 ? sh.SampleRate.ToString () : "", sh.OriginalPitch != 60 ? sh.OriginalPitch.ToString () : "", sh.PitchCorrection != 0 ? sh.PitchCorrection.ToString () : "", sampleModes); xs.FileName = xs.Name + ".wav"; var ms = new MemoryStream(); var wfw = new WaveFileWriter(ms, new WaveFormat((int)sh.SampleRate, 16, 1)); wfw.WriteData(sample, 2 * (int)sh.Start, 2 * (int)(sh.End - sh.Start)); wfw.Close(); xs.Buffer = ms.ToArray(); return(xs); }
public void Load(SampleHeader[] sampleHeaders) { foreach(Generator g in Generators) { if(g.GeneratorType == GeneratorEnum.SampleID) { g.SampleHeader = sampleHeaders[g.UInt16Amount]; } } }
public override object Read(BinaryReader br) { SampleHeader sh = new SampleHeader(); string s = Encoding.ASCII.GetString(br.ReadBytes(20)); if(s.IndexOf('\0') >= 0) { s = s.Substring(0,s.IndexOf('\0')); } sh.SampleName = s; sh.Start = br.ReadUInt32(); sh.End = br.ReadUInt32(); sh.StartLoop = br.ReadUInt32(); sh.EndLoop = br.ReadUInt32(); sh.SampleRate = br.ReadUInt32(); sh.OriginalPitch = br.ReadByte(); sh.PitchCorrection = br.ReadSByte(); sh.SampleLink = br.ReadUInt16(); sh.SFSampleLink = (SFSampleLink) br.ReadUInt16(); data.Add(sh); return sh; }
public override object Read(BinaryReader br) { SampleHeader sh = new SampleHeader(); string s = Encoding.ASCII.GetString(br.ReadBytes(20)); if (s.IndexOf('\0') >= 0) { s = s.Substring(0, s.IndexOf('\0')); } sh.SampleName = s; sh.Start = br.ReadUInt32(); sh.End = br.ReadUInt32(); sh.StartLoop = br.ReadUInt32(); sh.EndLoop = br.ReadUInt32(); sh.SampleRate = br.ReadUInt32(); sh.OriginalPitch = br.ReadByte(); sh.PitchCorrection = br.ReadSByte(); sh.SampleLink = br.ReadUInt16(); sh.SFSampleLink = (SFSampleLink)br.ReadUInt16(); data.Add(sh); return(sh); }
XSample ConvertSample(int count, SSampleHeader sh, byte [] sample, Zone izone) { // Indices in sf2 are numbers of samples, not byte length. So double them. var xs = new XSample (); xs.Extension = ".wav"; xs.LoopStart =(sh.StartLoop - sh.Start); xs.LoopEnd = (sh.EndLoop - sh.Start); int sampleModes = izone.SampleModes (); xs.LoopMode = sampleModes == 0 ? InstrumentSampleLoopMode.Off : InstrumentSampleLoopMode.Forward; xs.Name = String.Format ("Sample{0:D02} ({1})", count, sh.SampleName); xs.BaseNote = (sbyte) izone.OverridingRootKey (); // xs.Volume = (izone.VelocityRange () & 0xFF00 >> 8); // low range if (xs.BaseNote == 0) xs.BaseNote = (sbyte) sh.OriginalPitch; //Console.WriteLine ("{0} ({1}/{2}/{3}/{4}) {5}:{6}:{7}:{8}", xs.Name, sh.Start, sh.StartLoop, sh.EndLoop, sh.End, sh.SampleRate != 0xAC44 ? sh.SampleRate.ToString () : "", sh.OriginalPitch != 60 ? sh.OriginalPitch.ToString () : "", sh.PitchCorrection != 0 ? sh.PitchCorrection.ToString () : "", sampleModes); xs.FileName = xs.Name + ".wav"; var ms = new MemoryStream (); var wfw = new WaveFileWriter (ms, new WaveFormat ((int) sh.SampleRate, 16, 1)); wfw.WriteData (sample, 2 * (int) sh.Start, 2 * (int) (sh.End - sh.Start)); wfw.Close (); xs.Buffer = ms.ToArray (); return xs; }
public SampleMap(ushort keyRange, ushort velocityRange, XSample sample, SampleHeader sh) { KeyRange = keyRange; VelocityRange = velocityRange; Sample = sample; SampleHeader = sh; }
public override void Write(BinaryWriter bw, object o) { SampleHeader sh = (SampleHeader)o; //bw.Write(p.---); }