@d-healey Haven't yet tried another host, been stubbornly trying to get this to work with GarageBand: Kids with access to (school) iPads might be an audience for this experiment, so it would be great to have this working in a freely available AUv3 host like that. It's inspiring to know they sometimes get to play with GB Live Loops in music class (in my neighbourhood), so I thought: "Why not some (free) AUv3 plugins, too?" - but I'll try in a host like AUM and report back.
Posts
-
RE: Sound from AUv3 plugin to host on iOS
-
RE: Sound from AUv3 plugin to host on iOS
@Lindon said in Sound from AUv3 plugin to host on iOS:
... what you want to do - which might be to get MIDI In to HISE
Yes, would like to use the plugin as an instrument in this host. Maybe there is something else than MIDI messaging missing? - at least it makes sound with the "in HISE" keyboard.
-
RE: Sound from AUv3 plugin to host on iOS
@Lindon Thanks, but how do I get the AUv3 host - GarageBand in this case - to send messages to the plugin?
The "in HISE" keyboard test seems to confirm that the plugin is alive and can produce sounds in this context.
-
Sound from AUv3 plugin to host on iOS
Managed to run a HISE plugin as an Audio Unit Extension (AUv3) in GarageBand on iOS (with sounds shipped with the plugin, but not dynamically loaded ones, as I've been able to do in other containers - will try to figure that out later) but now I'm trying to get sounds from the plugin to the AUv3 host (GB in this case):
If I assign the plugin to a track in GarageBand, then sounds can be heard when playing the keyboard in the plugin interface, but when playing the GarageBand keyboard, no sounds are heard, and when recording, no MIDI events are registered when playing the keyboard on the plugin interface (and when playing the GB keyboard, notes are recorded, but they don't trigger any sounds from the plugin).
Could this be a MIDI communications issue between the plugin and host? Do any settings come to mind that I might try to change?
-
RE: Dynamically load instruments over the Internet?
Made a couple of changes which solve this issue on iOS, discussed here:
-
RE: Dynamically load instruments over the Internet?
The above procedure of downloading the files to
FileSystem.Samples
works fine, until running on iOS, where theSamples
folder seems to be part of the read-only app bundle. So downloading toFileSystem.Documents
might be a better idea, but after loading the sample map, the Sampler seems to be fixed on searching for the files inFileSystem.Samples
.Is there some way to instruct Sampler to look for the (monolith) samples in
FileSystem.Documents
? -
RE: iOS app with HISE
Found an Internet Archive snapshot of the page at
http://hise.audio/manual/ios.php
which currently displays some error. There I found helpful information on the missing pieces:- wasn't using the Xcode project generated at
Binaries/Builds/iOS/
- needed to add the Apple Team Development ID in the HISE User Settings and an App Group ID in the Project Settings
Now the same basic project, which I've previously built as a desktop standalone and -plugin application, runs on an iOS simulator and an iPhone device, which is quite amazing.
- wasn't using the Xcode project generated at
-
RE: iOS app with HISE
Hi - I'm interested in catching the iOS train and might have enough tolerance for frustration. The experience @ursbollhalder describes above seems to give some hope. I wouldn't be doing complex interfaces, to begin with at least, so suboptimal graphics performance might not be a problem.
But I'm unsure how to start experimenting in space: With my HISE project open in Xcode, I only see a Mac run destination; no iPad/iPhone simulator or device destinations (even though a device is connected and shows up for other Xcode projects).
If I open
Binaries/AutogeneratedProject.jucer
in Projucer, from within my HISE project, I only see an option for aXcode (macOS)
exporter, while withHISE Standalone.jucer
open in Projucer, for compiling HISE itself, I see anXcode (iOS)
exporter option.Do you have any ideas on how to overcome this initial hurdle?
-
RE: Sampler Playback - ping-pong
@Lindon Have also been thinking about this
(just not yet deep enough into HISE to look into this possibility or ask an informed question - still trying to compile a hello world plugin : )Would it be possible to combine two Samplers? - one populated with a reverse copy of the sample and some silent prefix, at the same length as the original sample? Could the first one with the direct version be populated with a silent suffix, so it's also double in length? - and this programmatically? If that would be possible, then both could be looped and maybe some crossfade between the intersections?
No idea if something like this is (automatically) achievable.
-
RE: Dynamically load instruments over the Internet?
@d-healey Thanks for the insight. Then it makes sense that there is no Special Location FileSystem constant for that folder. I'll just download the sample maps to the Samples folder, alongside the monoliths, Base64 encoded for loading with
Sampler.loadSampleMapFromBase64
. -
RE: Dynamically load instruments over the Internet?
Tried something like:
samplesFolder.getParentDirectory().getChildFile("SampleMaps").getChildFile(sampleMapFileName);
which works, so I'll probably go that route, if it isn't some kind of an anti-pattern?
-
RE: Dynamically load instruments over the Internet?
@d-healey Wouldn't it be best placed in the SampleMaps folder? - then I'm wondering how to get a filesystem handle on that folder.
-
RE: Dynamically load instruments over the Internet?
The approach I have currently implemented is maybe ok - sample maps are not large so redundant downloading isn't a big problem - but if it is possible to persist them in the plugin folder structure, then it would be interesting to try that out as well.
-
RE: Dynamically load instruments over the Internet?
@d-healey The aim is not to have the sample maps predefined, but generated mechanically.
For a bit of a context: I'm exploring those possibilities for the synth.is project, where you can evolve sounds[1], render them as sample packs and currently download them along with programmatically generated SFZs[2]. Many things broken there and I aim to continue working on this research project in the coming years, but all are very much welcome to play with this (I know the interactive evolution part is broken, which is a regression resulting from work on quality diversity search for sounds - I welcome requests for accelerated fixes : )
Just as SFZs can currently be rendered and downloaded, it would be nice to be able to obtain those sounds directly in a plugin.
[1] https://youtu.be/dm2cgPqQVP0
[2] https://youtu.be/3eLo8qORiMQ
(YouTube links here as inlining above was causing problems) -
RE: Dynamically load instruments over the Internet?
Now I have written some code towards this functionality - a milestone for me, as this is the first thing I've actually done with HISE. Really enjoyable getting to know this project and community.
What I've done so far is:
- hardcode a list of sample map IDs, to be dynamically fetched via some API endpoint
- when not available locally, download the corresponding samples monolith HLAC to the
Samples
folder - then fetch the sample map Base64 encoded and load it into the Sampler
The task in the last bullet is done every time a sample map is selected (for now via combobox), which wastes a bit of network resources (and I have to choose Tools -> Clear all Samplemaps, so they won't be saved in the archive/xml). It would be good to save the sample map in the filesystem, like the HLAC monoliths, and maybe just download it as xml rather than base64 encoded, but there doesn't seem to be a Special Location for the SampleMaps folder. Is there some way to obtain a filesystem reference to that folder, as a target for Server.downloadFile?
Here's the code I've written so far:
// sampler const var Sampler = Synth.getChildSynth("Sampler").asSampler(); // sample maps array const var sampleMaps = [ "fg_01FFRFAGFF9M9R8D6AWHTX7XB9", "fg_01FNAAJA8CXA8CNAXAGVWJN0HA" ]; // TODO: fetch samples list from some API endpoint, instead of this hardcode // Internet communication Server.setBaseURL("https://storage.googleapis.com"); // combo box const var cmbSampleMap = Content.getComponent("cmbSampleMap"); cmbSampleMap.set("items", sampleMaps.join("\n")); // sample map selection // - sample map downloaded as base64 and loaded into a Sampler inline function fetchAndLoadSampleMap( sampleMapId ) { local sampleMapBase64FileName = sampleMapId + ".txt"; Server.callWithGET( "/synth_is_samples/map/" + sampleMapBase64FileName, {}, function(status, sampleMapBase64) { Console.print("sample response: " + sampleMapBase64); Sampler.loadSampleMapFromBase64( sampleMapBase64 ); } ); } // - combo box callback with conditional // samples monolith download and storeage in filesystem const var samplesFolder = FileSystem.getFolder(FileSystem.Samples); inline function oncmbSampleMapControl(component, value) { var sampleMapId = sampleMaps[value-1]; // ensure samples monolith is available local samplesFileName = sampleMapId + ".ch1"; local samplesFile = samplesFolder.getChildFile( samplesFileName ); Console.print("samplesFile: " + samplesFile.isFile()); if( ! samplesFile.isFile() ) { // we need to download the file Server.downloadFile( "/synth_is_samples/hlac/" + samplesFileName, {}, samplesFile, function() { var message = ""; message += Engine.doubleToString( this.data.numDownloaded / 1024.0 / 1024.0, 1 ); message += "MB / " + Engine.doubleToString( this.data.numTotal / 1024.0 / 1024.0, 1 ) + "MB"; Console.print(message); if( this.data.finished && this.data.success ) { Console.print( "Samples loaded" ); fetchAndLoadSampleMap( sampleMapId ); } }); } else { // samples monolith is present, so we can go ahead and load the sample map fetchAndLoadSampleMap( sampleMapId ); } };
- and a snippet of the project:
HiseSnippet 2568.3oc4YrsaabbcojWCSZ2Tmf7PeoESYKBnfk4MKqKV0wh5BsUrtAQ5KAoFBi1cH4Ts6NK1YVIwFHfh9Wj25mP+AJPds+M4On8blcWtConTUDRBRPIfL4bl4Lm62FePjvgIkhHqBE6NLjYU3A1cFFnFrw.JOvZ6MsJ76rOidJ6DtmK6HI0OzicjOM7HOA0kGz2Z8ggToj4ZUnvruDwoPw6Xo+7cuXcpGMvgkCxx5sBtCaGtOWkC8f0dM2yqM0k0k6ab5EVaaGQvFBOQLveyZW2Jj5bBsOaOJdrYrsJb2sb4JQTGEUwjVEty5B2gcFHNKH47ukK4G6wvEMr5.WTB31BPXbSfZsw.PzNHSOHsrJXePtVY1DsxmZuK2kOBdt14g5MH4XXpOJLy3r2riwdMLYu5Fr2TXoBFrzcRXoO1tiSDOTkuCxO22d6.EKpGET6lrRxYsl4ece6MDvIBTU8omvZGAKFgQkEqWedRy50ma0RkpUijXtiJAVAohbJMhzIAB44DsWR09LklY0qpTNc6xyUkJS+ckz6p69at+yHC.CHQIfuOkQnADd.WwoddCINdL39SnHAbv.bRugp5sRVrKMrxXLGdTIgFEQGZvlxrCKANEOb1UA76nKZGtTgW1WUhPJ2q+Q0azt8gsa8x1sWY2UNb4MWr06dU22uz6Wekxymej8Z05KZs7FuG9auVuu0Ke669h8p+pVkK8gUIjQxYOlxYPJaHId.kH8hD9DovmQZcv1DVfanfGnlGTAREi5RD8HpAbInZhbcDtLsPpMMALEwQ36GGvcnJtHnTGVzofzHYp0oR1aNbmJkGnTgxmUqlD72fPjp8Eh9fdKjKqB3VNUoA+7XA4Xw4FJKG+iGoS.0Ul6AZZE9gh.XQkxlGBuLy0HeToLWw7kkm2P2W8u.RXkx+4fxycIaFQx7XNZggG3wCXjdwA50I5tVAt6.YXxs54261tj4HecohdBGpWNXTSr3Bs4d5zCffXhviHkqpNWUd0RES0c.tduiqF7xs5VgTpXwx0jnO7QbYZVNYMfMqUFP8JHw7HZe8E5uxX9JRHTOVN+j3nY3hEAcqT3wpFFwQkZp5HhIA0rj8LxTnFn4.Dy7e8L0IPvqexgpLIVDMZWTpH78EktTjgTmADCiQgoyPvCzGM3IfqX.LgXR3ZlzLIBL8APulHgWEmLWl4Ax4EylqDH3FAfiI.Ux8U9J8oebiOfLdohiEDC1OCqY9Q0mDtaVfLNhMJZyWDH7.KKABlnmR4dTHG63tKxqwMwYPCzM4RGezQSUdix8gaV4RWLJGS0bqOhooVCnJW+UELRoHuWExuep6hd9XVlyXj.FyESk5BkSPsJj8.rNbTTy7wy1RiK5FMEm7AdTmZSvLi7tybuKZrYBfQN7Id1D3i1n4CkhfzOfxpLpES1HC3idNYqf9fWDvYwfQoqniBTM8qjcvhXFvptTEsZPr+lorOHm0HMp2bgp0G8i4IMxPJIBwjHk2cc3fnPckjq3DzpqPAl6qfLEKNG5Zr65iDozuF2.mxAI7C9GZGyoROnXmb.HLe1mY.UF6fkuIoYHlvmgjVREpgnUDkIoR6MIIo9jWf4AvedAg4IYItOSKTIDRCoiakBz8xApN2WPnCvZSz.WxHeLiZz2X9.xAoCUybZOixgJhhHBkfIhOFZK3YDRVMLWgirJngXUowtbQMot4Evxk+qGCU1RWERCXd03AtryqNP468GfxQocmlc2HsmdtWPJRhEmVGBsjooWwnxKfRX2jZiX0vzrgajR9JSMWIVSTWUbiXnnsO+uxzp2SXCOV.8.Pd7UpO3H9tw5.vZJn63Z9wRtyig55ZMPIPyVgCwf0WkvI+IRilKA+3QORmLFbJ4jOG1C8CgceNYgFyUB8lQGvz.FPFdMaXRq2U3ySpedyls0elaUs+O9OWn+WzqJEcc33UdCKsTc8GPtSv9hjFCwldbXXiNRsBHhF.gwbnBSbDIzKFtNxYf4UbFohbnuOSEMTma+LF1N0b4cWlS5cDvlHCzUrIWF5QGV4IqL2pFEu1SnX6CouPUx3tF6lDFiFY7P6E6eL1FqtRJYxanWujqXh8RMw59emx13bNQWGhUBzT0rHJdPn4+wmnv9pmnvbfGmD+ViCJB1FZ8d+PVvUMFjUpyNN8QJWAGUom83goydrA1N45hys3vPFejsoStklyMmFz5MauIjwK69fqFHWHKRwQIovlrSgQCSlson8lL4IJQHLk2n.MqB26lS8yyo7mu1PyYJ08oZU341WaK+kt1t8s7o.ArKLCbimwcUCFQf+1IqMfw6OPYReKCY3ApzAJSjg1PlJLeVWnxpVN901lfZXJHVVFBxWt13D9a+6Whve4Zo54DkZI6WmlZw539YSU+.6EZt7BKs3JOY45VnpIai6auvSatxxKr7SZX.uYBFqrvJKtTyUdpk1fNyGJXiA+kg6+cHSU9YjFXwSDVZ329NJXjujXIX6dTHqgdeHREPC.kb7WwSVAorzqSxM9xHZ3.tibLL2j0iF6oZEFBiGhuy.rqJJNYy0g1ZNAtpCwAlvau5hqn+r7x0WZk5K0Pepth9vPR6BSaM1MiizCi3G.0UPVQC6MR1agAVDQF7xHpAa11ip5nF5MwMcvVYJ8IgCgvQpbpzLC9VAtFzdwRWXoXmqLeEDqK+X.OzFDhXfEF+sIvGjIcCH8xXOH.NYYfjqFZFh9C1CVbSYwO19.Nz.wz4wYlBOBYO9wfGSelmek8V85AV4bF7N1se+ONuoiI4+sIj+SrgFTYTeH3OscDMOTzNa0O.O1V3M9w1NHhomVCZLI+Xe6ZqGCpnnwg9OWSSpV9h3fwnUJieHChQUXbV9l2asCO7kQh3vIw56dg1mnaDDAiuvnwF6Gv.UsxTF2HRHk8.wQeWRysNHNpOpqxgbHCFKRNNLHmTZ7FVOsPA.DDNilWtytTXfgwx.qoR8tTsIdF6j0MlXcyIV+jIVuvDqe5DqWbh0KkudTENzw.eAzIZH3t2rFBfK3.rsYiStNued4SMj+GOS5c+Y2yj9KfDii8RtEy3wNbTwuUvoPDG.A4wOwNs9VFzFiwk6BStENPDvcF2+F7W62mEYx6SJP+iu4a92unkRAgW4G6SW6PlGCl1IGzebscftooQiG198RWz368qZOU60uwNgcIXJKxubKnM6+2TP65TQeTZ4LhtCneFZCefsNqKAKR9SI6cnHF66OqniMTYpCTM1gYVeBG4HcccbMxDcXAt5E+G3S5lMxJlga1HaSKmrqBjmzeq6guvrr.rHituKOnLomoKpDp4irDTv4mDtzm5DINxIYpSjWumFBvkA5+q+JZuKtlzHaJSa65Uqa4C0XNxwAcxeLTxZ53z7VfyStE3rvs.mmdKvYwaANKcKvY4qEGr7dqXXTsjjd.fC1JwwpvVibrl05+hLTr5H
-
RE: unstable macOS build from develop branch
@Christoph-Hart Thanks!
The SFZ file I'm trying is very simple, but I wonder if there might be some path issues. Tried to prepend
{PROJECT_FOLDER}
in the SFZ, so it reads likesample={PROJECT_FOLDER}/<file-path>
, with no luck.I've yet to try the loadSfzFile scripting API method with my own UI controls...
-
RE: unstable macOS build from develop branch
@d-healey Now I see how
Monolith*
properties are added to the the sample map XML after using the Convert the current samplemap to HLAC monolith format button.But can't see that the Import SFZ file format button performs any changes to the current HISE sample map or the source SFZ.
-
RE: unstable macOS build from develop branch
@d-healey yes, every other of my initial actions - just starting out, and still unsure if I built with some wrong settings :)
I should add that I was able to convert a sample map to a HLAC monolith by pressing an icon with a down-arrow in SampleMapEditor: Sampler (how do I import such a monolith to the sampler?). There I also noticed an icon for importing SFZ files, but using that gives no results, not even a crash; the SFZ I'm trying does work in e.g. the Sforzando player.
-
unstable macOS build from develop branch
Hi - a macOS build I made from the develop git branch is very unstable, where every other thing I click or action I choose results in a crash. I'm pretty sure HISE isn't this unstable for everyone and I must be doing something wrong.
A couple of examples resulting in a crash:
- choosing Tools -> Convert SFZ files to SampleMaps
- choosing Tools -> Convert all samples to Monolith + Samplemap
- with a few files dragged into SampleMapEditor: Sampler and clicking an empty space in SampleEditor: Sampler
A screen recording of this experience can be seen / downloaded here:
https://drive.google.com/file/d/1TnyiHQXOLbj9xHCWoeaGFOHCb_0j1xti/view?usp=sharingThe SFZ and related files I tried to convert can be downloaded from here:
https://drive.google.com/file/d/1IgqKxdFSwwpQgeC-pth8UmAj6um24fRV/view?usp=sharingAny ideas on what I might look into changing?
Hardware Overview:
Model Name: MacBook Pro
Model Identifier: MacBookPro16,1
Processor Name: 8-Core Intel Core i9
Processor Speed: 2,3 GHz
Number of Processors: 1
Total Number of Cores: 8
L2 Cache (per Core): 256 KB
L3 Cache: 16 MB
Hyper-Threading Technology: Enabled
Memory: 32 GB
System Firmware Version: 1715.40.15.0.0 (iBridge: 19.16.10549.0.0,0)
OS Loader Version: 540.40.4~45System Software Overview:
System Version: macOS 12.0.1 (21A559)
Kernel Version: Darwin 21.1.0