public void Update(float[] aData, int aChannels, int aSampleRate) { frame++; if (index != frame / tempo) { index = frame / tempo; if (index < musicXm.GetPatternChunkArray()[patternNumber].GetNumberOfRowsInPattern()) { for (int i = 0; i < musicXm.GetNumberOfChannels(); i++) { if (musicXm.note[i][patternNumber][index] != 0) { InstrumentChunk lInstrumentChunk = musicXm.GetInstrumentChunkArray()[( int )musicXm.instrument[i][patternNumber][index] - 1]; synthesizer.NoteOn(i, ( int )musicXm.note[i][patternNumber][index], lInstrumentChunk); } else { synthesizer.FadeOut(i); synthesizer.IncrementEnvelope(i); } } } else { frame = 0; patternIndex++; patternNumber = musicXm.GetPatternOrderTable()[patternIndex]; Logger.LogNormal("■Pattern:" + patternNumber.ToString()); if (patternIndex >= musicXm.GetSongLength()) { patternIndex = musicXm.GetRestartPosition(); Logger.LogNormal("■Loop."); } } } synthesizer.SynthesizeWaveform(aData, aChannels, aSampleRate); }
public void NoteOn(int aNote, InstrumentChunk aInstrumentChunk, UInt16 aFlags) { isEnd = false; position = 0.0d; envelopeIndex = 0; envelopePoint = 0; fadeOutPoint = 0; note = aNote; if (note == 97) { isEnd = true; } instrumentChunk = aInstrumentChunk; int lSampleNumber = ( int )instrumentChunk.GetSampleNumberForAllNotes()[note]; sampleChunk = instrumentChunk.GetSampleChunkArray()[lSampleNumber]; flags = aFlags; }
public SoundFontPresets(BinaryReader reader) { string id = new string(IOHelper.Read8BitChars(reader, 4)); int size = reader.ReadInt32(); if (!id.ToLower().Equals("list")) { throw new Exception("Invalid soundfont. Could not find pdta LIST chunk."); } long readTo = reader.BaseStream.Position + size; id = new string(IOHelper.Read8BitChars(reader, 4)); if (!id.ToLower().Equals("pdta")) { throw new Exception("Invalid soundfont. The LIST chunk is not of type pdta."); } Modulator[] presetModulators = null; Generator[] presetGenerators = null; Modulator[] instrumentModulators = null; Generator[] instrumentGenerators = null; ZoneChunk pbag = null; ZoneChunk ibag = null; PresetHeaderChunk phdr = null; InstrumentChunk inst = null; while (reader.BaseStream.Position < readTo) { id = new string(IOHelper.Read8BitChars(reader, 4)); size = reader.ReadInt32(); switch (id.ToLower()) { case "phdr": phdr = new PresetHeaderChunk(id, size, reader); break; case "pbag": pbag = new ZoneChunk(id, size, reader); break; case "pmod": presetModulators = new ModulatorChunk(id, size, reader).Modulators; break; case "pgen": presetGenerators = new GeneratorChunk(id, size, reader).Generators; break; case "inst": inst = new InstrumentChunk(id, size, reader); break; case "ibag": ibag = new ZoneChunk(id, size, reader); break; case "imod": instrumentModulators = new ModulatorChunk(id, size, reader).Modulators; break; case "igen": instrumentGenerators = new GeneratorChunk(id, size, reader).Generators; break; case "shdr": sHeaders = new SampleHeaderChunk(id, size, reader).SampleHeaders; break; default: throw new Exception("Invalid soundfont. Unrecognized sub chunk: " + id); } } Zone[] pZones = pbag.ToZones(presetModulators, presetGenerators); pHeaders = phdr.ToPresets(pZones); Zone[] iZones = ibag.ToZones(instrumentModulators, instrumentGenerators); insts = inst.ToInstruments(iZones); }
public SoundFontPresets(IReadable input) { var id = input.Read8BitChars(4); var size = input.ReadInt32LE(); if (id.ToLower() != "list") { throw new Exception("Invalid soundfont. Could not find pdta LIST chunk."); } var readTo = input.Position + size; id = input.Read8BitChars(4); if (id.ToLower() != "pdta") { throw new Exception("Invalid soundfont. The LIST chunk is not of type pdta."); } Modulator[] presetModulators = null; Generator[] presetGenerators = null; Modulator[] instrumentModulators = null; Generator[] instrumentGenerators = null; ZoneChunk pbag = null; ZoneChunk ibag = null; PresetHeaderChunk phdr = null; InstrumentChunk inst = null; while (input.Position < readTo) { id = input.Read8BitChars(4); size = input.ReadInt32LE(); switch (id.ToLower()) { case "phdr": phdr = new PresetHeaderChunk(id, size, input); break; case "pbag": pbag = new ZoneChunk(id, size, input); break; case "pmod": presetModulators = new ModulatorChunk(id, size, input).Modulators; break; case "pgen": presetGenerators = new GeneratorChunk(id, size, input).Generators; break; case "inst": inst = new InstrumentChunk(id, size, input); break; case "ibag": ibag = new ZoneChunk(id, size, input); break; case "imod": instrumentModulators = new ModulatorChunk(id, size, input).Modulators; break; case "igen": instrumentGenerators = new GeneratorChunk(id, size, input).Generators; break; case "shdr": SampleHeaders = new SampleHeaderChunk(id, size, input).SampleHeaders; break; default: throw new Exception("Invalid soundfont. Unrecognized sub chunk: " + id); } } var pZones = pbag.ToZones(presetModulators, presetGenerators); PresetHeaders = phdr.ToPresets(pZones); var iZones = ibag.ToZones(instrumentModulators, instrumentGenerators); Instruments = inst.ToInstruments(iZones); }
public void NoteOn(int channel, int note, InstrumentChunk aInstrumentChunk) { noteArray[channel].NoteOn(note, aInstrumentChunk, musicXm.GetFlags()); }