From: Benno S. <be...@ga...> - 2002-11-04 18:27:11
|
Steve wrote: > > Well assume you write a GIG loader and engine. But now you discover the > > giga engine is > > too limited. Fire up the signal editor enhance the signal > > routing/processing features of the engine, > > compile and play your .GIG files with the new enhanced engine. > > Thats very compelling, but my feeling is that its better to support > features like that in principle, but target a more reasonable feature set > for an initial release. My experience of large projects with big ambitions > is that people loose interest and they never get finished. I agree that about the unfinished projects I tend to loose interest too, but this time I will concentrate only on this project since it would be very nice of being able to deliver something that is usable in the real world. Regarding the recompiler a too big task: I would not say that: the streaming engine is more or less ready, just take the routines and algorithms and encapsulate them into a cleaner framework. For the signal processing part we have most stuff ready to use (reverb,filters,ladspa plugs) and I don't think that writing a framework that is able to build simple signal networks is such a big task. Speaking of GIG I think it will take a bit of time to figure out all params embedded in the file (although Ruben van Royen and Paul K. have already done some work in this field) and map them correctly to the engine. (correct emulation of envelopes, filters ecc). > > If you set a reasonable target for a first release (but still with a > good, extensible API), you will get there quicker, you will get users for > testing earlier, and the devleopers will be more motivated. not sure if this will bring us more long-term advantages ... what do others say ? As said for the beginning the recompiler can be very simple since we can extend it later without needing to introduce radical changes). > > OK, you will have to throw away some code when you want to generalise the > engine, but I think this is very mworth it. Espcially as you will learn > things from the first (or in Benno's case second :) implementation. > > I would like to see a first milestone of a realtime, jacked sampler that > can receive midi and play a subset of GIG samples fomr disk, with a clean > and extensible deisgn. The problem is this clean and extensible design ... personally I think it is represented by the recompiler. Perhaps I am wrong , that's why we are discussing these issues on the list here. > PS I'm not sure that I agree with supporting OSS, it imposes design > decisions that don't make much sense in the long term. > - Steve Juan says when using JACK, instead of exporting only the stereo output we should export each MIDI channel (so that we can route instruments to arbitrary destinations). This is ok for JACK and introduces flexiblity but I do notsee supporting OSS as a problem: just export the stereo output and use a simple OSS backend that simulates callback: while(1) { data=audio_call_back(); output_oss(data); } The prefered method will be of course JACK but I think for testing, debugging and tuning purposes OSS and ALSA are ok. (plus in case you want to dedicate a machine only for sampling you can work without jack). Regarding JACK we will probably need to use the in-process model (which is actually not used much AFAIK) in order to achieve latencies at par with direct output so this needs further research. My tests with direct OSS output show that it is possibile to achieve 3msec latency on a PII+ with the sampler so we want to get out these numbers from jack too so we need to test it first in a direct output enviroment and then in conjunction with jack (or better implement both backends from the beginning and allow you to switch it via cmdline). regarding the AKAI samples: Steve says akai samplers were quite limited in terms or RAM availabilty (32-64MB) and since akai samplers allow some funny stuff like modulating the loop points I was wondering what you thing about not using disk streaming for this format. How about the s5000/6000 series ? what is the maximum RAM configuration ? Do they allow nasty loop point modulation too ? And since we speak about looping I was wondering how looping is handled in most hardware and software samplers: do most of them use loop-until-release (eg looping part is looped and after release the sample gets played as it was not looped) or infinite looping: when you release the loop is still played but the volume fades to zero within a certain time. (release part not used) When implementing these kind of looping techniques in a disk streaming sampler, the first looping technique requires caching a region (let's say 64k samples) past the final loop point in order to give the engine the time to refill the ring buffers from disk. This means the memory consumption almost doubles for looped samples over oneshot samples. With very large sample libraries this could mean that RAM can become scarce. (but I am not sure if large libraries of looped samples exist). The second looping method is easy to implement since you can let the disk thread refill re ringbuffers with the looped areas and then when you release the key the volume simply fades to zero within a certain amount of time. Anyway it is not hard to implement loop-until-release and the engine can easily be designed to support both in order to give the user the best of both worlds. If you have experience with hardware or software samplers please share your thoughts on the issues I mentioned on the list. thanks, Benno -- http://linuxsampler.sourceforge.net Building a professional grade software sampler for Linux. Please help us designing and developing it. |