/// <summary> /// Loads all patterns of a modfile and converts them into the /// 3 byte format. /// </summary> /// <returns></returns> private bool M15_LoadPatterns(int patternsCount) { int s = 0; this._module.Patterns = new System.Collections.Generic.List <Pattern>(patternsCount); // Allocate temporary buffer for loading and converting the patterns patbuf = new M15_MODNOTE[64 * this._module.ChannelsCount]; for (int t = 0; t < 64 * this._module.ChannelsCount; t++) { patbuf[t] = new M15_MODNOTE(); } for (int t = 0; t < 64 * this._module.ChannelsCount; t++) { patbuf[t].a = (short)(patbuf[t].b = (short)(patbuf[t].c = (short)(patbuf[t].d = 0))); } for (int t = 0; t < patternsCount; t++) { if (this.AllocPatterns != null && !AllocPatterns(_module, t, 64)) { return(false); } if (this.AllocTracks != null && !AllocTracks(this._module.Patterns[t], _module.ChannelsCount)) { return(false); } // Load the pattern into the temp buffer and convert it for (s = 0; s < (64 * this._module.ChannelsCount); s++) { patbuf[s].a = Reader.ReadUByte(); patbuf[s].b = Reader.ReadUByte(); patbuf[s].c = Reader.ReadUByte(); patbuf[s].d = Reader.ReadUByte(); } for (s = 0; s < this._module.ChannelsCount; s++) { if ((this._module.Patterns[t].Tracks[s].UniTrack = M15_ConvertTrack(patbuf, s)) == null) { return(false); } } } return(true); }
private void M15_ConvertNote(M15_MODNOTE n) { short instrument, effect, effdat, note; int period; // extract the various information from the 4 bytes that make up a single note instrument = (short)((n.a & 0x10) | (n.c >> 4)); period = (((int)n.a & 0xf) << 8) + n.b; effect = (short)(n.c & 0xf); effdat = n.d; // Convert the period to a note number note = 0; if (period != 0) { for (note = 0; note < 60; note++) { if (period >= M15_npertab[note]) { break; } } note++; if (note == 61) { note = 0; } } if (instrument != 0) { this.UniTrack.UniInstrument((short)(instrument - 1)); } if (note != 0) { this.UniTrack.UniNote((short)(note + 23)); } this.UniTrack.UniPTEffect(effect, effdat); }