|
From: Benno S. <be...@ga...> - 2003-03-24 20:41:24
|
Hello LinuxSampler guys :-) sorry for being that quiet but was a bit overloaded again during the last two few months. I've read all pending mails and I will try to summarize my thoughts about the project and its future and the current status and how we can collaborate in order to maximize parallelism. As far as I can see it, the sampler consists of several sub-projects which are related: 1) instrument loading library 2) sample playback engine for each kind of sample library format which permits real time / sequenced playback and real time modulation of parameters (LFO, filters, ecc) 3) a graphical editor that permits loading (through 1) ),creation and manipulation of instrument libraries. Personally I will focus on 2) since it involves real time stuff, optimized data flow mechanisms, streaming etc. I think swami could solve 1) and 3) as long as it is flexible in providing support for various sample formats. Regarding the engine: some said they do not like C++ and want do to everything in C etc: My take on this is that we should find some good compromise between performance and modularity and flexibility of the engine. My old evo code is written in C++ and IMHO it offered various advantages over a C implementation without any performance degradation. I'm not a heavy-duty C++ programmer thus usually I use only basic C++ features like classes and methods. In the case of a sample player C++ helps you to bind data structures to certain objects (eg voices) without messing around with tons of structures and passing around pointers of structures between various functions. Ringbuffer C++ templates (lock-free FIFOs) proved to work very well in terms of speed (the resulting assembly code is almost optimal) while helping to keep the code clean. When speaking of code cleaness I do not mean only that it is beauty to read but with clean I mean that object oriented design reduces chances that the object itself accesses data that is not meant to be accessed by that object possibly resulting in a program crash or glitch. Some say they cannot program in C++ so they only contribute if the core is written in C. I see this as a bit lame excuse since it is really not that hard to learn what a class and a method is in C++. If as a coder, you are able to write good C apps then I do not see why one should back away from a sample engine written in lightweight C++. As said, I have nothing in contrary to go plain C, but commonsense says me that C++ is the better choice because the sampler project will probably grow over time and OO design helps you to keep the design of the project/engine cleaner. Regarding the audio rendering: My idea was to make sort of modular sampler where you assemble the basic building blocks with the most important module being the sampleplayback module (a RAM and a disk-streaming version). The idea was to assemble modules at source code level so that the compiler can create a very efficient engine which is almost as fast as a handcoded one but provides the flexibility of permitting the creation of instruments in a modular fashion though a GUI, similar as Native Instruments Reaktor and others do. Some on this list say this is overkill for a sampler and that we should start with a hardcoded engine and later switch to a moduler one (just-in-time compiled). I think rather than duplicating the effort it is better to write a very simple modular engine and at a later time enhance its capabilities. My idea was to start with a RAM sampleplayback module that can do only very simple stuff: - it has a pointer to the sample to be played - it knows how much samples to play and possibily can access to a simple looping list - pitch can be modulated - volume can be modulated In order to create a very simple MIDI-playable instrument along with the ram sampleplayer, an instrument loading library is needed. (loads samples and patches in RAM and exports pointers to samples and parameters) another basic module we need to implement is a MIDI input module that maps incoming MIDI data (MIDI ins or alsa sequencer) to instruments which in turn point to samples in memory and modulation data that can be used to drive the RAM sampleplayback module along with some modulators (volume modulator for creating envelopes and pitch modulator for creating vibratos etc). I think this would costitute a nice starting point for building a full fledged sampler which accepts multiple formats and engines. I'm not 100% but in my opinion it would be wise to associate a playback engine o each samplelibrary format. Eg the GIG engine plays GIG files, the AKAI engine plays AKAI samples. I do not believe that the "one size fits all" model always work. As Peter Hanappe pointed out it is better Fluid tries to specialize on playing SoundFont samples as good as possible rather than trying to become the allround sampler that can play everything. I think the best way to make LinuxSampler a sampler that can reproduce various formats is to make it modular as described above. Once a handful of basic modules are implemented, I think it will be quite easy to add new engines since the goal is basically of being able to assemble new engines using a graphical editor where you wire toghether basic building blocks. If a new engine needs features that are not covered by the available modules, fire up your editor, code the module, and then get back to the GUI and complete the building of the instrument engine you had in mind. Do you agree of going down that road or should we take other paths ? I'm currently writing a multichannel sample playback engine (not instruments but sounds and music) for doing ambient music and noise in a museum room. I use a Linux PC with two Delta cards (8+8 outs) under ALSA. This is not a big project but LinuxSampler will profit from this since I will get familiar with multichannel audio hardware which should be supported by professional apps. (as LinuxSampler should be) Josh: I added you to the project admins (full access to everything) on the project page of LinuxSampler since I assume you will be the main contributor to the sample library handling for linux sampler. Regarding the GIG format docs (I assume Paul Kellett sent you Ruben's header files), how about posting them on the LinuxSampler site (you can now upload stuff yourself) so that others can see the structure of the chunks too ? In the next days I will explain my ideas about volume and pitch modulators and how to build modulation networks. To eliminate some confusion: there are currently two codebases for linuxsampler: one is evo which is basically a proof-of-concept code of a very rudimentary disk based sampler and the other is the code on CVS uploaded by Juan L. which is based on the legasynth codebase. I regard both apps only as proof of concept applications and I suppose the real linuxsampler codebase will probably be built from scratch especially if we go the modular-recompiler way. As said the project lacks a bit of organization right now since our goals are not well defined yet but I think over time things will get better. Anyway I'd like to discuss with you guys which route to go for building the sampler's engine. I know some are getting impatient while other may think this will become another dead project, but I think there are just too many talented folks on this list to let such a cool project die off. Yes, we all have daytime jobs so sometimes the project's advance will slow down a bit but hey, that's life in the open source domain. As long as there will be interested and enthusiastic people partecipating I do not fear that the project will die. Linux and powerful GNU software was not built in a day and I'm confident too that through collaborative work and discussion linuxsampler will some day deliver the funcionality we dreamed of for long time. (argh too much rethoric, back to code :-) ) PS: Welcome to the ML to the Kurzweil guy too :-) waiting for your feedback guys. cheers, Benno http://linuxsampler.sourceforge.net ------------------------------------------------- This mail sent through http://www.gardena.net |
|
From: Marek P. <ma...@na...> - 2003-03-24 22:42:40
|
> > 3) a graphical editor that permits loading (through 1) ),creation and > manipulation of instrument libraries. > > > Personally I will focus on 2) since it involves > real time stuff, optimized data flow mechanisms, streaming etc. > > I think swami could solve 1) and 3) as long as it is flexible in providing > support for various sample formats. My personal feeling is that the GUI itself could be done from scratch according to the needs of 2) The reason why i'm proposing this is, that a good sampler needs real eye-candy too ;) and i would like to do something about it either by doing some artwork in blender and gimp and/or by chasing some people on deviantart.com or similar. But it's not just pure eye-candy, this adds a whole lot of functionality as well, Halion and Mach5 being the best examples. The overall design of the GUI is very important and plain QT or GTK just isn't enough for it IMO. What i want/need here is to have a nice rendered keyboard(which isn't that difficult since it's sufficient to render just a few white and black pressed/released keys to build the whole keyboard) a few types of knobs(which isn't difficult either except for some moog knobs) and an efficient way to display waveforms of samples and scroll them without artefacts(power of 2 should do). If you look at Native Instruments Kontakt you can see that the GUI is very simple in terms of eye-candy but very efficient as well. I would also like to add some thoughts about linuxsamplers native format, which linuxsampler should have IMO. I was thinking of something like: - XML data - descriptions and settings -- bzipped - FLAC compressed sample data - peakfiles(?) - all packed up in tar Notice that this would be the first time for a package to be bz2.tar and not tar.bz2 :)) The only problem with FLAC(and other lossless compressions currently) is that it doesn't handle floats yet. I'm not sure whether you guys considered to use floats as well, probably yes. Marek |
|
From: Josh G. <jg...@us...> - 2003-03-25 04:24:28
|
On Mon, 2003-03-24 at 12:41, Benno Senoner wrote: > > As far as I can see it, the sampler consists of several sub-projects > which are related: > > 1) instrument loading library > > 2) sample playback engine for each kind of sample library format > which permits real time / sequenced playback and real time modulation > of parameters (LFO, filters, ecc) > > 3) a graphical editor that permits loading (through 1) ),creation and > manipulation of instrument libraries. > > > Personally I will focus on 2) since it involves > real time stuff, optimized data flow mechanisms, streaming etc. > > I think swami could solve 1) and 3) as long as it is flexible in providing > support for various sample formats. > Yes, I could see Swami/libInstPatch fitting nicely with 1 and 3. libInstPatch and Swami aim to be as flexible as possible with patch file formats. In other words, I haven't tried to integrate all patch formats (an insane task), so each important format will be supported natively (all details of the format for load/manipulate/store). Many old or not so important formats will probably just have import support. Much of the API is integrated in the use of GObject though (all objects have "name" based properties with a fairly extensive type and parameter system). libInstPatch does have in mind multi-threading capability. There is still a bit that should be done in the area of performance versus multi-threading though, particularly relating to item lists. I'd like to get a better idea of how linuxsampler will be accessing patch objects. I remember this was discussed a little. It seems like the synthesis process should be constructed when an instrument is selected (MIDI bank:program change, whatever). So it might go something like this: - instrument selection (MIDI bank:program change) - linuxsampler patch type specific synthesis constructor called - synthesis network setup and populated from libInstPatch objects - wait for input events (MIDI note on/off, real time effect control requests, etc) In this scenario the performance requirements of libInstPatch are minimized as the parameters are fetched at instrument select time. Real time sensitive parameter changes could be sent via linuxsampler API calls while other changes could be monitored via property change signal callbacks. > Regarding the engine: > > some said they do not like C++ and want do to everything in C etc: > I'm a C coder myself, but I also like OO stuff. GObject is what I have decided to use for libInstPatch/Swami. Its taken me a while to understand GObject fully and a lot of things seem kind of hackish (and I guess kind of are since C wasn't designed for OO stuff), but I'm beginning to like it. I'm not real sure of the performance implications, but I know GStreamer uses this same platform. glib (what GObject is now part of) is a nice utility library that has lots of things like hash tables, linked lists, binary trees, memory chunks, cross platform threading and variable types (guint32, gint16, etc). I'm not opposed to C++ though. I am curious how well GObject related stuff would mesh with C++ code. > > Regarding the audio rendering: > > My idea was to make sort of modular sampler where you assemble the basic > building blocks with the most important module being the sampleplayback module > (a RAM and a disk-streaming version). > The idea was to assemble modules at source code level so that the compiler > can create a very efficient engine which is almost as fast as a handcoded one > but provides the flexibility of permitting the creation of instruments in a > modular fashion though a GUI, similar as Native Instruments Reaktor and others do. > <cut> > > Do you agree of going down that road or should we take other paths ? > I think the modular design fits with what linuxsampler is supposed to be. So yes, I agree with that path. I like the idea of a system that builds custom code though (I was looking into a similar thing a while back where each module was an assembler macro and then a master routine would be auto-generated with the calls to the macros). Even just starting out with each module being a subroutine would give us the basis of a modular synth and optimization tricks to remove subroutine overhead, etc could be implemented later (self building code). I think thought should first be put into the different types of modules, how they will route their inputs and outputs and the range of patch formats that we are looking to support. Wavetable interpolators, envelopes, LFOs, filters, LADSPA plugins, reverb, and chorus O MY! > > Josh: I added you to the project admins (full access to everything) on the > project page of LinuxSampler since I assume you will be the main contributor to > the sample library handling for linux sampler. > Hmm. For right now I think I will be using Swami/libInstPatch project site/CVS/etc as the source of information. Perhaps we could try and cross link the two sites more in this regard though. I can see linuxsampler and libInstPatch/Swami being a nice marriage of programs, but they will probably also be useful separately as well. This is the design that has been followed with FluidSynth. Our projects don't depend on each other, they just work well together :) I'd be more than happy to help with stuff on the linuxsampler site, but I kind of feel like my effort is best concentrated on libInstPatch and Swami right now (which I'm sure will help linuxsampler in the end). > Regarding the GIG format docs (I assume Paul Kellett sent you Ruben's header > files), how about posting them on the LinuxSampler site (you can now upload > stuff yourself) so that others can see the structure of the chunks too ? > Yes, I got the GIG format docs. They will come in real handy :) I'm not quite at the stage where I will be adding .gig support yet though (still adding DLS2 support). If there are requests for these docs (anyone?), I will certainly put them up. I just hesitate to do non-coding stuff when it won't be that useful, he he. > waiting for your feedback guys. > > cheers, > Benno > > http://linuxsampler.sourceforge.net > Its nice to feel like a part of a community here. I'm constantly working on libInstPatch and Swami and much of the work that I have been doing has not yet seen the light of day. API work is very time consuming and sometimes frustrating when one doesn't get the rewards of seeing it in action. The time to see this work in action is close at hand, I can feel it. There is still a bit more that I need to do to get the patch pluggable architecture of Swami in order (mostly GUI stuff). The addition of DLS2 will pave the way for this and things should go smoother afterwards. When this starts to come together I will start looking into how to interface it with linuxsampler. Cheers. Josh Green |
|
From: Josh G. <jg...@us...> - 2003-03-25 04:36:34
|
On Mon, 2003-03-24 at 15:57, Marek Peteraj wrote: > > My personal feeling is that the GUI itself could be done from scratch > according to the needs of 2) > The reason why i'm proposing this is, that a good sampler needs real > eye-candy too ;) and i would like to do something about it either by > doing some artwork in blender and gimp and/or by chasing some people on > deviantart.com or similar. But it's not just pure eye-candy, this adds a > whole lot of functionality as well, Halion and Mach5 being the best > examples. The overall design of the GUI is very important and plain QT > or GTK just isn't enough for it IMO. What i want/need here is to have a > nice rendered keyboard(which isn't that difficult since it's sufficient > to render just a few white and black pressed/released keys to build the > whole keyboard) a few types of knobs(which isn't difficult either except > for some moog knobs) and an efficient way to display waveforms of > samples and scroll them without artefacts(power of 2 should do). If you > look at Native Instruments Kontakt you can see that the GUI is very > simple in terms of eye-candy but very efficient as well. > I myself can see many nice eye candy widgets being written for GTK or QT and integrated with other apps. In this sense I don't see it as really writing the GUI from scratch but more extending existing ones. Its nice to have things like menus, trees, lists, etc and not have to implement them all by hand :) I'm looking into using the GnomeCanvas widget for all waveform displays (ardour uses the GTK+ version of this canvas) as well as all envelope, LFO and other graph based GUI widgets. This will allow these other controls to be overlayed ontop of a waveform display so one can set parameters in relation to the timing of the waveform. Ideally eye candy and other such controls could be written as plugins in Swami. > I would also like to add some thoughts about linuxsamplers native > format, which linuxsampler should have IMO. > I was thinking of something like: > - XML data - descriptions and settings -- bzipped > - FLAC compressed sample data > - peakfiles(?) > - all packed up in tar > Notice that this would be the first time for a package to be bz2.tar and > not tar.bz2 :)) > The only problem with FLAC(and other lossless compressions currently) is > that it doesn't handle floats yet. I'm not sure whether you guys > considered to use floats as well, probably yes. > Thats actually not such a bad idea. If linuxsampler becomes truely modular it might find static patch formats not flexible enough for its full capacity. > Marek > Cheers. Josh Green |
|
From: Marek P. <ma...@na...> - 2003-03-25 10:27:16
|
On Tue, 2003-03-25 at 05:34, Josh Green wrote: > On Mon, 2003-03-24 at 15:57, Marek Peteraj wrote: > > > > My personal feeling is that the GUI itself could be done from scratch > > according to the needs of 2) > > The reason why i'm proposing this is, that a good sampler needs real > > eye-candy too ;) and i would like to do something about it either by > > doing some artwork in blender and gimp and/or by chasing some people on > > deviantart.com or similar. But it's not just pure eye-candy, this adds a > > whole lot of functionality as well, Halion and Mach5 being the best > > examples. The overall design of the GUI is very important and plain QT > > or GTK just isn't enough for it IMO. What i want/need here is to have a > > nice rendered keyboard(which isn't that difficult since it's sufficient > > to render just a few white and black pressed/released keys to build the > > whole keyboard) a few types of knobs(which isn't difficult either except > > for some moog knobs) and an efficient way to display waveforms of > > samples and scroll them without artefacts(power of 2 should do). If you > > look at Native Instruments Kontakt you can see that the GUI is very > > simple in terms of eye-candy but very efficient as well. > > > > I myself can see many nice eye candy widgets being written for GTK or QT > and integrated with other apps. In this sense I don't see it as really > writing the GUI from scratch but more extending existing ones. But we really should derive from the look&feel of other pro samplers in this regard. > Its nice to have things like menus, > trees, lists, etc and not have to implement > them all by hand :) My guess is that in the main app window the lists and trees won't be needed at all. > I'm looking into using the GnomeCanvas widget for > all waveform displays (ardour uses the GTK+ version of this canvas) as > well as all envelope, LFO and other graph based GUI widgets. GnomeCanvas 2 was reported to be buggy, and smowhat deprecated now that people use a foo-canvas module which takes use of gtk2 built-in stuff. But Paul Davis is considering the port of gtk-canvas to gtk2 so maybe we could use, ulilise, help improving, bug-fixing, porting as well. :) Marek |
|
From: Josh G. <jg...@us...> - 2003-03-25 19:10:02
|
On Tue, 2003-03-25 at 03:41, Marek Peteraj wrote: > On Tue, 2003-03-25 at 05:34, Josh Green wrote: > > > > I myself can see many nice eye candy widgets being written for GTK or QT > > and integrated with other apps. In this sense I don't see it as really > > writing the GUI from scratch but more extending existing ones. > > But we really should derive from the look&feel of other pro samplers in > this regard. > Sure, why not. But from my perspective the GUI interface is secondary, and one can have multiple looks & feels :) > > Its nice to have things like menus, > > trees, lists, etc and not have to implement > > them all by hand :) > > My guess is that in the main app window the lists and trees won't be > needed at all. > We're probably talking about different uses here. I'm talking about Swami in particular which the current scope is as a patch editor. I find things like trees, etc very useful when it comes to editing patches :) I forsee the scope of Swami going more into the realm of what you are talking about, which is a tool for doing real time instrument manipulation. The current architecture, I believe, lends itself to many uses. In the future I can see applications developed off of libswami that won't resemble the Swami GUI at all. One example of this is a Python driven instrument database for the web and possibly to manage ones local library as well. libswami has plugin support, so extra functionality could also be implemented via plugins. > > I'm looking into using the GnomeCanvas widget for > > all waveform displays (ardour uses the GTK+ version of this canvas) as > > well as all envelope, LFO and other graph based GUI widgets. > > GnomeCanvas 2 was reported to be buggy, and smowhat deprecated now that > people use a foo-canvas module which takes use of gtk2 built-in stuff. > But Paul Davis is considering the port of gtk-canvas to gtk2 so maybe we > could use, ulilise, help improving, bug-fixing, porting as well. :) > I'm not particularly attached to which canvas it is, they all have relatively the same API (actually I'm not real familiar with foo-canvas' API). I did have reservations about using libgnomecanvas2, but when I was informed that it does not actually depend on gnome (by the guy who ported the GTK1.2 canvas), I felt more comfortable using it. If foo-canvas is robust enough (I heard it doesn't have anti aliasing support, which seems nice for those who have the CPU/graphics cards to do it) then I probably would use that. Any particulars on what kind of bugs gnomecanvas has? > > Marek > Cheers. Josh Green |
|
From: Benno S. <be...@ga...> - 2003-03-25 11:20:36
|
Hi, I'm forwarding a mail from Sebastien, he has put online his AKAI samplelibrary loader which will be useful for AKAI import in LinuxSampler. Josh, is the import and of AKAI in Swami fleasible ? AKAI S1000/2000 does not use files but reads the samples directly from CD. Alternatively one can dump the CD's image to a file (cat /dev/cdrom >file.img :-) ) and then work on that image. Anyway being CD image based, it is not easy to write manipulated data to HD (one would need to create a whole image) but I think read-only support for AKAI is enough since it allows you to reuse old AKAI CDs. If you need to edit them I guess it would be better to convert the sample to a newer format (like GIG) and do the editing on that format. cheers, Benno http://linuxsampler.sourceforge.net Scrive Sebastien Metrot <me...@me...>: > Hi Benno! > > As promissed I have uploaded my akai loading lib hack to > sourceforge.net. You can get the code by cvs at cvs.libakai.sf.net > (module libakai). How ever I used my own multiplatform application > framework to do it, ngl, which can be retreived by cvs at cvs.ngl.sf.net > module ngl. The lib currently runs allright on MacOSX and Win32. I > mostly used only posix calls for the macosx version so it will probably > be really easy to port to linux. The licence is LGPL. > > Sebastien (MeeLoo) Metrot > > > > Benno Senoner wrote: > > >Hello LinuxSampler guys :-) > > > ------------------------------------------------- This mail sent through http://www.gardena.net |
|
From: Josh G. <jg...@us...> - 2003-03-25 18:55:24
|
On Tue, 2003-03-25 at 03:20, Benno Senoner wrote: > Hi, I'm forwarding a mail from Sebastien, he has put online > his AKAI samplelibrary loader which will be useful for AKAI import > in LinuxSampler. > Josh, is the import and of AKAI in Swami fleasible ? > AKAI S1000/2000 does not use files but reads the samples directly from > CD. Alternatively one can dump the CD's image to a file > (cat /dev/cdrom >file.img :-) ) and then work on that image. > Anyway being CD image based, it is not easy to write > manipulated data to HD (one would need to create a whole image) but I > think read-only support for AKAI is enough since it allows you to > reuse old AKAI CDs. If you need to edit them I guess it would be better > to convert the sample to a newer format (like GIG) and do the editing > on that format. > > cheers, > Benno > http://linuxsampler.sourceforge.net > Yeah I think it is feasible :) Of course it might make sense to use this library directly instead of implementing it in libInstPatch, depending on how flexible its API is. Then again it might be more convenient if the code was part of libInstPatch. I'll take a look at it. Import only support sounds like a good idea to me, probably not too many people will be looking to author Akai format files. Cheers. Josh > > Scrive Sebastien Metrot <me...@me...>: > > > Hi Benno! > > > > As promissed I have uploaded my akai loading lib hack to > > sourceforge.net. You can get the code by cvs at cvs.libakai.sf.net > > (module libakai). How ever I used my own multiplatform application > > framework to do it, ngl, which can be retreived by cvs at cvs.ngl.sf.net > > module ngl. The lib currently runs allright on MacOSX and Win32. I > > mostly used only posix calls for the macosx version so it will probably > > be really easy to port to linux. The licence is LGPL. > > > > Sebastien (MeeLoo) Metrot > > |
|
From: Christian S. <chr...@ep...> - 2003-03-25 22:51:26
|
On Tue, 25 Mar 2003 12:20:37 +0100 Benno Senoner <be...@ga...> wrote: > Hi, I'm forwarding a mail from Sebastien, he has put online > his AKAI samplelibrary loader which will be useful for AKAI import > in LinuxSampler. :) Ok, that means I can stop my work then. I was already working on some experimental code for that. > AKAI S1000/2000 does not use files but reads the samples directly > from CD. Alternatively one can dump the CD's image to a file > (cat /dev/cdrom >file.img :-) ) and then work on that image. Actually it has files, though very primitive and Akai uses *of course* it's own file system. As some Akai CDs do also contain demo audio tracks, I was thinking about extracting only the first track instead of reading the whole CD image. > Anyway being CD image based, it is not easy to write > manipulated data to HD (one would need to create a whole image) but I As Akai tracks also consist of files, I think that should not be a problem. So I think manipulation of Akai patches, writing to HD, creating Akai ISOs and burning them back on CDs should be possible. I'm just curious if he solved the Teledisk problem. As some Akai libraries seem to use this odd "Teledisk" format and I was not able to find any information about it. CU |
|
From: Josh G. <jg...@us...> - 2003-03-26 06:31:02
|
On Tue, 2003-03-25 at 14:51, Christian Schoenebeck wrote: > On Tue, 25 Mar 2003 12:20:37 +0100 > Benno Senoner <be...@ga...> wrote: > > > Hi, I'm forwarding a mail from Sebastien, he has put online > > his AKAI samplelibrary loader which will be useful for AKAI import > > in LinuxSampler. > Okay, I just had a look at the code for libakai. The following are some of my thoughts and findings concerning the Akai formats, libakai and libInstPatch. I would like to invite Sebastien to correct me and perhaps clairify what the scope of libakai is. It would be really nice to collaborate on this stuff :) It seems like libakai is currently based on the S1000 format. I just realized by looking at the document at: http://www.abel.co.uk/~maxim/akai/akaiinfo.htm which the libakai library appears to have used as a reference (from the look of the comments) that the S3000 sample format appears to be identical to the S1000 format (I don't believe the program data is the same though). That makes things a little easier when thinking of supporting multiple akai formats. The later formats appear to use WAVE files which should also ease things. > > > AKAI S1000/2000 does not use files but reads the samples directly > > from CD. Alternatively one can dump the CD's image to a file > > (cat /dev/cdrom >file.img :-) ) and then work on that image. > > Actually it has files, though very primitive and Akai uses *of course* > it's own file system. As some Akai CDs do also contain demo audio > tracks, I was thinking about extracting only the first track instead of > reading the whole CD image. > Are you sure Akai patches are distributed as files? I'd like to find this out, because I'm thinking that filesystem and lowlevel device access code really does not belong in libInstPatch. It seems somewhat like a portability nightmare and I wan't to try and keep libInstPatch as portable as possible. The way I'd like to see things, is that an external utility is used to rip the instruments off of different medias and convert them to files that can then be imported using libInstPatch. Can one find Akai patches on the internet for example? What format would they most likely be in? > > Anyway being CD image based, it is not easy to write > > manipulated data to HD (one would need to create a whole image) but I > > As Akai tracks also consist of files, I think that should not be a > problem. So I think manipulation of Akai patches, writing to HD, > creating Akai ISOs and burning them back on CDs should be possible. > > I'm just curious if he solved the Teledisk problem. As some Akai > libraries seem to use this odd "Teledisk" format and I was not able to > find any information about it. > Looking at some of the disk access code, libakai appears to support only MAC OS X and win32 systems currently. The code doesn't seem that complex though, so I'm sure it could be easily ported to Linux. What revisions of the Akai formats are most desirable to support? Here is what I currently have: S900/S950 S1000 S3000 MPC-2000 S5000/S6000 From what I have heard on this list S1000 is the most popular? I think it would be wisest to implement Akai support directly in libInstPatch for cleanliness and to reduce dependencies. I think the libakai source as well as the akaiinfo web page will prove quite useful in doing this. It would be nice to collaborate with the libakai author, Sebastien, and perhaps see about getting libInstPatch to use the files ripped from a libakai based ripper utility. > CU > Cheers. Josh Green |
|
From: Steve H. <S.W...@ec...> - 2003-03-26 09:07:33
|
On Tue, Mar 25, 2003 at 10:28:31PM -0800, Josh Green wrote: > What revisions of the Akai formats are most desirable to support? Here > is what I currently have: > > S900/S950 > S1000 > S3000 > MPC-2000 > S5000/S6000 I have some S2000 format zip disks sitting in my desk draw. From what I remeber its very similar to S3000 format, but I dont know if its identical. - Steve |
|
From: Christian S. <chr...@ep...> - 2003-03-26 22:31:48
|
On 25 Mar 2003 22:28:31 -0800 Josh Green <jg...@us...> wrote: > Are you sure Akai patches are distributed as files? I'd like to find > this out, because I'm thinking that filesystem and lowlevel device > access code really does not belong in libInstPatch. It seems somewhat > like a portability nightmare and I wan't to try and keep libInstPatch > as portable as possible. Yes, I'm sure. There are mostly two file types: sample and program files of course, but I also found another type (0x00) now, which I'm not sure about what it's purpose is yet. I would bear the sacrifice to lose some portability, because I think the user should not be forced to use another tool just to copy and convert Akai ROMs to HD. > that can then be imported using libInstPatch. Can one find Akai > patches on the internet for example? What format would they most > likely be in? I've only seen images so far. And I don't think you will find something else. Ok, except S5000 / S6000, as they use FAT fs, and wav files for samples. > What revisions of the Akai formats are most desirable to support? Here > is what I currently have: > > S900/S950 > S1000 > S3000 > MPC-2000 > S5000/S6000 > > From what I have heard on this list S1000 is the most popular? Yes, S1000 has the biggest library in the world. And BTW S2000, S3000 (XL), CD3000 (XL), S3200 (XL) use all exactly the same format and differ only slightly from S1000. I already started to write some code to read CDs' TOC and extract only the first data track. I've not checked it yet, but I think that code would be dependent on Linux. But it would also possible to fopen() /dev/cdrom directly, so it would be more portable, but on the other hand that way you would have to handle the whole disc by yourself and not only the interesting Akai data track, so I would prefer the first one. CU |
|
From: Josh G. <jg...@us...> - 2003-03-28 03:12:53
|
On Wed, 2003-03-26 at 14:32, Christian Schoenebeck wrote: > On 25 Mar 2003 22:28:31 -0800 > Josh Green <jg...@us...> wrote: > > > Are you sure Akai patches are distributed as files? I'd like to find > > this out, because I'm thinking that filesystem and lowlevel device > > access code really does not belong in libInstPatch. It seems somewhat > > like a portability nightmare and I wan't to try and keep libInstPatch > > as portable as possible. > > Yes, I'm sure. There are mostly two file types: sample and program files > of course, but I also found another type (0x00) now, which I'm not sure > about what it's purpose is yet. I would bear the sacrifice to lose some > portability, because I think the user should not be forced to use > another tool just to copy and convert Akai ROMs to HD. > I'm starting to agree that this kind of code should be in libInstPatch. Especially since it sounds like these formats often aren't distributed as files. > > Yes, S1000 has the biggest library in the world. And BTW S2000, S3000 > (XL), CD3000 (XL), S3200 (XL) use all exactly the same format and differ > only slightly from S1000. > Good to know. This makes things much easier. > I already started to write some code to read CDs' TOC and extract only > the first data track. I've not checked it yet, but I think that code > would be dependent on Linux. But it would also possible to fopen() > /dev/cdrom directly, so it would be more portable, but on the other hand > that way you would have to handle the whole disc by yourself and not > only the interesting Akai data track, so I would prefer the first one. > Well, it seems a lot of this stuff is done in libakai at the moment. So we can use it as an example and add Linux support. Linux and other *nix (BSD, OS X, etc) and win32 are the platforms I'm looking to support. Basically anywhere glib/GObject/GTK goes. > CU > Cheers. Josh Green |
|
From: Frank N. <bea...@we...> - 2003-03-31 23:49:42
|
Hi list, On 27 Mar 2003 19:09:35 -0800 Josh Green <jg...@us...> wrote: [..] > Well, it seems a lot of this stuff is done in libakai at the moment. So > we can use it as an example and add Linux support. Linux and other *nix > (BSD, OS X, etc) and win32 are the platforms I'm looking to support. > Basically anywhere glib/GObject/GTK goes. Sorry for chiming in here so late, but you might want to know there is also some other code that performs Akai sample format reading, besides the stuff by Sebastien and also besides the "abrowse.sourceforge.net" project; look at http://www.nal.ics.es.osaka-u.ac.jp/~oosaki/akaitools/index.html for a set of Perl(!) scripts that allow to extract data from S1000 CD images. This one works better for me than abrowse at this time. "Thought you might want to know", Frank |
|
From: Josh G. <jg...@us...> - 2003-04-01 07:14:09
|
On Mon, 2003-03-31 at 15:48, Frank Neumann wrote: > > Hi list, > On 27 Mar 2003 19:09:35 -0800 > Josh Green <jg...@us...> wrote: > > [..] > > > Well, it seems a lot of this stuff is done in libakai at the moment. So > > we can use it as an example and add Linux support. Linux and other *nix > > (BSD, OS X, etc) and win32 are the platforms I'm looking to support. > > Basically anywhere glib/GObject/GTK goes. > > Sorry for chiming in here so late, but you might want to know there is also > some other code that performs Akai sample format reading, besides the stuff > by Sebastien and also besides the "abrowse.sourceforge.net" project; look at > http://www.nal.ics.es.osaka-u.ac.jp/~oosaki/akaitools/index.html for a set > of Perl(!) scripts that allow to extract data from S1000 CD images. > This one works better for me than abrowse at this time. > > "Thought you might want to know", > Frank > Cool, thanks for the info. Its not chiming in late anyways, since I have yet to even start on the Akai stuff. There is still a little bit to be done before this. Things are coming together fast now though. It will probably only be a few weeks before it will be in a usable state, although much bug hunting will need to be done, as the new API for libInstPatch and many other things have not been tested thoroughly. I'll be sure to notify the list when the new development branch of Swami is ready for testing. I'm getting excited, since I've been working on this stuff for over 6 months now without seeing any direct results in functionality. I think the wait is going to be worth it though :) Cheers. Josh Green |
|
From: Sebastien M. <me...@me...> - 2003-03-26 10:49:38
|
Josh Green wrote: > > Okay, I just had a look at the code for libakai. The following are some > of my thoughts and findings concerning the Akai formats, libakai and > libInstPatch. I would like to invite Sebastien to correct me and perhaps > clairify what the scope of libakai is. It would be really nice to > collaborate on this stuff :) > Sure. But as I already explained to Benno I will not be able to help on the linuxsampler because of legal reasons (i'm part of the Team that develops MachFive, MOTU's sampler, and my employer would be concerned about comflict of interests). > It seems like libakai is currently based on the S1000 format. I just > realized by looking at the document at: > http://www.abel.co.uk/~maxim/akai/akaiinfo.htm which the libakai library > appears to have used as a reference (from the look of the comments) that > the S3000 sample format appears to be identical to the S1000 format (I > don't believe the program data is the same though). That makes things a > little easier when thinking of supporting multiple akai formats. The > later formats appear to use WAVE files which should also ease things. > Yep, i used this document as a basis for the informations but it only concerns the floppy version of the format and is incomplete concerning the CD format. I got few informations from Bernard Chavonnet (the author of CDXtract) just to get me started. The S3000 mainly differs in the patch format. I think one can read a S3000 sample disc as a S1000 sample disc and only loose the S3000 specific stuff. > > Are you sure Akai patches are distributed as files? I'd like to find > this out, because I'm thinking that filesystem and lowlevel device > access code really does not belong in libInstPatch. It seems somewhat > like a portability nightmare and I wan't to try and keep libInstPatch as > portable as possible. > I have never seen akai files and i'm pretty sure commercial sample banks are distributed on Akai formated CDRoms. I resolved the device access quite simply in libakai: there is a very small class dedicated to device access and it is implemented for each platform. > The way I'd like to see things, is that an external utility is used to > rip the instruments off of different medias and convert them to files > that can then be imported using libInstPatch. Can one find Akai patches > on the internet for example? What format would they most likely be in? > You may find akai CDRoms rip off on edonkey/gnutella/kazaa... I never saw other akai format sample lib downloadable anywhere. > > > Looking at some of the disk access code, libakai appears to support only > MAC OS X and win32 systems currently. The code doesn't seem that complex > though, so I'm sure it could be easily ported to Linux. > I think you can reuse 95% of the OSX code for linux. The missing 5% will be the code needed to find a CDRom reader (this is a pain in OSX, quite easy in Win32 and I beleive straitforward in linux). Libakai can also read directly from a standard file so accessing /dev/cdrom directly may work. > What revisions of the Akai formats are most desirable to support? Here > is what I currently have: > > S900/S950 > S1000 > S3000 > MPC-2000 > S5000/S6000 > I work at Ultimate Sound Bank (www.usbsounds.com) and here we produce only S1000/S3000 formats for Akai. >>From what I have heard on this list S1000 is the most popular? > > I think it would be wisest to implement Akai support directly in > libInstPatch for cleanliness and to reduce dependencies. I think the > libakai source as well as the akaiinfo web page will prove quite useful > in doing this. It would be nice to collaborate with the libakai author, > Sebastien, and perhaps see about getting libInstPatch to use the files > ripped from a libakai based ripper utility. > > I don't plan to remove the ngl dependency on libakai, mainly because i truly think ngl is a far better framework than any other I allready tried (for what I do anyway). But removing the dependency seems quite doable. I think the only used ngl classes are nglString (encoding aware multipurpose string class) and nglIStream (encoding/endianness aware streaming class that unifies the IO API nicely). The actual loading code is really simple and is just a matter of knowing what to look for and where to look for it. What is missing from libakai is the actual interpretation of each parameter (what is linear, what is lorarythmic, etc...). There is a lot of work left about this and you will have to do it if you want a unified API in the patch library. You will face a lot of diferences between all the diferent patch formats available and interpreting them right often proves to be a pain as Bernard Chavonnet discovered some years ago :). Sebastien |
|
From: Josh G. <jg...@us...> - 2003-03-28 03:09:06
|
On Wed, 2003-03-26 at 02:48, Sebastien Metrot wrote: > Josh Green wrote: > > > > > Okay, I just had a look at the code for libakai. The following are some > > of my thoughts and findings concerning the Akai formats, libakai and > > libInstPatch. I would like to invite Sebastien to correct me and perhaps > > clairify what the scope of libakai is. It would be really nice to > > collaborate on this stuff :) > > > > Sure. But as I already explained to Benno I will not be able to help on > the linuxsampler because of legal reasons (i'm part of the Team that > develops MachFive, MOTU's sampler, and my employer would be concerned > about comflict of interests). > Ok, you need say no more. > <cut> > > I don't plan to remove the ngl dependency on libakai, mainly because i > truly think ngl is a far better framework than any other I allready > tried (for what I do anyway). But removing the dependency seems quite > doable. I think the only used ngl classes are nglString (encoding aware > multipurpose string class) and nglIStream (encoding/endianness aware > streaming class that unifies the IO API nicely). > > The actual loading code is really simple and is just a matter of knowing > what to look for and where to look for it. > > What is missing from libakai is the actual interpretation of each > parameter (what is linear, what is lorarythmic, etc...). There is a lot > of work left about this and you will have to do it if you want a unified > API in the patch library. You will face a lot of diferences between all > the diferent patch formats available and interpreting them right often > proves to be a pain as Bernard Chavonnet discovered some years ago :). > Yeah, there is a lot of nice features in the GObject library that allow for parameter specifications. I'm thinking of implementing the Akai format directly in libInstPatch, rather than using an external library such as libakai. Much of whats in libakai has to be worked into the current libInstPatch framework, and so I don't think it makes much sense to depend on it. I haven't actually looked at ngl, but GObject/glib is a good platform for what I'm doing. Would you want me to add your name to the Authors file if I used libakai as example code? Or perhaps just credit libakai? > > Sebastien > Cheers. Josh Green |
|
From: Benno S. <be...@ga...> - 2003-04-01 08:01:34
|
Hi guys, cool that multiple tools exist. I'm looking forward for AKAI reading support in libinstpatch. But OTOH, I think it would be very handy if someone of you could port libakai to linux (or fix that support lib Sebastien talked about). It would especially be useful for those like me that experiment with the audio engine, since for the beginning I'd like to read AKAI samples (at least basic stuff) as easily as possible. Of course later the way to go will be using a complete, multiformat and flexible library like libinstpatch, but I think for now it would be VERY HANDY if some of you (Christian S., Frank, Sebastien, Paul Kellet, others .. ?) could fix libakai so that it works out of the box on Linux. comments ? PS: I'm just programming a Delta 1010 card, ALSA really rocks :-) cheers, Benno http://linuxsampler.sourceforge.net Scrive Josh Green <jg...@us...>: > > Cool, thanks for the info. Its not chiming in late anyways, since I have > yet to even start on the Akai stuff. There is still a little bit to be > done before this. Things are coming together fast now though. It will > probably only be a few weeks before it will be in a usable state, > although much bug hunting will need to be done, as the new API for > libInstPatch and many other things have not been tested thoroughly. I'll > be sure to notify the list when the new development branch of Swami is > ready for testing. I'm getting excited, since I've been working on this > stuff for over 6 months now without seeing any direct results in > functionality. I think the wait is going to be worth it though :) > Cheers. > Josh Green > > > ------------------------------------------------- This mail sent through http://www.gardena.net |
|
From: Sebastien M. <me...@me...> - 2003-04-01 20:34:22
|
I think porting libakai to linux would take no more than an evening. Removing the ngl dependency (what a pity to remove this fine piece of code! ;D ) would require maybe one week at max (counting only the evenings). But I won't do it (well, I'll do the linux port maybe if I get really fed up with my others projects one of these days... ;) Sebastien Benno Senoner wrote: >Hi guys, >cool that multiple tools exist. >I'm looking forward for AKAI reading support in libinstpatch. > >But OTOH, I think it would be very handy if someone of you could port >libakai to linux (or fix that support lib Sebastien talked about). >It would especially be useful for those like me that experiment with >the audio engine, since for the beginning I'd like to read AKAI samples >(at least basic stuff) as easily as possible. >Of course later the way to go will be using a complete, multiformat and >flexible library like libinstpatch, but I think for now it would be >VERY HANDY if some of you (Christian S., Frank, Sebastien, Paul Kellet, others >.. ?) could fix libakai so that it works out of the box on Linux. > >comments ? > >PS: I'm just programming a Delta 1010 card, ALSA really rocks :-) > >cheers, >Benno >http://linuxsampler.sourceforge.net > > > > |
|
From: Marek P. <ma...@na...> - 2003-04-01 21:49:28
|
On Tue, 2003-04-01 at 10:01, Benno Senoner wrote: > Hi guys, > cool that multiple tools exist. > I'm looking forward for AKAI reading support in libinstpatch. > > But OTOH, I think it would be very handy if someone of you could port > libakai to linux (or fix that support lib Sebastien talked about). > It would especially be useful for those like me that experiment with > the audio engine, since for the beginning I'd like to read AKAI samples > (at least basic stuff) as easily as possible. Benno, i think in the meantime it would be sufficient to fetch abrowse from CVS and use the akai.c code. That should do it. Marek |
|
From: Christian S. <chr...@ep...> - 2003-04-01 22:15:49
|
On Tue, 1 Apr 2003 10:01:32 +0200 Benno Senoner <be...@ga...> wrote: > But OTOH, I think it would be very handy if someone of you could port > libakai to linux (or fix that support lib Sebastien talked about). > It would especially be useful for those like me that experiment with > the audio engine, since for the beginning I'd like to read AKAI samples > (at least basic stuff) as easily as possible. Ok, I will do that in the next days, if no one else does it. > PS: I'm just programming a Delta 1010 card, ALSA really rocks :-) I'm looking forward to multiple channel support, I also have a Delta 1010. CU |
|
From: Josh G. <jg...@us...> - 2003-04-02 00:41:56
|
On Tue, 2003-04-01 at 00:01, Benno Senoner wrote: > Hi guys, > cool that multiple tools exist. > I'm looking forward for AKAI reading support in libinstpatch. > > But OTOH, I think it would be very handy if someone of you could port > libakai to linux (or fix that support lib Sebastien talked about). > It would especially be useful for those like me that experiment with > the audio engine, since for the beginning I'd like to read AKAI samples > (at least basic stuff) as easily as possible. > Of course later the way to go will be using a complete, multiformat and > flexible library like libinstpatch, but I think for now it would be > VERY HANDY if some of you (Christian S., Frank, Sebastien, Paul Kellet, others > .. ?) could fix libakai so that it works out of the box on Linux. > > comments ? > > PS: I'm just programming a Delta 1010 card, ALSA really rocks :-) > > cheers, > Benno > http://linuxsampler.sourceforge.net > If you are just looking for any patch format that has loading support, you could always use SoundFont support with libInstPatch. Maybe this would help the developers here get familiar with the API and get some ideas of what can be improved, etc with libInstPatch as well. As things are now, libInstPatch is compiled with Swami, but the library can be used independently of Swami, once installed. Some example code (note that the loading API will be improved in the near future): IpatchSF2 * linuxsampler_load_soundfont (char *filename) { IpatchSF2 *sf; int fd; if ((fd = open (filename, O_RDONLY)) < 0) { fprintf ("Failed to open file \"%s\": %s", filename, strerror (errno)); return (NULL); } /* this call will look different when loading API is improved */ if (!(sf = ipatch_sf2_load (fd, IPLOAD_ALL, NULL, NULL))) { close (fd); return (NULL); } return (sf); } After loading a SoundFont in this fashion, all the IpatchSampleData objects will contain a single IpatchSampleStoreFile which just holds a location to the relevent sample data in the SoundFont file. A sample data object can contain multiple stores though, so you could load all of them into RAM while still retaining the file stores as well. When it comes to accessing the objects in the SoundFont, there are a number of ways of doing this. If not in a multi-thread environment, you can just access the lists and parameters directly. If multi-thread access to the same objects is desirable, then objects need to be locked when accessing their lists (IPATCH_ITEM_RLOCK/_RUNLOCK and IPATCH_ITEM_WLOCK/_WUNLOCK, currently there is no difference between read or write locking, but in the future there might be) or the somewhat slower iterator system can be used (makes a duplicate of a list under lock, aftwards this list can be used at ones own leasure). I'll just assume single thread access for these examples: There is a nice function for rendering a patch item (currently IpatchSF2Preset, IpatchSF2Inst or IpatchSF2Sample objects) into SoundFont compatible "voices". This comes in real handy when doing actual synthesis (used in FluidSynth plugin). It looks like this: ipatch_sf2_voices_foreach (IpatchSF2Voices *obj, int note, int velocity, IpatchSF2VoicesForeachFunc func, gpointer data) obj is the item to convert to voices. note and velocity are the MIDI note and velocity of the note event. func is the function to call with each rendered voice. The IpatchSF2VoicesForeachFunc is passed a structure containing the original parameters, plus an array of generators (effect parameters), a modulator list (real time effect controls) and a SoundFont sample. From this information a single voice can be created. Here is an example of accessing samples and manipulating its sample stores (in this case we are checking each sample to see if it has a RAM store, if not we create it), essentially loads all samples into RAM: { IpatchSF2 *sf; IpatchSF2Sample *sample; IpatchSampleStore *store, *ramstore; GSList *p; /* glib single linked list type (forward only) */ if (!(sf = linuxsampler_load_soundfont ("test.sf2"))) exit (1); /* single threaded direct list access, a no no for MT environments */ p = sf->samples; while (p) /* loop over SoundFont samples */ { sample = (IpatchSF2Sample *)(p->data); /* find the fastest readable sample data store for the sample */ store = ipatch_sf2_sample_find_store_ref (sample, 0, IPATCH_SAMPLE_STORE_FIND_FASTEST | IPATCH_SAMPLE_STORE_FIND_READABLE); /* if not a RAM sample store, create one */ if (!IPATCH_IS_SAMPLE_STORE_RAM) { ramstore = ipatch_sample_store_duplicate (store, IPATCH_TYPE_SAMPLE_STORE_RAM, &err); if (!ramstore) { fprintf (stderr, "Error duplicating sample data: %s\n", err ? err->message : "<No details>"); exit (1); } } g_object_unref (store); /* remove our reference from find */ p = p->next; /* next list node */ } } Anyways.. Probably writing too much for this email :) I invite anyone who is interested to check things out, ask questions, make suggestions etc. I'd like to start to get an idea of whats good and what could be improved, before things become too dependent. Cheers. Josh Green |