@d-healey got it! thanks

Posts
-
RE: How does the .keyPressCallback() work?
@d-healey Well! had a good sleep! back to the arena.
Do you know how to catch the "note off" or key release from computer keyboard?
Im handling this way, but obviously got hanging notes due no note off.HiseSnippet 1507.3ocyX0sbSaDEVJIho1TXJcX5zK2wSuvvjIwNwwNoLLjDmevj3DSbBAZufYizZqkHsqP6JCtElgmh9HzGhdaeg3Mn8rR1VqHNAiKvTcgGc9aOe6YO64bjaExsIBAOzvL+w8CHFleqU69LoacWLkYzXKCyaZ0DKjjPTBqM6GfEBhigo4r6pXXlaNi3m2+fMwdXlMIkkgwS3Tax9TepLkaq02i54sC1gbL0WS6Jq2vlypy83Q.dl0pjQ.19bbWxAXkZyXY7Prv0v7tVkVoJgTa4NNN3kW1oZ0pqs5ZUVqLtSoJ3yJWcsJKUo1RqVqig4011gJ4gskXIQ.K5lbm9sc4uhk3fmPEzy7HJhxFsAOmv1ntK0yo0vfivvvzpUZnZ1jP0ssZRcni3mFx9tXAnTKzCZlybUPp7m.jL0fzbIP5VVssCoAxTIJ7bcqFL3DrCFNazgRhtFyb2qYUmCZvjK3iOmrSHPLxhhUKUZdD7yctW974WbwVd39HGhvgfjDaOrCG8xWQBk8yCGdBIpGNDEfYDuGGyEcezv0tKQVm6GvY.QwBZ5THdoUFZyEQ9Dm8H8EiLuPxx+3S29nieFV3zYi1asyu8Z6d+xSq+j.NMp0gMNw67W31c+8dzC20mcVyC1rvBh.OJ3F0Zu3hevZ2BrRsxSj040P5BB0dfMbgZEBAYhn3Ef8XLan50wddmA40E6DwrkTNqHoGDPtS9eOOBdTHMlwVXIFvXBW0SApXGtcj.xyXcIE94D0VHC24S011EGhsgCwQZNhilVh.hME6AfajZorlW22m5Rg7U3FotqSYlQ28IRcGOjQFc1h1kJ0TIlVSiyI8qycRc1.ZMMfjv3DXHFNRKMd56RWZmTeESoGo7cRiQ9NZRvdoVAuGK3s2KuJCf6QVHHjBYxxP0sjjCQ04dtEWD0DN6eAGM7Nh.oxY2EUzmx96+RXGoX0G4i6Oj5NwqMsCpXlcK592GUcEzadS9bJ4WP1pKe4xpt5kKqVoDGllckcOUPkpBwPUkeTDCmrMT6G0FQcqXncwcKVH.JJb.WpJc3eRihkUELlGsVoAJ913em93BwSPFevo1RpM4PvbQwUtZwqb0hqNsQoce3i1a+IILUaoLgo7uMtTX9g0FPblR+CYEU0GxkGBjennNcFqLUQ2PtmGIbrhUcdCuJCKxh7OCtxBEj7hHiTD5zjs800lr1W1I8.zTjyZvnxCCHCn2g64nZKod+hM6LFzDAd6jFpRip9eC3A5E.UYoJ3XtEoGLwQR2vbVaQDmK4AvvCi57.PVFK8FC5UtO9LhmAEbcQq5dT6ySZegjbDTsj1C1mnjlOH04Gk0030oCs7r06Oh3c+55uh5HgQTrLeOP6RncckJphFwagKCBsTNLFB2vRqsgteZn4GiCR8iqote9i34qtvXAv.IbG35jL6TJp42FH.N6yLZfp8OSPk80mu6SXzkRW4nKSJDukUKpz1c7XblwfQHq3KAFGLv2Mr1tSGhsLEfyYsySm1o6lb2eyD2ecq1TFItRRry+gXZzo3dPAGBiDpBdkuzIze2y9yIcB8fIdB8Cskf6ONDyDAbQlEtMwmdLjuKzYdh.J9Qd4QpSSc9043vwJ58OXGXSNVaZikQgwoEa3yiXxLoAyl8bXtIqLU1aDZ5Olwum6K0WDL2jky7QJX9++p.Y9.lbCwXapefGYaVOhGTVOFieOTGuCNxSNja1j7lbFOvkyn15Y.GQjgztcIg5XeranMjRXd7TN2d8iHdDrd17Os99PVHNDhSjoLV7o+wbi875GsRfKRcyD8e4b6qZZ1UVIe1IpR9mc7N8U0+7.ki3QRXZhlXHQE5zacPjeanvpMQ8sbvP.BUG8YTEGSnKonSprxbhI9G3YfvxJZyABKOT3WEe3isC4O2NYtQUt72DyA12r3+3lbVMUznxFwyRpeF6CUEetsc1k5BFtzzZ3xSqgUlVCWYZMr5zZXso0vU+3FpZZsQjj6mbk0vnYqsiG91zbaFFx3iucX7uMR0n2.
The desired behavior is already happening on the built-in HISEs keyboard. (once clicked, you can play with your computer keyboard and it's getting notes on and off)
-
RE: How does the .keyPressCallback() work?
@d-healey
This is what 14 hours of screen time does to me! Sorry.
-
RE: How does the .keyPressCallback() work?
@d-healey sorry, many tabs opened. Wrong thread. The issue you described here:
Return the old Content.setKeyPressCallback functionality (that we had for a few days)
Just ran into this myself opening an old project. I have a label. When the user types into the label I want to perform an action based on the text that is ty...
Forum (forum.hise.audio)
-
RE: How does the .keyPressCallback() work?
@d-healey just got here with the same issue! I found the problem seems to be using a Label. Have you tried a panel? Mac works!
const var panel = Content.addPanel("p", 0, 0); panel.setConsumedKeyPresses("all"); panel.setKeyPressCallback(function(obj) { Console.print(trace(obj)); });
-
RE: Recording MIDI internal notes
Engine.getUptime was the problem. This one below works.
HiseSnippet 2144.3oc4Y80baabDGPRHIjIQIYlL8k9xE8DTrJLokLkT8zwRhTJR0V+IBRJJSmVMPfG.QD3cvGNHaZO9qQ+nzm6zOA8w9wveCZ28N.R.QZYNJMcTa4XKIr+41c+s6s2dfGI39zzTtvvr9ICRnFlelk6.lrW6ddQLi85XX9qs78RjYB5AbIM8hrT4UWvnu7hFNMM1ZPhWZJsqgo4reGpfYs4LTed2S2xK1i4SGQxv3LdjO84Q8ijindzFOKJNdGutzSh5WR5U1XOeNqMOlmAN2rVMLR77uxKjdfGJ1LVF65k1yv7asZ73VT5pKGzsq2xK2sUqVqu15qrdSufFq3cYyVquxiVY0Gs1pAFlez1cijbgqzChDCy41h2cfaO9KYZCbVTZzkwT7glFtfk0j2gG2ECQjpQ6dQwcOp.0RMLLsNZDFNqFC+Zq8i5FMj9Hr7KULHiznL.ZNSU2a1JtWyxtWiRt2DboYK4RebQZU4RwdCnBkqLu0960YOhlR0LY6LgfxjtzWjQqjAe2SyYch.xEko+bNOYalG3dcKSFW8KAQcSnUYXN6TGqMu0X0.CqchhoXbaV7.HMFiPQRGOomg4arVaMG1Isd1Zs6c5Z643z6TQmKctLriSu0dvCV+jSZ8ia9SmGt+flO9zffC+8thceF0k17jCudyiW87v04u9kWsdnfdkeauf3ya88mEF+CsNL9X2K4qDJV4zlu90x1as9yNe2PmfyWc4WQOd2vsbbLP+YXMqoIVk6FEx7vsTPI4AY82xChjRfyA79Q.eL6UP7q2nCkMN4ubCD3APTHKuOSmMp.3mP6mvGQ3OsgQoZj4z0HekkquHJQNhCBhep0dLIUD3AUBkqRzxZX92rZyAAXRm9dWQ2Q.OLTA6VMZrDA9whOod8fLluLhyHbF1J4Pl8h0eS8Z0eacxMYEDLQdngD73XpXhrQnUbaJZyx5eIUrD4Zu3L5PAA.nZ0n0zUM5qi6RBxY6whjGlPYuu1EF4fE7Wmtmp3DvxbZfbITgLBcAyNzqglk5DSMqNzzqj7DioNqU25XpOWzkJlTRaFqZVf2mJIZoH+NRQRzqa2sxjRNydAMuEVhzrA9eLGFwhiXzxPqVnB.1mCkYLXcJiwCI5jRk1KHouRtPNexSIK3BAVteDwBWf7aIEVFrXMIteAKvAebaVHXcmPp7zDjtMJP8ZQAD6bqUCLWMrqCZpyPZ1AdwoTTPMc+ddrPZWkpustV4uoP6ZfVi5Shx7VHn0dCth4gYau3Xrsl8MBeDgzvJt.SFTQNHj93aASQY94hnJbTYLLRKXg87ya46j.+1twhfbkolB5Zi9E.NE.43gcIODCg5BZHoblpwSTjDEYUfze3OBB9vGR9Npj3AbBnB7zEhjSj8nJefjnbBmbPrjaA5qFKAy8kRPKT9LrETdxMQS.5wVJ1wQo.DhYeFMdIBCnMra.Ml6GIGrDIgmFgZgfLA9.z8hI8GU54KnPKh8g8YvjH6hCFnpRPY6iHEtkztuit+VYFHkCT1ydjoKKvY4Ngcg2TlYasaam69UrHf5oRu9I1i1c3BOBmHtCWrOLaUjKjEXcSsKhNx2BUdPO47koTjxmpHkOLR4N4sqKy41BU96OZd3Cqg0AwTVnrGgGnpJvEfXGwHo5PZwkH8f5Fk+2Okzjjphskfz7OASlhESCfAFIwQWAUcokBs70sbSj2CLovlxQ5cGgIOH2tUfZnRzIIKsmc+bxinv0a7FqJ9F8kvd.pFWC2f4jaGnGlfBiVvTcFqrwlJwQQrW.5THEYT8OwlCZ.Rlp22BpEvEDaJAf8gqOtvnEoNQoCOhFIVSomBTFAT59x508EWB722C165SihKggeeFzqfJ1BpyPfLGRskoKt3XNutZz9EWtDYEnu43BDDCvWd05yA3zdjm+j7.5pwBHnCVJOl5jHhXR6qb5lg9NpvHb0Ol5oOInt9y6YLFU5H2A.LZS3b7fH+HuXEL8lb36axOKIr3zIEF9l5HPN5XFMqhzyPNkO5BN6pF.A0FZwPFWP29Z3LgQJpS.LVQBP3w5BylASkACkspRD3eEcHGFyKQJV0vQaVgcdLFdjEn63mCS9MiZ+u3SvEV2tNesAPpYI8anO78+SG7yblbuBDUpFga97Q3zyHXDAip8I4yuYn73xC2aLEZ+QV39hBcsLU5cWl2D807QM.v5C6suBsVcvXCJ9CioZAxcXk5+4JpO9.uvkn4cyhwaBU9l036eHmAj6qL0KdeDFzYdPkqf9uqqaOst3WYcTjzu2j8wYlfOhkJ+B3i4ujhO2Z6f.pubjCNm0Nm+Kyajnr4mWa9O0xE5gn5RnL9uR8L4G7tlBiHxnBD7ts2vzeeZeCSIS8aX5PeIX9Sf1jovI4UdwGtz9Qm.kwoks1oov8cou3XLaVldaNbi9Iw5cOcGHHmnNt3KDPUVrYedFqx84u4aKYtoqM0G3EWM28tWb0+ErY2zrjO9EZe7is1b2NtGmuIW82vQj3b7IzpUv6yY7jdbVje4z6wToHJLjJJ6wSLL1TJg6e0NSbckp9NTe35X2jpV3wo7bJ3ZkIiS2O1xMjv+3urgKLZck8d+3e8XJLWTZkcSa6ygTB8NB629q4qxaY81JM9bKcPRT60u+cHv7E9mNKb+yA+LKU5+9J98EV4Ei2aAv4sx2abeEBu04Pl8+smC4XdlDtgCbaHQDNr4AY8cgi+8o4WyAuCf4L3Q35maTL8rKk0U8v+D9jyrI9rYNylEL+OhM564K3W3quI.1e7STTf3lo9pFpYsO9Lo432enObP9E99UWpwT7Q2UEW9tp3J2UEe7cUwV2UEW8tp3ZeXEw4r1LSx6q2ZZXr+Qaq+RrLG9ErYNqw+BzCBbcE
-
RE: Recording MIDI internal notes
@ulrik yes I did. I stoped it manually.
-
RE: Recording MIDI internal notes
@ulrik Yes!!!! it records the random notes! thanks mate. The only thing I cannot figure out of your snippet is why the track is about 100 bars long. when it's created with just one bar.
By the way, were you able to pass them to the MessageHolder? there's not setEventId method in the API
local m = Engine.createMessageHolder(); m.setType(m.NoteOn); m.setNoteNumber(notenumber); m.setVelocity(velocity); m.setChannel(channel); m.setTimestamp(Engine.getSamplesForMilliSeconds(position * 1000));
-
RE: Recording MIDI internal notes
I also found this doc you sent here on the forum posted by @ustk some time ago. But cannot get timestamps to work. (My poor approach was with Engine.getUptime)
HiseSnippet 1832.3oc6XEtbaabDFPRnoDs0SRal19ya7jYJjCKnnDMk83oikDEkCarjkEocxjNsdNAbj7hAtC4vAoxoSeG6iPeD7aP6t.fDGjnTn0jzIosb3evt2t62t2d6t2cpRFvRSkJKa2QyRXV1+bmgyD5o8lR4BqAGZY+abBnI5LE6Dolk9lrT8aeyV96XcvrDZZJKzx1d8mgK1twFV4+d2SOfFQEArJRVVuVxCXOmGy0UTOcuOmGEcDMjMhGar5N6MHPJ5IijY.vV2YKqDZvaoSXmPwksli0mQSmZY+.msdXWFa2cFGFR2Ymvtc693G83NOtMc7Vcnm2t6i6rcmc29Q6N1x9mzOjqkpgZJ3EV1abfLb1voxKEEF307T94QL7i1VCAKWP9HYTH5hHUqdS4QgmNOhkZYY6bZU7a8h32G6bLOjufdUb7CyYPpjvL.ZuVc3sdM301DdaY.uk.o0LfzGLeKMGRQzYLUNTtmywCNb.ofR6Z.oWlRwD5gruIiUaG7cOsj0HErWXR+4RYReAEfWnIYT6mCKcXBqNC60WYes8s5qVnacDOhg9s87OfUi9HjjbHUSsr63ryC8Ei594Op2zidYOe+ieY+u5q2222+K8822+T+X9YCGMX6uBn3en+EeZluuEpnEIa11X54P9DAEOG.4RmjEe.EfvBu5C26DYLG3ig8JhGxDKiLFw.uWoMOfTDFqEoFwhSjUD9K6YYr4tQwl6G4LLPwSzUbPu+WURsJcq117ZEbsV6O553pXSHZzAQD8DWWWtHhKXjwYh.MWJHRwAYZsTrcOoPqjQdAR.WBHWnI4BZTFaS2+laiEpf7GH8ES.M3OgoeUBR2aym392AUiJ.DCYzatN7teo1u+l9oH8baziFEgYOdW03ahHj3t.bzvPrvzKDdQ7T.PASoBAKpIQ.TEYwmyT.JYQx.tdVSRhLkixgPl.+tfpHwUHNPwfjxigHFTs4yvC+JD63JiQzgwbuX+BKZx.obRt07pLr4BdcID7liESl8J.sWI3qYQH7kpowIdUA0gvmPV+QR0Kyf.NSc.f5TuE9Vo7KbP4J4fxENnrvAGO1jys4gxa1Ij2Qmf7ojHlXhdZMuA2i8SxRm5EWRtUqJZRLMy854FiG++SN9efjCyTg4oGWK4vsUKxno7TxkvnGjofSRfoLxSHHokc87cw.SDDX9S+YrbStPOioIThhMlov0PzRhdJij2IMIuSpuKL0RpNOphjK6uBpIejJzupZD6ceydv2GKqAFYv3qpTRnjkJ9cZxT5ELBULiDTTDkDIgAmBaRtjgRJftrHlJ1CAjB8NzyV3RjwbUp1kO1y.Y97z93p71bdFOnndEJ.pMSNGbjK45ojNs5j2hfjNuIX9pMUUgc85zjf+Kh0sZYtBEKPpB81Bc0apES6asECftSjWBNL4qgwPIX6r7vEtIuj8CHZEB4IZBWWFVxUAkjnjIrh8Hi.jRFCqz2sgInGGA4NkmHdNXFunUnUV6auUVayVYFgfx9X4tJfhBi5CQboh0+BT+ZEDIdhaCildMIyW3jpSYaBToPFmBh.C.45tUSR2c2r1ZWTyAHe890jee0LAMIsQi51.vcpLh4mn3fRutPEqpUqqV.98q5ay4msgTHxUCOPo773iYo8aLDTQ0n9DvX6cZR7tcedyENM3POvswpUorwxKS13VqQ13FJP136jpiMdPqqDGKy9hPHmmpUmMZvkyY9YyEacKNXhKDlHs9b8Nq1b8kkyLVnTLPv0uHgItoKdYUd5CuuSIpfkpyGH9dki9VbVyhiST6TdvyJGxliXa8dH91KQ7WMH+VFvL0kP5z7ZKZNFArOjcAbq2hA0a3bHK8sZYRNlKqX.AsU.0+0JSNZuYUe7I6Y8doosMzz+L4JZ55Ws.twpLLKBu8h40XwK6Wx.xKpc6wAXH.RBmU69deWc21UEhejyobcvzkiw0VBFwznuGvX4KB7Kb5OdLKPWAvMbN5K+945+ll+dEl+m4LDJajOARtw+04eS9BbbhmwDLEF7ZeKOmy+XUeNmjU94bdQfFL+Hn8TJTzplhGxh4ifL5TShuJkcjh8Mmg6llz6IgaguLVu6oGAN4RkYHN+RdZw9wxLQs6fe0mlXiUqD12xqDswO3dkneDbX211.iMliwgbryWeAN0.PAw3uDpqNllEomSsdt7wRgLYpTvCL2nOioU7ISXJSruTGZest16c8w6cFKhQMSZ+j8dNjrQUPbhcGiEsW8Xwsse8acJfKAO.R9waQ50+u6hzmIyzbwDXDcEG5H6.SENDpMFvJGBDGdxdMr9Vw2ageWTbTDl+w+B9UxrM9scIy1yY9eDaDSCTx2DTLAElm9Syo.9sH+sSa3bL9M4ZycYYECU4dSPPcUcMA29tJ3N2UA6bWE7g2UA6dWEb26pfO5aWPrIz9YZYbwQSKqiOsewyoau3o9sW25eC3+GRZH
-
RE: Recording MIDI internal notes
@d-healey Hi mate! MidiPlayer.record() is already working but only for incoming midi messages I guess. The snippet I posted uses that function. is already implemented...??
Content.makeFrontInterface(600, 600); // Get a reference to the MIDI player. const var MIDIPlayer1 = Synth.getMidiPlayer("MIDI Player1"); // If the MIDI player doesn't have any content loaded, we // need to create a empty sequence first if(MIDIPlayer1.isEmpty()) { // Create one bar with 4/4 time signature MIDIPlayer1.create(4, 4, 4); } MIDIPlayer1.record(0);
-
Recording MIDI internal notes
Hi mates!
I cannot figure out how midi routing works. I want to record midi notes generated with a simple Synth.addNoteOn(random note) but Midi Player is does not see them. Instead it records the original played note. No mater were I place the Midi Player. And in some other chain, it will not get midi from root chain?? Any help?HiseSnippet 1439.3oc0X80aZbDD+NCWRMIwIQppOuJuTbK5BDSv1ppJ17OGpCNHe3zDopFs9tAXaN1kr2BIjp90pO2OB8w9wHeCZm8tCyc1TGDxIs4DBwN6N67am42L6bzQJbgf.gzvLW2oi.CyaZ4LkqFTa.kwMZU2vbCq1z.EHIQhpNcDMH.7LLMybfVf45YMBed+ipR8obWXtHCimIXtvSXCYp4R6r2gLe+lTOnKaXhUWduVtBdMguXLhmLVEMFQceEsObDUur0rLdLMXfg42XU7gU.X6s544Q2ZKuJUpr6N6Vd2RzdEKSOsTkcK+fxa+fc1tmg40Z3wTBoihpf.CyrUEdScFHdCOx.OiEvN0GzCJY3fVNRbSgum9HpkZTa.y2qyLGUfggoUm4tsLQtsuzpMyicl74tu6DNAYtFIcflqkFdYRAuR+avaAPZsDP55yhjgPxmNEjyhjsp2hDIoTJfTarTBbkC75wPpH36eT7TckXrHo7mHDiZvoH77RJVu6mhK0YDjdByLWQmUC8wpIyGzmayYCvUqOiHIoNUQMLcs1tnMuakC2o1fNAGXa+tC63zseyWXiOMs6XaWeRY96pexaCZpEcn5nZ+x96bRusredG65O+YC496WUY+C1Mqaau82dncW6pcdXsN0mXWcqSZbhWUCscOiaZZpYyNr9bpZrDkcsiFOrJEQ7YNg6r2QhgLbdcTZtv5.eQh0NXzYIUIymh75obrcggiDyE7y6YjfKjMhKbWKGWIajZ9LZm0MrZwwL6dTLhmjMDsVi09o0rpIvUvU1CouBZJwAmoQ9JEKVffes42kKWt6eexAfhPIRnGH0bHhRPTC.RHmaTHmyNGleGnHSnxPwwLQx2SBq4X2GTyor4uWR158zVAMRqdmeSIdBHf+0Jx.5DfP4SItQXl3KvRLdEHuAzZxQ9nFStR.IfHRQ2lZJIHlxS5wjApbrd4SfLaVPC8pxu4l490bD7A2nZQaffCjSwCxaXpAjx2uLQggeRvr3e3pStUQ1Me4BD8G737a4xkbdI3Jjd40tydi4tJlfi13HgBdJOu17q2FibX0PazDBIzXBdFyqjiATi0ibfTOuXEJUfzlhRjTtGFxxWdmBUJtYARIcPqXn0Im2L85EYmyMmlBHE99XHYQSqY8xKSw77wCOEjEvvtOB1YKD4loKHbskqfPbzMwBE7Vbl5oif3wWd0aiXJM9qSZEVq.o7wxv0MBjJlFNl0gI3cWQ4OqaUGBdkRLxXAIWXIdg2Xec9ax595aGim.8GoRvzIQ7.lZZpBjK+kAEu7BjKIDuqUGlxcvhw3ZK.i56Y9Hfw3qPukUid8.W0b.l0p4yW06KWdyuQj4ugkCiCg4QgF+qBGS9QcUkC.NH0NuRWR+O+4x1+ynkt+mm5pPyiW8xCFIBRcsrCLj0EqAEjzZmDfEogWerNZlTdMAdOzhl58OpIdHWnNN5xXgzh8GJFyScKz4uKO6xk5lNiHw5WPCMY+X0iU1kiy7AJh7IqJvUBbMMSf2aGg2qas+iq6bbbkfveSZvm.9XIvzz71BtXz.Am4ljCbLnjr98AYRzuviz9JE1PH1G4jToF0AW5zKHMZwWTxS.DZIE+X7Degs6LA+0uumy3.UpDzW7GGC9.MHUJWCWAFdfUrP7GnqbqkjlbKqnCIIrfv+MbjkkRuwLrFEQ9+MXuoUHs3yA+5sshIreV3X2vJNW5yAW6k1nSlkpQmqb7t5M8b0.kiEiULde7kDjr2hUpvWV0A66vEPjv4fOZHKy0z8NDMtndbXeA.2KbveiOwSVRO1LdxRyl7ShMFRckhW5F8pF5ZteQnD7byCey70sZqGSJYD95GIiwCwlFdoqa5s5BJ9fUUwsVUEKupJ9vUUwJqphaupJtyGVQcOc6OVIFFkxZXztSin+aGyy9emLyX7OrNzMZD
-
RE: Advertisement and the use of brand names/famous equipment
@cassettedeath AFAIK you cannot mention or show brands. This is what trademark is for. Brands can claim you are making money with his names. Or even worse. They can also claim for hurting brand s reputation. But I strongly recommend to ask a lawyer (or chat gpt LOL)
-
RE: Spectral Morphing in HISE
@griffinboy AFAIK, Loris does a cool job with noise-bandwidth, making many improvements to the good old residual noise + sines.
Nice idea to use a C++ custom node instead of Loris HISE's API. Will try that!
Thanks mate! -
RE: Spectral Morphing in HISE
@clevername27 WOW!!!!!!!!!!! What a lesson. Love it. Will take the time it deserves! Thanks, mate. You are passionate!
-
RE: Spectral Morphing in HISE
@griffinboy have you done that on HISE? or python Loris?
-
RE: Spectral Morphing in HISE
@clevername27 hello professor! sorry for the delay. And for my lack of preparation!
I want to achieve this kind of morph https://www.cerlsoundgroup.org/Kelly/sounds/trumpetcry.wavI actually want to start trying to use amplitudes from one audio with freqs from the other one to see what happens.
I can see Loris already prepares freqs and amps for morphing when I dolorisManager.createEnvelopePaths(file, "frequency", 1);
Interface: distilling 24314 Partials Interface: sifting 24314 Partials Interface: collating 24330 Partials Interface: distilling 24266 Partials Interface: sifting 24266 Partials Interface: collating 24276 Partials Interface: channelizing 24330 Partials Interface: channelizing 24276 Partials Interface: Prepare partial list for morphing
And this is how it's made on C++ but can replicate on HISE.
Going the FFT way is much harder for my level I guess.#include "loris.h" #include <stdio.h> #include <stdlib.h> #include <strings.h> int main( void ) { #define BUFSZ (3*44100) double samples[ BUFSZ ]; /* clarinet is about 3 seconds */ unsigned int N = 0; PartialList * clar = createPartialList(); PartialList * flut = createPartialList(); LinearEnvelope * reference = 0; LinearEnvelope * pitchenv = createLinearEnvelope(); LinearEnvelope * morphenv = createLinearEnvelope(); PartialList * mrph = createPartialList(); double flute_times[] = {0.4, 1.}; double clar_times[] = {0.2, 1.}; double tgt_times[] = {0.3, 1.2}; /* import the raw clarinet partials */ printf( "importing clarinet partials\n" ); importSdif( "clarinet.sdif", clar ); /* channelize and distill */ printf( "distilling\n" ); reference = createF0Estimate( clar, 350, 450, 0.01 ); channelize( clar, reference, 1 ); distill( clar ); destroyLinearEnvelope( reference ); reference = 0; /* shift pitch of clarinet partials */ printf( "shifting pitch of clarinet partials down by 600 cents\n" ); linearEnvelope_insertBreakpoint( pitchenv, 0, -600 ); shiftPitch( clar, pitchenv ); destroyLinearEnvelope( pitchenv ); pitchenv = 0; /* import the raw flute partials */ printf( "importing flute partials\n" ); importSdif( "flute.sdif", flut ); /* channelize and distill */ printf( "distilling\n" ); reference = createF0Estimate( flut, 250, 320, 0.01 ); channelize( flut, reference, 1 ); distill( flut ); destroyLinearEnvelope( reference ); reference = 0; /* align onsets */ printf( "dilating sounds to align onsets\n" ); dilate( clar, clar_times, tgt_times, 2 ); dilate( flut, flute_times, tgt_times, 2 ); /* perform morph */ printf( "morphing clarinet with flute\n" ); linearEnvelope_insertBreakpoint( morphenv, 0.6, 0 ); linearEnvelope_insertBreakpoint( morphenv, 2, 1 ); morph( clar, flut, morphenv, morphenv, morphenv, mrph ); /* synthesize and export samples */ printf( "synthesizing %lu morphed partials\n", partialList_size( mrph ) ); N = synthesize( mrph, samples, BUFSZ, 44100 ); exportAiff( "morph.aiff", samples, N, 44100, 16 ); /* cleanup */ destroyPartialList( mrph ); destroyPartialList( clar ); destroyPartialList( flut ); destroyLinearEnvelope( morphenv ); printf( "Done, bye.\n\n" ); return 0; }
-
RE: Spectral Morphing in HISE
Got stuck on this:
lorisManager.process(file, "morph", ??????????
I'm implementing dilate without issues
lorisManager.process(file, "dilate", dilatePoints);
Is "morph" available as "dilate" and "shiftPitch" are?
Hope you can shed some light on this topic :)
-
RE: FX chain for a sampled rhodes piano
@d-navarra hi guys. I’m on vacations. Wil reply when back in the studio. Basically I use Faust for FXs. But stock reverb is more than ok for me.
-
RE: Scriptnode Synth smoothes transients??
@clevername27 hi mate. I’m on vacations. I think i went with the scripfx mono to avoid smoothing. I will confirm when home
-
RE: Preset browser LAF Dialog modal
@d-healey No, is that I'm just an idiot LOL. Thanks mate. To many hours in front of my computer... I need a break