예제 #1
0
        public void LoadSoundFontBytes(byte[] data)
        {
            if (State != SynthPlayerState.Stopped)
            {
                return;
            }
            var input = ByteBuffer.FromBuffer(data);

            try
            {
                Logger.Info("Loading soundfont from bytes");
                var bank = new PatchBank();
                bank.LoadSf2(input);
                Synth.LoadBank(bank);
                IsSoundFontLoaded = true;
                OnSoundFontLoaded();
                Logger.Info("soundFont successfully loaded");
                if (IsReady)
                {
                    OnReadyForPlay();
                }
            }
            catch (Exception e)
            {
                Logger.Error("Could not load soundfont from bytes " + e);
                IsSoundFontLoaded = false;
                Synth.UnloadBank();
                OnSoundFontLoadFailed();
            }
        }
예제 #2
0
    static void Main(string[] args)
    {
        var synthesizer = new Synthesizer(MusDecoder.SampleRate, 2, MusDecoder.BufferLength, 1);
        var bank        = new PatchBank("TimGM6mb.sf2");

        synthesizer.LoadBank(bank);
        var buffer = new byte[synthesizer.RawBufferSize];

        var format = new WaveFormat(MusDecoder.SampleRate, 16, 2);

        using (var wad = new Wad("DOOM.WAD"))
            using (var writer = new WaveFileWriter("out.wav", format))
            {
                var md          = new MusDecoder(wad.ReadLump("D_E1M1"), true);
                var sampleCount = 0;
                while (true)
                {
                    md.FillBuffer(synthesizer, buffer);
                    writer.Write(buffer, 0, buffer.Length);
                    sampleCount += MusDecoder.BufferLength;

                    if (sampleCount > 240 * MusDecoder.SampleRate)
                    {
                        break;
                    }
                }
            }
    }
예제 #3
0
        /// <inheritdoc />
        public void LoadSoundFont(byte[] data)
        {
            Pause();

            var input = ByteBuffer.FromBuffer(data);

            try
            {
                Logger.Info("Loading soundfont from bytes");
                var bank = new PatchBank();
                bank.LoadSf2(input);
                _synthesizer.LoadBank(bank);

                _isSoundFontLoaded = true;
                OnSoundFontLoaded();

                Logger.Info("soundFont successfully loaded");
                CheckReadyForPlayback();
            }
            catch (Exception e)
            {
                Logger.Error("Could not load soundfont from bytes " + e);
                OnSoundFontLoadFailed();
            }
        }
예제 #4
0
 public void UnloadBank()
 {
     if (this.bank != null)
     {
         NoteOffAll(true);
         voiceManager.UnloadPatches();
         this.bank = null;
     }
 }
예제 #5
0
 public void LoadBank(PatchBank bank)
 {
     if (bank == null)
     {
         throw new ArgumentNullException("The parameter bank was null.");
     }
     UnloadBank();
     this.bank = bank;
 }
예제 #6
0
    public void LoadBank(PatchBank bank)
    {
        this.bank = bank;

        synthesizer.UnloadBank();
        synthesizer.LoadBank(bank);
        Debug.LogFormat("Loaded bank: {0}", bank.GetBank(0).Length);//[0].Name
        // for(int i=0;i< bank.GetBank(0).Length;i++)
        //{
        //   Debug.LogFormat("{0}: {1}",i, bank.GetPatch(0,i).Name);
        // }
    }
예제 #7
0
 public PatchSelect(PatchBank bank)
 {
     InitializeComponent();
     this.bank = bank;
     int[] banks = bank.GetLoadedBanks();
     if (banks.Length > 0)
     {
         for (int x = 0; x < banks.Length; x++)
         {
             comboBox1.Items.Add(banks[x]);
         }
         comboBox1.SelectedIndex = 0;
     }
     updatePatchList();
 }
