From: Greg L. <gr...@li...> - 2005-02-28 12:41:52
|
Mark Constable wrote: > Greg Lee wrote: >=20 =2E.. >> I can help you there. I have utilities to break up soundfonts >> into gus patches and to build up gus patches from samples of >> individual instrument notes in the form of .aiff or .wav files, mo= no >> or stereo, 16 or 24 bit, given a description of the patch structur= e >> in sfz format. The utilities are with the distribution of gt. >=20 >=20 > Are there howto's and instructions for using them ? Having > to download a tarball to read text files is not as much fun > as cruising web pages.. and you didn't paste a URL so I > guess it's the former. I wrote a man page for the utility sfz2pat and provided example sfz files (derived from those created by PL Jones) for the clarinet I mentioned and also for 16 drums patches for the free Kingston "Easyrider" drum samples, and two urls for the latter in a README. In the man page there are urls for the sfz specification (only a small part of which I implement) and for an informative web page on sfz done by PL Jones. I think sfz2pat can replace wav2pat. It does everything wav2pat does and a good deal more. I've appended the man page below. >=20 > My personaly next grand hurdle is knowing how to manipulate > and assemble guspats/sf2/sfz... assuming I can find/get any > samples to deal with in the first place. Sfz2pat will do the assembly part. It will not help in the task of figuring out where in the samples the note should start and end, where the loop points should go, or how to specify the volumes of the various key range samples so they are balanced. >=20 > For me personally, I cannot use timidity for anything actually > productive other than proofing a MIDI file exactly because > the instruments available are just not good enough for anything > but casual listening when all mixed together with a wash of > reverb. This is a pity because the methodology of rendering > a MIDI file to wav works... and would be brilliant if the > source instruments were of a good enough quality to justify > working on further within "serious" projects. Presumably, part of the quality problem is not keeping enough bits. I learned from the Timidity++ code how to mix voices at 32 bits, and that helps the quality a lot (though I don't know exactly why). It would probably be good to use 24 or 32 bit instrument samples. Sfz2pat is of no direct help here, because although it will read 24 bit samples, it has to reduce them to 16 bits to fit the gus .pat format. However, the code is there in gt to by-pass the .pat format and send 24 bit samples to timidity's resampling routines. Modifying the resampling code to use 24 (or 32) bit samples turns out to be easy -- mostly a matter of changing some declarations. But this would require some changes to Timidity++, of course. Here is the sfz2pat man page: sfz2pat(1) sfz2pat(1) NAME sz2pat - convert sample files into extended GUS patches SYNOPSIS sfz2pat filename.sfz DESCRIPTION This documents both the conversion program sfz2pat and= the sfz loader of the gt midi player. The name of one or more .wav files containing samples and var= ious parameters describing the desired patch structure and how to play the patch are given = in a text file with the exten=EF=BF=BD sion .sfz. Run the sfz2pat utility on filename.sfz, and, if = all goes well, the result will be a GUS patch file named filename.pat. The same .sfz file can be loaded and played directly by gt. = Just put the name of the file into timidity.cfg or a file it sources, as you would the name= of a GUS .pat file. Some features of sfz patches can only be used when the patch is= loaded directly, because they don't fit into the GUS format. The format of .sfz files is described in http://www.rgcaudio.= com/sfzformat.htm. See also http://www.drealm.org.uk/sfz/plj-sfz.html a more lucid, les= s authoritative, account (from PL Jones). An .sfz patch file is a text file describing a s= ingle instrument, as imple=EF=BF=BD mented here. (Though a whole set of drums can be character= ized in a single .sfz file for RGC Audio's player program, this implementation requires a se= parate patch file for each drum.) Typically, an instrument will have a number of different sa= mples, and which sample sounds when a note on that instrument is played will depend on vario= us circumstances -- the pitch of the note, how loud it is, and so on. A sample though= t of in relation to whether it sounds when a note is played is referred to as a layer in the= RGC documentation, but I usu=EF=BF=BD ally call it a sample. Each individual sample (layer) of a= n instrument is described in a region of the .sfz patch file (see the <region> opcode below)= . Only a very tiny, little, miniscule part of SFZ is currently = interpreted. SFZ opcodes in the .sfz file that are not yet implemented are ignored. Tho= se that are interpreted may or may not work exactly as specified in the RGC Audio documentat= ion (or as described here). The .pat files that are created are GUS extended patch files,= so they can have velocity layers and can be in stereo. If the source .wav file is in = stereo, the extended GUS patch derived from it will also be in stereo. In addition to .wav = files, you can also use .aiff and .ogg files for samples. 24-bit .wav files are ok, but f= or GUS patches, they are down- converted to 16 bits, so the extra resolution is lost. When = loading patches directly, all 24 bits are used. OPCODES Here are the opcodes currently intepreted. <group> Beginning of global opcodes that apply thoughout fol= lowing regions, until the next <group> or end of file. <region> Beginning of local opcodes that apply only until the n= ext <region>, or <group> or end of file. sample=3Dfilename Gives path of a file containing sample data. key=3Dk Note to play. k is a number 0-127 or an IPN note na= me (letter A-G, optional # or b, then octave from -1 to 9), and likewise below for all = values referred to as k. hikey=3Dk Highest key of range. Default is 60. lokey=3Dk Lowest key of range. Default is 60. pitch_keycenter=3Dk Middle key of range. Default is 60. hivel=3Dv Highest velocity of range. v is a number 0-127. Defau= lt is 127. lovel=3Dv Highest velocity of range. v is a number 0-127. Defau= lt is 0. offset=3Dn Where patch starts in sample file, in samples from = the beginning of the file. Default is 0. end=3Dn Where patch ends in sample file, in samples. Defaul= t is the end of the file. loop_start=3Dn Where the loop start point of patch is in sample fil= e, in samples. Default is the offset of the sample. loop_end=3Dn Where the loop end point of patch is in sample file, i= n samples. Default is the end of the sample. loop_mode=3Dloop_sustain Makes the sample loop while note is held. Default is = no loop. volume=3Df How loud to play the sample, in decibels. Default = is 0 decibel change to what is found in the sample file. amp_random=3Df The sample is amplified by a randomly selected amount = =66rom 0 to f, given in deci=EF=BF=BD bels. (This has no effect when creating .pat files.) ampeg_release=3Df Release time for the volume envelope, in seconds. group=3Dn Defines the group the sample belongs to. off_by=3Dn The sample will stop playing when a note from group n = is started. trigger=3Dfirst The sample will be played only if no other note in t= he same group (and on the same channel) is playing. (This has no effect when creatin= g .pat files.) trigger=3Dlegato The sample will be played only if another note in the = same group (and on the same channel) is playing. (This has no effect when creatin= g .pat files.) hirand=3Df The sample plays only when a randomly selected numbe= r between 0 and 1 is less than f. (This has no effect when creating .pat files.) lorand=3Df The sample plays only when a randomly selected number = between 0 and 1 is greater or equal to f. (This has no effect when creating .pat fi= les.) sw_hikey=3Dk Highest key in switch range. sw_lokey=3Dk Lowest key in switch range. sw_down=3Dk The sample will play only if note k is playing (on = the same channel), provided it falls within the switch range. (This has no effect wh= en creating .pat files.) sw_up=3Dk The sample will not play if note k is playing (on the = same channel), provided it falls within the switch range. (This has no effect wh= en creating .pat files.) BUGS Probably, there are lots of bugs. This is an experiment. AUTHOR Greg Lee <gr...@li...> 11 Oct 2004 sfz2pat(1) |