Midi Player?



  • @Christoph-Hart Thanks for the update!
    I'm doing a little tinkering but can't quite wrap my head around it's functionality.
    I've added a play + stop button to your example (using the property editor), but get unexpected results. Pressing play will only play 1 random note, and when I hit stop, the midi player switches to an empty sequence.
    What's the proper way to to add controls to the player?

    HiseSnippet 2167.3oc4Y8+aaabEmz1LqVcNHcqXX+3gfAL5EOFI+k3.TTDKK+MsDaqJ4lFzhtryjGkXB4crGOYEsh.r+M1+I6Oi8mR9OX68tijhxVwUUsaCqU1Fh26du6806y634NRgOKKSHsrW8hwoLK6eoSuwb0fVCnQbq1GXYeWmSoYJljXHs+3TZVFKvx1d4iQB1qthk9y6dx9zXJ2mMgjk0yEQ9rmEkDolPsydOMJN9HZ.6hnjJbu8ds8E7VhXwPvdV1otUJ0+0z9rynHaK4XYemCChTBYOEUwxrrWYeQv3dCDi3F9edTVzkwLbPCqdvBYHejHN.sXjpUqAQwAcJ76LKKamNShBKahBeryoQAQkzmDMtmdBxDIpFOrW51LuFe2lW8YYdKWw7tSQRRadwzwLYQRp8AsIFJMlxnZMTJYbUO12LjMUx4cOIepKjPXtJ8mIDoGxofoFTkr8xS6dKOet2McIKz5OJJlgtmcw.fazUfz7ATE0xNy4wa5wu3QO8ws51scaOuS+rC+xW0zyy6EddM853kD0s2Es27KAJdi87d0t6tYeulmbNL7UOX2MCCatk94lONILz6Ec7Ng+m5b1ek0Z+iBa0LLrQy1cef+Ic7Fbfm2tO3oddVncLoZyFqO6E0mSUCk.MmyFlrOE7fJAkyDIQv75cP4Du2dGv3yhLFWgfmTUcGhIXOUf1pRFeESF+ib54KiRUSlAiU+5bpSpGmN2al0ZIgiCYsZgC49pHAmPCBNSnXtwQYpMH9CnbNKdCBGnwGlbIStA4JVrvORMdCRpHKBkZCRLi2WMX8ZeaMB74JpjjP9Txg79QblmujAUEmBFArg8DrhV5t9mn4LwKioP2vMwC0647pSfTNSqU2IFPUFddto3VXSUmrkw3cychozHj7xTzjT2bSrOS0CFBkcGIje1PHOvj6CVclagOtdt7kNnXtbPQoCJLNXXX0YtMOT79cBwB5DjGTjop5MXt1KcX1.2jbxSnH.JucsZ3OO7gjKFDkQFAHzjAfWR.vXckAIKGAwqFFYhgHyW80eRMThlAADJ4Rn7Z.QDp4NqVYQ1FjFaPdTc3qM2cCB9MntqM6V4yBOW2amaN+NEy6sCxwV2jicy4XSuFumEY2MyYYKsIT5uGyTf0KYgLI5dDkfnFvHZ.0TMfpWMnuTlRWQfjygYgHftWIlSlfG6d+pPw2ecSHpc30WTRffkw+8Jx.5ULBkOl.JApNTjXAzZLXCxHFJImwBPaxT+AVJKIUMtLaPBijYpZQgtUrLunrCQtbWuX2JrPsLKffyHWBNxnH0.x1ObahBJwHYEnbZtqtTF85t8FjsMot2pcnyDi.Cj7pgPbAAbztGVRMi3G3cAPMohDoxcCbEnjToHkYBoU7GoHAXzqVUiHLFpSy268LPItwXBrDPSvM3Jtn6tJXgjqOUX3LmqEDxkh3Xbu7LlF28IuMAcKwKowCYkLBv1S2pr170pLuBnBiBdadj57TV4XimVPotUoCVkzD+pJUs6LC1lPZF8paYrI3oOustwLzXImVGc9SEgdn8Arqfi5Y5VspyArrWqDoVycqrOzoMrlxPJbDkY0BqwJN4Z0Kg9Z1QRXPoDtOpNfqrS85ls0S1s1gB3o3F0BYgspsDIovl.tx89lou+0k56+dbT9o1zH.fbe0EBsFbM5AYqJS.7dWVJbxR047N4f2Xqf9LWkDplzqpQTj2NHmcECUPa.2hRQ295ht9dg.fcy3XWywmy7tTB0P3RrJ7qFvF2a9oSs0tuo2TWvRAsFa1Y8U00fzJnK.xvWDEnF3t9DBmvh5OP4t9WWr3vugBSqMRDWqm0WSCi7sluxweLLjowZyUHrnT.RP.GCMCxIAYH3A0.HfrOk7HHBHdlOM1fHhnLoX3IiD.U17LHdj4MQlojNjwhArElFe2WGk0tDzjaD6J.EZrXHX6ulUYA5qaNqCnkw0QChT5TyDlvPOjW3.ncYnTGNv9U0qxq9g2piY4l0wR5kZGgKjITH1AtFBZdIbj7xidsV44Q.J2LG1Im+hZH20I+gqm+xMhR8FHoiz5UND.ILj66gTeFVdA5QexOrSZ8al6ycrZuE96+e.gc9wBD91PIsWJ2p.VUZ7t6li2s+PkRvsh.Xs63f4LKs8N0A+mKY6g.q4x5XqEcQflgWMr.Izx9WXz2ZEXy31Js59.GCBj0aPkcWPWiwG9GvCivRqRy+uLZuA5xiRJ+sWtGMNVL5.IsOb109fkrj0M046O9nU4etPk+cvUkzfHwwRwvTSlHsHGzN3FuDbJUBuIGzgn8jUbdUuND+lIoFwdiKGjNdue.lQu2SWw64bpHXXL9JiUusA7JVxm.p4mpyH18Cv7Tim5czm+qfn9beCIyq49QNchT9Cls8tzLrWb6x+gs27KzYMmCCCAv4IF6JNG8hE81aVLS4tFS4Cc5APr5SUnMjeidL4KvWC3XFmIwfZia4h19my6EskN2Wz14PaqqXWHobnOb1TKbOVRzEvVlrpD+7L3DXruoKlkqRukfJm4Tu6IGAN4LkoG9dG5xklIPWzotbjqekSeuuQsYdgeq7+fK76G+ca+vAGVd9L2YDAs6biKN9dPYLduDGxw6oAnf13uB51DRGFqJnNcc8oBtHcffG4WMo2kojQ86yjUs8Y5PMUpot5xOdutrXFsZA7uaO7.MTIDmXKXrnw7GKts70u0wXtDbyH4mFf5K+ySPcyag0+TJTn9Fy8B2CvR8Y42jGdXS3rNnn5w0KNnVOFOPO3eAexmrAN1NexFES9eEcjP8khW5aNzIVK+AZJfey0WB9pNmhiIMJOtoC79.VI.h3K88wv8eDhOyVlMW.Y1ZAjY6EPlcV.YdzBHytKfLO9VkAaF0bnRjX1JBD5bn4eWhc4+wF6ks92.YvWttA


  • @dustbro if you use the "create generic script reference" on the MidiPlayer
    and paste it in initCallback

    const var MIDIPlay = Synth.getMidiProcessor("MIDI Player1");
    

    you can use this code to enable disable the play function

    inline function onPlayControl(component, value)
    {
    	MIDIPlay.setAttribute(1, value);
    	MIDIPlay.setAttribute(0, !value);
    };
    

    Attribut 1 is Play and 0 is Stop

    However you have to disconnect the "Play" btn from "Property editor"

    this function above make only use of the Play btn value, but you've set the buttons in a radio group so the stopbtn will set the playbtn to value = 0



  • @ulrik Thanks for that! What about changing the sequence? Could I make an array of sequences and push that to a combobox?



  • @ulrik the suggested code is two thumbs up here.
    @Christoph-Hart When the STOP command is selected, the midi player removes the sequence. Any insight on that?

    HiseSnippet 2221.3oc4Y8+aaabEmzNLqVcNHcqXX+3sfAL5EMFIam3.DTTKKamnkXGUK2jfVTjcl7nDSHui83IqpEDf9mv9Sa+oz+C1du632jsrqfZ1FVqhCr36du68488im6KE9rrLgzxdsSmlxrr+0NClxUi5NhFws5suk8sbNhloXRhgzdSSoYYr.Ka6UeLRvdsaXo+7Ce9dzXJ2mUQxx5EhHe1yhRhTUT6u6SihiOjFvNMJoF2auaOeAuqHVLFvypNsrRo9ukNjcLEYaEGK6adPPjRHGnnJVlk8M1SDLcvHwDtg+WDkEcVLCens0.XiLjOTDGfHFoZ0cTTbP+B6Nyxx1oekWXUiW3ScNJJHpjdk2315EHURT2eXux0Au1+3vq07f2p0f2MKBRZ3ESmxjEAod62iXnzdFP0crTx3pArucL6BAm7kNUBt45wwmIDoGvo.TCpS1d0YMuUWLy6xljEh9CihYn4YW7.vMZJPXdephZYm47vM83m9fm9vtmbRudddG8EG7Uuoimm2q775302KI5jAm1ayuBn3M0y6M6rylC857jmCO9l6tylggc1R+8NOLILz6U88dB+u1+3+Nq6dGF1sSXX6N8N4t9Oou2n88714tO0yyBwQU1lMleNHZHmpFKAZNGONYOJXA0bJGKRhf00UP4Du8t6y3yiL5WAmmTUOHXb1y3nspEwugIh+INC7kQoppUPe0uMmZU93rwdypVqHcbVuA9uvwbeUjfSnAAGKTL23nLUSh+HJmyhaR3.M93jyXxljyYwB+H0zljTQVDJUSRLiOTMZiFuqAA9bNURRHeF4.9vHNyyWxfDii.b.0rOASpkta7HMmIdYLEZItIdndeNu9BHki0Z0sB.0Y3E4Pws.S0WrqA7t4FwLZDheYJZRpaNDGxTCfGgLuCExuXLDJXx8.Tm4VXiajKeoAJVHCTTZfBiAFFVekqyBEWsQHVRifb2hHUcqAi0doiyF4ljSthh.n7dSNx8tG4zQQYjIPSZxHvJIP+XclAIKuIhWCzyDCdlu9adTCThNAADJ4LH8ZDQDp4NqQYRVSR6ljGzB90l6zjf+FT2EVcq7Ugu2x69Wd86Wrt28QN15xbrSNGa509J1jc1LmkszPnzdeLSAnWxBYRz7HJAQMhQz8TS08T8Z.ilxT5LBjbdmVvCnGWhwjpVxt2od236rgwE0K7haJIPvx3+IEYD8bFgxmR.k.YGJRr.lNFzjLggRxYr.DSl7O.orjT0zxnAILRloZDE5VCYdQYGfb4tQQ0JrQcMaffyHmAFxjH0Hx12aahBRwHYEM5zbWeqL50c6ljsMgt2qMniES..RdyXvuf8bzlGlRMG+GXcAPNohDoxMCbGnjToHkYbo0rGoHAXzqQcPDFC4o40dOCThaLF.KanI3l9Jtn4tFfPxEWJLbtq0Eb4RQbLVKOmkwpO40InaY+RZ7XVIiPm6YmV1XwlVlmATiQAuGOR87TV4yFKsfRKqRCrNoJ6pNUs4LG1pHMmw0cMXB91W1SOaFlsjSquN9ohPKzde14vo8LCrVyYeV1aUhTqEdZ1G6zC1SYHENkx7lhk33jqUuD5aYGJgGJkv8Asf9J2uUKSYcU0ZeJzOEKTKjEJU6JRRgh.tx8NlkuCJ0OkJbSqjYJZDPibe0oBsFbM5AYrNSP68SXovgKUOm2Ou4MNJXHyUIgrI89ZDE4sOx4IhwJXLfaQpn6PcR2PuPngcm3XWyIny7NSB4P3VrF7itgMVa9YyTZOzLa5D.ofViMUVecKcSZELE.Y3kQApQtaTQ3IrngiTta7MEaN7SnvLZiDw05Yi00sQdm4W48eLLjo60lqPXSoPKAAbRzLHlDjgMOnlFBH6yHO1DADOymFa5HhcYRQ2SFI.xr4Yf+HyqRlYjNjwhgdKLc+cesWVaRvPtIrygtPSEiAr+VVsMXnd3r1gV5WmLJRoCMULgtdHtvgl1ktRs6.mW0pNu5u7dsOKGVOVROSaHbgLgB9NvzvllmAmJu7nWqWddDfxkig8y4uHGxcCxe9hwubPTp2.IchVuxwPSBC4gdH0mgoWfdzm7Cmj15xw9bCqw6g+OS4FfjqtXCV7JJ0tTcVQqgqnTKhGCnrd+Xjihdx9E5rns75MdGJ0ZEpCCqcTJYzYigIasKX6QWIKfK3OTxy60f35rQSZiFLcowwXrwcFHVXG++y.LmOTCvttIL1qjiJfUkdVwsxmUr2XkRvshfQB2zAcjVZ7B3x17xrKhbCvAR4xU68sVlwZvaVWDzsr+UFctdwbMrkjVkejio6s02Uovl6Ns5gg6NAKOKI72lr6HcIVIku+06BYPhI6KoCgy+ODPzJV0zsyOlepR0e+Kqo5+wzckzfHwikhwoy3NVvMW6LqYWhZad5Ut4W9z.214HQv3X7skqeQK3sKku.juNyIBvo9Pud0zYtdhE+1WZsvWNzhB2Owoejxez7w6JyAuXp9+gwa9cYstyAggvPoJvdCmCe0xdwUKGTtkAJery.nostOuFH+N8yjWhu9yiYblDcpsul6X7etn2wX5BeGiOGFWeN6TIkCm+HalMd.KI5TnPHqNwuLCN4I6aOAixybYZBpbtK8Ce9gfQNWYFfuukNcoSBb5gYtWnKdaaeXtLwa7+f657Ce01O8lCqtXvcNdP69W5NyuMjFi2GyAb79o.JHF+MvjhP53XUA0YyqORvEoiD7H+5A8SXv4MFNjIqi84ZPvISl4Va+zcOgEyn0Sf+i6hGjiJA+DaI8EsWbew0Eu98NF3RvhQxOOZpu5uLapad6ygGQgD0uybk3Cfdo9r7avDOnHb9DTT8ysJNf1.FOP+v+B9juXa7Y67EaWr3+UzQB0WJdsu4PiXt7Goo.1MWe++q4bD9Loc4wLcf2CxJA5H9Zeezc+W.+y7kYykPlsVBY1dIj49KgLOXIjYmkPlGdsxfCi5LVIRLkh.g9GX9KEYW9GqxdUq+Md7mAJ.
    

    it also throws this in the console

    Interface:! Line 17, column 18: no iterable type


  • @ulrik any insight on how to script the midi player to playback different sequences?
    Like if I drag in 5 different midi files, it creates 5 sequences.. how do you get it to play the different sequences back to back?
    The end game is to be able to assemble an entire song and have playback follow the DAW timeline.
    I saw @Christoph-Hart added a bunch of new midiplayer functionality the other day. Very thankful for that!



  • @dustbro I've never used multitrack but I guess you should make use of

    MidiPlayer.setFile();
    

    .... for loading
    and use

    getPlaybackPosition()
    

    together with a timer to check when

    MidiPlayer.getPlaybackPosition()
    

    reached -0, the file is ended and then use "

    MidiPlay.setTrack(int trackIndex)
    

    to start next sequence



  • @ulrik thanks for that! I saw in the API that it recommended not hot swapping tracks. Maybe there's a similar call for sequence?



  • Now there is 🙂



  • @Christoph-Hart I'm thinking that I'll need some playhead info to create a midi sequencer...
    When I remove these comments, HISE wont compile

    void MainController::storePlayheadIntoDynamicObject(AudioPlayHead::CurrentPositionInfo &/*newPosition*/)
    {
    	//static const Identifier bpmId("bpm");
    	//static const Identifier timeSigNumerator("timeSigNumerator");
    	//static const Identifier timeSigDenominator("timeSigDenominator");
    	//static const Identifier timeInSamples("timeInSamples");
    	//static const Identifier timeInSeconds("timeInSeconds");
    	//static const Identifier editOriginTime("editOriginTime");
    	//static const Identifier ppqPosition("ppqPosition");
    	//static const Identifier ppqPositionOfLastBarStart("ppqPositionOfLastBarStart");
    	//static const Identifier frameRate("frameRate");
    	//static const Identifier isPlaying("isPlaying");
    	//static const Identifier isRecording("isRecording");
    	//static const Identifier ppqLoopStart("ppqLoopStart");
    	//static const Identifier ppqLoopEnd("ppqLoopEnd");
    	//static const Identifier isLooping("isLooping");
    
    	//ScopedLock sl(getLock());
    
    	//hostInfo->setProperty(bpmId, newPosition.bpm);
    	//hostInfo->setProperty(timeSigNumerator, newPosition.timeSigNumerator);
    	//hostInfo->setProperty(timeSigDenominator, newPosition.timeSigDenominator);
    	//hostInfo->setProperty(timeInSamples, newPosition.timeInSamples);
    	//hostInfo->setProperty(timeInSeconds, newPosition.timeInSeconds);
    	//hostInfo->setProperty(editOriginTime, newPosition.editOriginTime);
    	//hostInfo->setProperty(ppqPosition, newPosition.ppqPosition);
    	//hostInfo->setProperty(ppqPositionOfLastBarStart, newPosition.ppqPositionOfLastBarStart);
    	//hostInfo->setProperty(frameRate, newPosition.frameRate);
    	//hostInfo->setProperty(isPlaying, newPosition.isPlaying);
    	//hostInfo->setProperty(isRecording, newPosition.isRecording);
    	//hostInfo->setProperty(ppqLoopStart, newPosition.ppqLoopStart);
    	//hostInfo->setProperty(ppqLoopEnd, newPosition.ppqLoopEnd);
    	//hostInfo->setProperty(isLooping, newPosition.isLooping);
    }
    

Log in to reply
 

4
Online

552
Users

2.1k
Topics

16.1k
Posts