예제 #8
0
        public void TestLoadSf2PatchBank()
        {
            var data      = TestPlatform.LoadFile("TestFiles/Audio/default.sf2");
            var patchBank = new PatchBank();
            var input     = ByteBuffer.FromBuffer(data);

            patchBank.LoadSf2(input);

            Assert.AreEqual("GS sound set (16 bit)", patchBank.Name);
            Assert.AreEqual("960920 ver. 1.00.16", patchBank.Comments);
            Assert.AreEqual("0,1,2,3,4,5,6,7,8,9,16,24,32,128", string.Join(",", patchBank.LoadedBanks));

            var gmBank          = patchBank.GetBank(0);
            var expectedPatches = new string[]
            {
                "Piano 1", "Piano 2", "Piano 3", "Honky-tonk", "E.Piano 1", "E.Piano 2", "Harpsichord", "Clav.",
                "Celesta", "Glockenspiel", "Music Box", "Vibraphone", "Marimba", "Xylophone", "Tubular-bell", "Santur", "Organ 1",
                "Organ 2", "Organ 3", "Church Org.1", "Reed Organ", "Accordion Fr", "Harmonica", "Bandoneon",
                "Nylon-str.Gt", "Steel-str.Gt", "Jazz Gt.", "Clean Gt.", "Muted Gt.", "Overdrive Gt", "DistortionGt", "Gt.Harmonics",
                "Acoustic Bs.", "Fingered Bs.", "Picked Bs.", "Fretless Bs.", "Slap Bass 1", "Slap Bass 2", "Synth Bass 1",
                "Synth Bass 2", "Violin", "Viola", "Cello", "Contrabass", "Tremolo Str", "PizzicatoStr", "Harp", "Timpani", "Strings",
                "Slow Strings", "Syn.Strings1", "Syn.Strings2", "Choir Aahs", "Voice Oohs", "SynVox", "OrchestraHit", "Trumpet", "Trombone", "Tuba",
                "MutedTrumpet", "French Horns", "Brass 1", "Synth Brass1", "Synth Brass2", "Soprano Sax", "Alto Sax", "Tenor Sax", "Baritone Sax",
                "Oboe", "English Horn", "Bassoon", "Clarinet", "Piccolo", "Flute", "Recorder", "Pan Flute", "Bottle Blow", "Shakuhachi", "Whistle",
                "Ocarina", "Square Wave", "Saw Wave", "Syn.Calliope", "Chiffer Lead", "Charang", "Solo Vox", "5th Saw Wave",
                "Bass & Lead", "Fantasia", "Warm Pad", "Polysynth", "Space Voice", "Bowed Glass", "Metal Pad", "Halo Pad", "Sweep Pad",
                "Ice Rain", "Soundtrack", "Crystal", "Atmosphere", "Brightness", "Goblin", "Echo Drops", "Star Theme", "Sitar",
                "Banjo", "Shamisen", "Koto", "Kalimba", "Bagpipe", "Fiddle", "Shanai", "Tinkle Bell", "Agogo", "Steel Drums", "Woodblock",
                "Taiko", "Melo. Tom 1", "Synth Drum", "Reverse Cym.", "Gt.FretNoise", "Breath Noise", "Seashore", "Bird", "Telephone 1",
                "Helicopter", "Applause", "Gun Shot"
            };
            var actualPatches = new FastList <string>();

            foreach (var patch in gmBank)
            {
                if (patch != null)
                {
                    actualPatches.Add(patch.Name);
                }
            }
            Assert.AreEqual(string.Join(",", expectedPatches), string.Join(",", actualPatches));
        }
예제 #9
0
    public void SetupWithBank(PatchBank bank, int stringId, int maxPatch, int minkey, int maxkey, int numBalls, int maxString = 86)
    {
        if (synthesizer == null)
        {
            synthesizer = new Synthesizer(sampleRate, 1, bufferSize, 1);
        }
        if (bank == null)
        {
            return;
        }
        if (numBalls == 0)
        {
            return;
        }
        synthesizer.UnloadBank();
        synthesizer.LoadBank(bank);
        this.bank = bank;
        int maxWinding = maxString / maxPatch;

        winding = stringId / maxPatch;
        if (minkey == 0)
        {
            minkey = 20;
        }
        if (maxkey == 0)
        {
            maxkey = 85;
        }
        if (maxkey <= minkey + maxWinding)
        {
            maxkey = minkey + 60 + maxWinding;
        }
        minKey     = minkey;
        maxKey     = maxkey;
        ballstep   = (float)(maxKey - maxWinding - minkey) / (float)numBalls;
        ballDecay  = new float[numBalls];
        programNum = stringId % maxPatch;
        synthesizer.ProcessMidiMessage(1, 0xC0, programNum, 0);
        setup = true;
    }
