Create Or Trade a Sampler Skeleton


#1


We are looking to license or buy a Juce-based sampler skeleton, not necessarily with a GUI, to build on.

The idea is to bundle a basic GM sample player with our composition software as a starting point for new users. While the QuickTime GM Synth (DLSMusicDevice AudioUnit) on the Mac is quite usable for this purpose, its counterpart on Windows (Microsoft Wavetable Synth) comes with a horrible latency, because it is not available as a VSTi.

If someone would be interested in bundling a feature-limited version or demo of their existing product with our software, that would also be an option.

Also PM me if you have a very basic skeleton only. It may be worth looking at.

Thanks!


#3

That’s something I’d be interested in, too, at least in the future.
Right now, I’m working on other stuff, but anyway, I’d be very interested in seeing the fruit of this kind of labor.


#4

I'm going to need one of these too.  Very happy to work on it as a small reusable item.  I've got sample playback working monophonicly for the current project I'm working on.  But - the next one is going to need to go polyphonic and multitimbral.  The GUI won't be useful to share, but the audio file handling and playback I think should be pretty generic.  

I'm assuming you are only concerned with playback from your post? 

cheers, J. 


#5

Yes, playback only and multi-timbral.

As for audio files, some easily convertible/exchangeable format would be great. Even SF2 sould be helpful here.


#6

I am interested in this too. :-)

Did anything come from MarC's proposal, to create a team to work on this?


#7

Hi 

I am finishing up my computer science studies and need to complete a semester of bachelor project. I would like to take this on if there is still interest. I have at least 120 hours ( or 360 hours if i can get this accepted for a bachelor project ) that I would love to invest in this project. 

I'm familiar with Kontakt and some other software based samplers. I've also looked through documentation of some hardware based samplers and the specs for SoundFont2. I've used Juce in several school projects and I'm confident that I can complete this. I would be thankfull for any feedback and inputs along the way though. 

I need to put together a project proposal for school and get this accepted. First I would like to know though if there is still interest in this project and any input regarding features and requirments would be appreciated.

Here's are some rough notes I have gatherd for myself based on looking though the manuals of other samplers so far:

https://docs.google.com/document/d/1L-z_96C2UyHj_YZ3K7-adqhdNEYe_5CPKiq6sIb4GKw/edit

 

cheers,

Alex

 

 


#8

If you keep it open source then I'm sure you will generate a lot of interest. It sounds like a good project. I wouldn't worry too much about gaining the approval of people on this list. Just plough ahead and let us know how it goes!


#10

I've been working on a feature-rich sampler with lots of GUI, definitely not a skeleton (but maybe someone is still interested)

It's got polyphony, pitch shifting, ADSR, mapping editor to map audio files to midi keys, sample groups (which can have their own samples, etc), lua scripting to create custom user interfaces, patch saving and reloading, a waveform viewer, sample start controls, etc...it's gonna have the works on it when I'm done with it :D


#11

Where can we see the source? It seems the idea of this thread was to develop an open source sampler that people could use and build upon?


#12

The thread did kind of go in that direction, but the original post mentioned the possibility of licensing or purchasing a sampler, so I thought I'd let myself known in case there are others looking to license.

I'm not quite ready to make the source public yet.


#14

Hi Alex,

 

how is it going? I am currently developing a sampler framework too and implemented a disk streaming sampler (based on the juce sampler class) using MemoryMapped files. It prebuffers the first 10 kB and then directly reads from disk without loading times or ram usage (the MemoryMappedAudioFormatReader rocks like hell). In this proof-of-concept-like development stage it reads from the MemoryMappedFile directly in the audio thread, which is not the safest thing (however I tested it with about 20 piano samples at once without dropouts), but maybe I will wrap it up in a BufferingAudioReader to make things more stable.

If you want, I could spin off a version of this class for your sampler project, as I am interested how well this MemoryMapped stuff performes on other systems. I would have to remove some functionality (I implemented a modular system for adding modulators like velocity, lfo and envelopes for volume, pitch and sample start), but I think disk streaming is a non-optional feature for every sampler nowadays.

Best,

Christoph


#15

Hi Christoph,

I'm just getting started with putting a project together and playing around with different classes, nothing concrete yet. I used the MemoryMappedAudioFormatReader in a previous project,  but just used mapEntireFile to make things simple. It was a school project demonstrating cross platform development for IOS and Android. So the focus was not on audio performance. 

I would love to see how you have implemented it in your class. My idea was to have something that the user could configure, mapping the entire file for shorter percusive sorts of applications, or buffered disk steaming for piano or orchestral things. The user could optimize performance this way depending on the disk io, memory size,  and sample sizes... still vague though.

Thanks,

Alex

 


#16

This is no biggie, if the prebuffer size is variable, you can simply set its size to the sample size of the file and it will load everything into memory.

I tested it a bit more thorough and I won't get away without buffering (accessing the memory mapped file spikes a bit too much for my taste).

So let me implement this and I will send you the class in the next days.

I am thinking of using two buffers (maybe I'll split the preload buffer in half) and swapping them when they are filled by a background thread. This way you can also measure disk performance by checking the number of samples used in the audio callback when the background thread filled the unused buffer and adjust the buffer size if it becomes too hot.

If you have any other questions, feel free to ask as I am kind of working on the same thing as you right now with a slight advance of a few months...


#17

Hello Christoph,

I would definitively be interested in you stream-from-disk solution. Gave it a try myself, but could not quite get it to work.

BTW: I have written a very basic sampler at the moment, which can:

- trigger different samples, depending on the velocity

- basic round-robin

- velocity remapping ( so you can adjust it to your keyboard "hardness")

 


#18

Sure, let me just tidy up the class and make a Introjucer projects that shows an example usage.

You can use the class the same way as the Sampler class, so you can probably use your round robin / velocity logic without too much hassle.

It works quite well for me - I managed to get ~100 voices streaming before the first artifacts (using a SSD), but I am sure it can be further improved

There are some variables which can be adjusted:

- enable / disabled multicored background reading

- the preload size (in samples)

- the streaming buffer size (in samples)

You can also set the PreloadSize to -1 and you will get a pure memory sampler.

The next thing I will implement is setting start / end points and implement crossfade loops.


#19

I opened a new Thread, since this is not really job-related:

http://www.juce.com/forum/topic/disk-streaming-sampler-classes