From: Glyn A. <gl...@ad...> - 2008-01-27 12:38:49
|
I am currently working on a soft synth, and I would like to know how to scale waveform amplitude with respect to NoteOn velocity. To get an idea of what velocity values should mean, I wrote a test piece in Rosegarden, with a series of notes each having a different text dynamic, from ppp to fff, then used Adjust->Interpret to just apply text dynamics. The mapping from dynamics to velocity numbers looks kind of odd, with intervals between successive dynamics varying between 5 and 20, so it is neither a linear nor a log function. Here is the mapping: ppp => 30 pp => 40 p => 60 mp => 80 mf => 90 f => 105 ff => 110 fff => 115 Is this mapping related to some standard describing how MIDI keyboards should work? I presume some kind of log scaling of the raw velocity data occurs in MIDI controllers, but I do not know that for a fact. The MIDI specs I have looked at say nothing about velocity mapping, and the Soundfont spec is not much help either. Unfortunately, I do not have a MIDI keyboard to experiment with. I am a guitarist. I make all my synth music by writing scores in Rosegarden. Apologies for this being a bit off-topic for Rosegarden users, but I would appreciate some guidance on this. |
From: D. M. M. <mic...@ro...> - 2008-01-27 16:13:53
|
On Sunday 27 January 2008, Glyn Adgie wrote: > intervals between successive dynamics varying between 5 and 20, so it is > neither a linear nor a log function. Here is the mapping: Good question. I find I have absolutely no clue at all, and am probably almost as curious about the answer as you are. Perhaps Chris will wander along and explain how he came up with this map. Here's the entire thing, straight from the code: InterpretCommand::getVelocityForDynamic(std::string text) { int velocity = 100; // should do case-insensitive matching with whitespace // removed. can surely be cleverer about this too! if (text == "ppppp") velocity = 10; else if (text == "pppp") velocity = 20; else if (text == "ppp") velocity = 30; else if (text == "pp") velocity = 40; else if (text == "p") velocity = 60; else if (text == "mp") velocity = 80; else if (text == "mf") velocity = 90; else if (text == "f") velocity = 105; else if (text == "ff") velocity = 110; else if (text == "fff") velocity = 115; else if (text == "ffff") velocity = 120; else if (text == "fffff") velocity = 125; NOTATION_DEBUG << "InterpretCommand::getVelocityForDynamic: unrecognised dynamic " << text << endl; } -- D. Michael McIntyre |
From: Aurelien <or...@am...> - 2008-01-27 16:24:18
|
On Sun, Jan 27, 2008 at 11:13:42AM -0500, D. Michael McIntyre wrote : > On Sunday 27 January 2008, Glyn Adgie wrote: > > > intervals between successive dynamics varying between 5 and 20, so it is > > neither a linear nor a log function. Here is the mapping: > > Good question. I find I have absolutely no clue at all, and am probably > almost as curious about the answer as you are. Perhaps Chris will wander > along and explain how he came up with this map. > > Here's the entire thing, straight from the code: > [...] I'm probably too new to havea good idea about it, but as the reaction upon velocity depends on the synth/soundfont/plugin, perhaps is it really an "arbitrary" choice, and everyone has to understand it his own way. I mean, musically, the velocity is linked to the instrument, and probably more, to the player. And, in some way a ffffff for Cannibal Corpse guitarist is probably not the same for John Williams! -- ============================== ORL /// AMMD Booking (www.ammd.net) ° Sebkha-Chott (www.sebkhachott.net - Ohreland [FR]) - next touring period: 04-06/2008 ° Unexpect (www.unexpect.com - Montréal [CA]) - Europe tour w/ Sebkha-Chott period: 09-12/2008 ° La Muette (www.myspace.com/muette - Paris [FR]) - next touring period: 03-05/2008 ° Mel-P (http://melpmusic.websanslimit.net - Le Mans [FR]) - next touring period: 01-04/2008 Phone: +33 (0)95 234 72 48 |
From: Glyn A. <gl...@ad...> - 2008-01-28 20:53:19
|
Aurelien wrote: > On Sun, Jan 27, 2008 at 11:13:42AM -0500, D. Michael McIntyre wrote : > >> On Sunday 27 January 2008, Glyn Adgie wrote: >> >> >>> intervals between successive dynamics varying between 5 and 20, so it is >>> neither a linear nor a log function. Here is the mapping: >>> >> Good question. I find I have absolutely no clue at all, and am probably >> almost as curious about the answer as you are. Perhaps Chris will wander >> along and explain how he came up with this map. >> >> Here's the entire thing, straight from the code: >> >> > [...] > > I'm probably too new to havea good idea about it, but as the reaction > upon velocity depends on the synth/soundfont/plugin, perhaps is it > really an "arbitrary" choice, and everyone has to understand it his own > way. > I mean, musically, the velocity is linked to the instrument, and > probably more, to the player. And, in some way a ffffff for Cannibal > Corpse guitarist is probably not the same for John Williams! > > > /* Did not post this to list originally. It's all silly stuff anyway */ This is pretty much as I expected. Each instrument will have its own velocity sensitivity parameter (I already do this), and it might be useful to have a synth-global velocity sensitivity parameter to match a MIDI controller to the synth. Presuming that fff means "play as loud as you can without breaking the instrument", then ffff means "by all means break your instrument, Jimi Hendrix style", and perhaps fffff means "and while you are at it, destroy as many members of the audience as possible". On the other hand, presuming that ppp means "play as quietly as you can", then pppp means "stop playing in such a way that people can tell you are not there", and ppppp means "stop playing, and go to the pub". Which is precisely where I am going, as it happens. Glyn |
From: Glyn A. <gl...@ad...> - 2008-01-28 19:58:40
|
D. Michael McIntyre wrote: > On Sunday 27 January 2008, Glyn Adgie wrote: > > >> intervals between successive dynamics varying between 5 and 20, so it is >> neither a linear nor a log function. Here is the mapping: >> > > Good question. I find I have absolutely no clue at all, and am probably > almost as curious about the answer as you are. Perhaps Chris will wander > along and explain how he came up with this map. > > Here's the entire thing, straight from the code: > > InterpretCommand::getVelocityForDynamic(std::string text) > { > int velocity = 100; > > // should do case-insensitive matching with whitespace > // removed. can surely be cleverer about this too! > > if (text == "ppppp") > velocity = 10; > else if (text == "pppp") > velocity = 20; > else if (text == "ppp") > velocity = 30; > else if (text == "pp") > velocity = 40; > else if (text == "p") > velocity = 60; > else if (text == "mp") > velocity = 80; > else if (text == "mf") > velocity = 90; > else if (text == "f") > velocity = 105; > else if (text == "ff") > velocity = 110; > else if (text == "fff") > velocity = 115; > else if (text == "ffff") > velocity = 120; > else if (text == "fffff") > velocity = 125; > > NOTATION_DEBUG << "InterpretCommand::getVelocityForDynamic: unrecognised > dynamic " << text << endl; > > } > > This code makes provision for very quiet and very loud dynamics that I have never seen in scores. Rosegarden does not give access to them, AFAIK. According to a composer friend of mine, such dynamics have been used by a few composers, e.g. Tchaikovsky and Berlioz. My friend said he saw "pppppp" in part of Tchaikovsky's "Pathetique" (sp?). This was for a bassoon, which, like the oboe, has a pretty limited dynamic range, i.e. loud and louder, so the mark is pretty much nonsense. Apparently, some conductors substitute a bass clarinet for this piece, as it has a much wider dynamic range than the bassoon. Chris has sent me some info about a professional master keyboard's velocity response curves. Looks useful. I will respond to that separately. Glyn |
From: <ci...@gm...> - 2008-01-27 17:48:34
|
Hi Glyn, to give you an impression what kind of dynamic curves good master keyboards= =20 can produce you can consult this manual http://www.doepfer.de/pdf/LMK4_man.pdf Cheaper keyboards just produce simpler curves. On the synthesis side you can look into the codes from AMS, whysynth and/or= =20 zynaddsubfx synthies. If you plan to write a synth and not a guitar synth, than you should find a= =20 keyboard player who uses your soundengine. It's a complete different thing= =20 putting in some notes into the matrix editor or play life. My 50 =A2 here ///Chris(toph) On Sunday 27 January 2008 13:22, Glyn Adgie wrote: > I am currently working on a soft synth, and I would like to know how to > scale waveform amplitude with respect to NoteOn velocity. To get an idea > of what velocity values should mean, I wrote a test piece in Rosegarden, > with a series of notes each having a different text dynamic, from ppp to > fff, then used Adjust->Interpret to just apply text dynamics. The > mapping from dynamics to velocity numbers looks kind of odd, with > intervals between successive dynamics varying between 5 and 20, so it is > neither a linear nor a log function. Here is the mapping: > > ppp =3D> 30 > pp =3D> 40 > p =3D> 60 > mp =3D> 80 > mf =3D> 90 > f =3D> 105 > ff =3D> 110 > fff =3D> 115 > > Is this mapping related to some standard describing how MIDI keyboards > should work? I presume some kind of log scaling of the raw velocity data > occurs in MIDI controllers, but I do not know that for a fact. The MIDI > specs I have looked at say nothing about velocity mapping, and the > Soundfont spec is not much help either. > > Unfortunately, I do not have a MIDI keyboard to experiment with. I am a > guitarist. I make all my synth music by writing scores in Rosegarden. > > Apologies for this being a bit off-topic for Rosegarden users, but I > would appreciate some guidance on this. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Rosegarden-user mailing list > Ros...@li... - use the link below to unsubscribe > https://lists.sourceforge.net/lists/listinfo/rosegarden-user |
From: Glyn A. <gl...@ad...> - 2008-01-28 20:39:25
|
ci...@gm... wrote: > Hi Glyn, > > to give you an impression what kind of dynamic curves good master keyboards > can produce you can consult this manual > > http://www.doepfer.de/pdf/LMK4_man.pdf > > Cheaper keyboards just produce simpler curves. > > On the synthesis side you can look into the codes from AMS, whysynth and/or > zynaddsubfx synthies. > If you plan to write a synth and not a guitar synth, than you should find a > keyboard player who uses your soundengine. It's a complete different thing > putting in some notes into the matrix editor or play life. > > My 50 ¢ here > > ///Chris(toph) > > > On Sunday 27 January 2008 13:22, Glyn Adgie wrote: > >> I am currently working on a soft synth, and I would like to know how to >> scale waveform amplitude with respect to NoteOn velocity. To get an idea >> of what velocity values should mean, I wrote a test piece in Rosegarden, >> with a series of notes each having a different text dynamic, from ppp to >> fff, then used Adjust->Interpret to just apply text dynamics. The >> mapping from dynamics to velocity numbers looks kind of odd, with >> intervals between successive dynamics varying between 5 and 20, so it is >> neither a linear nor a log function. Here is the mapping: >> >> ppp => 30 >> pp => 40 >> p => 60 >> mp => 80 >> mf => 90 >> f => 105 >> ff => 110 >> fff => 115 >> >> Is this mapping related to some standard describing how MIDI keyboards >> should work? I presume some kind of log scaling of the raw velocity data >> occurs in MIDI controllers, but I do not know that for a fact. The MIDI >> specs I have looked at say nothing about velocity mapping, and the >> Soundfont spec is not much help either. >> >> Unfortunately, I do not have a MIDI keyboard to experiment with. I am a >> guitarist. I make all my synth music by writing scores in Rosegarden. >> >> Apologies for this being a bit off-topic for Rosegarden users, but I >> would appreciate some guidance on this. >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by: Microsoft >> Defy all challenges. Microsoft(R) Visual Studio 2008. >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >> _______________________________________________ >> Rosegarden-user mailing list >> Ros...@li... - use the link below to unsubscribe >> https://lists.sourceforge.net/lists/listinfo/rosegarden-user >> > > The LMK4 manual is interesting, in that the keyboard is be configurable to provide different velocity sensitivities. Presumably, this allows the user to configure the "feel" of the keyboard, and correct for different synth's interpretations of velocity. From another post, it looks like none of this is standardised as such. The situation is perhaps similar to that regarding signal levels in an analog studio. There are nominal signal levels for various sound sources, but gain controls are needed to match one piece of equipment to another. Concerning my synth, it looks like I need a global velocity scaling control, to match my synth to its MIDI source, whether that be Rosegarden, another sequencer, or a master keyboard. Perhaps more relevant to Rosegarden users, should Rosegarden have a velocity sensitivity control, like the master keyboard? The kind of control I have in mind works like a gamma control on a monitor or photo editor. It is a modified power law. In the case of MIDI velocities 1-127, it maps 1=>1 and 127=>127, and bends the mapping in between, concave or convex. Glyn |
From: Chris C. <ca...@al...> - 2008-01-28 10:45:20
|
On 27/01/2008, Glyn Adgie <gl...@ad...> wrote: > I am currently working on a soft synth, and I would like to know how to > scale waveform amplitude with respect to NoteOn velocity. To get an idea > of what velocity values should mean, I wrote a test piece in Rosegarden, > with a series of notes each having a different text dynamic, from ppp to > fff, then used Adjust->Interpret to just apply text dynamics. The > mapping from dynamics to velocity numbers looks kind of odd, with > intervals between successive dynamics varying between 5 and 20, so it is > neither a linear nor a log function. > [...] > Is this mapping related to some standard describing how MIDI keyboards > should work? No; there is no standard for how to map from dynamic indications such as ppp or mf onto "loudness". It's entirely a matter of interpretation. Rosegarden just has a single and very arbitrary mapping hard-coded, but there's no particular reason to prefer that over any other. It's quite likely that another mapping might work better in many situations -- it's not as if much testing went into the selection. And it would be better still if it were configurable. Your question is still a good one, it's just that this particular mapping doesn't have much bearing on it. My experience with synth velocity mappings is pretty much limited to "it seems to vary", and I see that you've got better answers than that already elsewhere in the thread. Chris |
From: Glyn A. <gl...@ad...> - 2008-01-29 22:07:15
|
Aurelien wrote: > On Mon, Jan 28, 2008 at 08:39:08PM +0000, Glyn Adgie wrote : > >> Perhaps more relevant to Rosegarden users, should Rosegarden have a >> velocity sensitivity control, like the master keyboard? >> >> The kind of control I have in mind works like a gamma control on a >> monitor or photo editor. It is a modified power law. In the case of MIDI >> velocities 1-127, it maps 1=>1 and 127=>127, and bends the mapping in >> between, concave or convex. >> > > Hum, perhaps am I wrong, but, as you really seems to want to playback > correctly, why not use the velocity "onglet" in the notation editor? > That way you'll be able to get a velocity curve, without needing to put > some fff or pppp on your notation. > I mean, fff and/or pppp aren't volume indication only. It's supposed to > be interpreted by a player, and this will lead to relatively different > kinds of sounds. > > PS : I don't mean to hurt or to be rude, but my English is too bad to > make some more convenient post!!! ;) > > > What is 'velocity "onglet"' in the notation editor? Perhaps this is a language problem. I agree with your point about dynamics notations and their interpretation by musicians rather than machines. The problem as I see it is that a musician who knows a score knows what dynamics are used, so if the score says 'ff', but later says 'fff', they do not go full blast on the 'ff', so they leave some dynamics in reserve for the 'fff'. A score interpreter like Rosegarden, and my event-driven synth, do not know about the whole score's dynamics. Well, actually, Rosegarden could know about what is going to happen later in the music, but maybe this is straying too far into artificial intelligence. Enough rambling, Glyn |
From: D. M. M. <mic...@ro...> - 2008-01-30 00:14:21
|
On Tuesday 29 January 2008, Glyn Adgie wrote: > What is 'velocity "onglet"' in the notation editor? Perhaps this is a > language problem. That must mean "ruler." On the subject of what you should do with your synth, I notice QSynth has a gain knob, and that seems like a reasonable way to deal with this problem. > Perhaps more relevant to Rosegarden users, should Rosegarden have a > velocity sensitivity control, like the master keyboard? > The kind of control I have in mind works like a gamma control on a > monitor or photo editor. It is a modified power law. In the case of MIDI > velocities 1-127, it maps 1=>1 and 127=>127, and bends the mapping in > between, concave or convex. Sure, if you want to write us one! -- D. Michael McIntyre |
From: Chris C. <ca...@al...> - 2008-01-30 10:20:23
|
On 30/01/2008, D. Michael McIntyre <mic...@ro...> wrote: > On Tuesday 29 January 2008, Glyn Adgie wrote: > > > What is 'velocity "onglet"' in the notation editor? Perhaps this is a > > language problem. > > That must mean "ruler." Gosh, and I thought it was a rather tasty cut of beef. > On the subject of what you should do with your synth, I notice QSynth > has a gain knob, and that seems like a reasonable way to deal with > this problem. That doesn't resolve how the mapping (linear or otherwise) from velocity to signal level should be calculated though. It's a very real question. > > Perhaps more relevant to Rosegarden users, should Rosegarden have a > > velocity sensitivity control, like the master keyboard? > > > The kind of control I have in mind works like a gamma control on a > > monitor or photo editor. It is a modified power law. In the case of MIDI > > velocities 1-127, it maps 1=>1 and 127=>127, and bends the mapping in > > between, concave or convex. > > Sure, if you want to write us one! Yes, I think it's the sort of thing that might be handy, but it's not something any of us will ever write. We're happy to leave the synth makers to worry about it! Chris |