Exemple #1
0
            void AddInstruments(MLSSVoiceTable table)
            {
                for (int i = 0; i < table.Length; i++)
                {
                    var voice   = (MLSSWrappedVoice)table[i];
                    var entries = voice.GetSubVoices().Cast <MLSSVoiceEntry>();
                    if (entries.Count() == 0)
                    {
                        continue;
                    }

                    string name = "Instrument " + i;
                    sf2.AddPreset(name, (ushort)i, 0);
                    sf2.AddPresetBag();
                    sf2.AddPresetGenerator(SF2Generator.Instrument,
                                           new SF2GeneratorAmount {
                        Amount = (short)sf2.AddInstrument(name)
                    });
                    foreach (var entry in entries)
                    {
                        sf2.AddInstrumentBag();
                        if (!(entry.MinKey == 0 && entry.MaxKey == 0x7F))
                        {
                            sf2.AddInstrumentGenerator(SF2Generator.KeyRange, new SF2GeneratorAmount {
                                LowByte = entry.MinKey, HighByte = entry.MaxKey
                            });
                        }
                        if (entry.IsFixedFrequency == 0x80)
                        {
                            sf2.AddInstrumentGenerator(SF2Generator.ScaleTuning, new SF2GeneratorAmount {
                                Amount = 0
                            });
                        }
                        if (entry.Sample < table.Samples.Length)
                        {
                            var sample = table.Samples[entry.Sample];
                            if (sample != null)
                            {
                                sf2.AddInstrumentGenerator(SF2Generator.SampleModes, new SF2GeneratorAmount {
                                    Amount = (short)(sample.GetSample().bLoop ? 1 : 0)
                                });
                                sf2.AddInstrumentGenerator(SF2Generator.SampleID, new SF2GeneratorAmount {
                                    Amount = (short)addedSamples[sample]
                                });
                            }
                            else
                            {
                                Console.WriteLine("Voice {0} uses a null sample id ({1})", i, entry.Sample);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Voice {0} uses an invalid sample id ({1})", i, entry.Sample);
                        }
                    }
                }
            }
Exemple #2
0
            void AddSamples(MLSSVoiceTable table)
            {
                for (int i = 0; i < table.Samples.Length; i++)
                {
                    var sample = table.Samples[i];
                    if (sample == null)
                    {
                        continue;
                    }

                    var     gSample = sample.GetSample();
                    byte[]  pcmU8   = ROM.Instance.Reader.ReadBytes(gSample.Length, gSample.GetOffset());
                    short[] pcm16   = PCMU8ToPCM16(pcmU8);
                    addedSamples.Add(sample,
                                     (int)sf2.AddSample(pcm16, string.Format("Sample {0}", i),
                                                        gSample.bLoop, (uint)gSample.LoopPoint, (uint)gSample.Frequency, 60, 0));
                }
            }