예제 #10
0
    void Start()
    {
        ftrack.eid         = new KeyValuePair <int, int>(132974, 67924813);
        ftrack.frc         = new trackData();
        ftrack.frc.azi_rad = 3.00769365471949f;
        ftrack.frc.dec_rad = 0.016708671281222f;
        ftrack.frc.mjd     = 58714.7322249641;
        ftrack.frc.ra_rad  = 2.59716876080088;
        ftrack.frc.rec_t0  = 10983.2956250753f;
        ftrack.frc.rec_x   = -83.0575967774025f;
        ftrack.frc.rec_y   = 93.7020767723102f;
        ftrack.frc.rec_z   = -46.6655356299309f;
        ftrack.frc.zen_rad = 1.5858330048395f;



        curEvent = new List <eventData>();
        GameObject timeCon = GameObject.Find("timeController");

        if (timeCon != null)
        {
            timeController     = timeCon.GetComponent <Slider>();
            playbackController = timeCon.GetComponent <TimeSlider>();
            if (playbackController != null)
            {
                playbackController.OnStartPlaying.AddListener(delegate { StartedPlaying(); });
                playbackController.OnStopPlaying.AddListener(delegate { StoppedPlaying(); });
            }
        }
        GameObject gapCon = GameObject.Find("deltaController");

        if (gapCon != null)
        {
            deltaController = gapCon.GetComponent <Slider>();
        }
        if (timeController != null)
        {
            timeController.onValueChanged.AddListener(delegate { ValueChange(); });
        }
        if (deltaController != null)
        {
            deltaController.onValueChanged.AddListener(delegate { ValueChange(); });
        }
        GameObject tspn = GameObject.Find("timeSpan");

        if (tspn != null)
        {
            timeSpan = tspn.GetComponent <RangeSlider>();
            if (timeSpan != null)
            {
                timeSpan.onValueChanged.AddListener(delegate { ValueChange(); });
            }
        }
        GameObject zCon = GameObject.Find("zoomController");

        if (zCon != null)
        {
            zoomControl = zCon.GetComponent <Slider>();
            if (zoomControl != null)
            {
                zoomControl.onValueChanged.AddListener(delegate { zoomChange(); });
            }
        }
        GameObject hCon = GameObject.Find("hairController");

        if (hCon != null)
        {
            hairControl = hCon.GetComponent <Slider>();
            hairCover   = hCon.transform.parent.gameObject;
            if (hairControl != null)
            {
                hairControl.onValueChanged.AddListener(delegate { hairChange(); });
                hairChange();
            }
        }

        GameObject tCon = GameObject.Find("towerToggle");

        if (tCon != null)
        {
            towerControl = tCon.GetComponent <Toggle>();
            if (towerControl != null)
            {
                towerControl.onValueChanged.AddListener(delegate { towerChange(); });
            }
        }
        GameObject czCon = GameObject.Find("zillaToggle");

        if (czCon != null)
        {
            czillaControl = czCon.GetComponent <Toggle>();
            if (czillaControl != null)
            {
                czillaControl.onValueChanged.AddListener(delegate { czillaChange(); });
            }
        }
        foreach (singleBallList lst in ballArray)
        {
            foreach (singleBall bl in lst.balls)
            {
                if (bl != null)
                {
                    bl.setColor(new Color(0.9f, 0.9f, 0.9f));
                    bl.setScale(baseScale);
                }
            }
        }

        bank = new PatchBank(bankSource);
        if (bank == null)
        {
            Debug.LogFormat("Couldn't load music bank: {0}", bankSource);
        }
        else
        {
            int     maxPatch = 0;
            Patch[] arr      = bank.GetBank(0);
            while (maxPatch < arr.Length)
            {
                if (arr[maxPatch] == null)
                {
                    break;
                }
                maxPatch++;
            }
            for (int i = 0; i < stringArray.Length; i++)
            {
                if (stringArray[i] != null)
                {
                    //Debug.Log(ballArray[i].balls.Length);
                    stringArray[i].SetupWithBank(bank, i, maxPatch, 20, 85, ballArray[i + 1].balls.Length, stringArray.Length);
                }
            }
        }
        // size = scale * ( 0.2 * accum ) ** power
        updateToSet(true);
        updateTrackRot();
    }
예제 #11
0
 public void LoadBank(PatchBank bank)
 {
     this.bank = bank;
     synthesizer.UnloadBank();
     synthesizer.LoadBank(bank);
 }
예제 #12
0
 public void LoadBank(PatchBank bank)
 {
     UnloadBank();
     SoundBank = bank;
 }
예제 #13
0
	public void BuildGrid(PatchBank Bank)
	{
		// TODO add implementation
	}