> > 440.0 is still an exact integer
> Hunh? What Scheme is this? The Scheme spec says
> "It [a numerical constant] is inexact if it contains a decimal point..."
Yes, my mistake, I meant to say that 440.0 is still an integer.
Welcome to MzScheme version 205.8, Copyright (c) 1995-2003 PLT
> (integer? 440.0)
#t
> It also says "inexactness is a contagious property of a number".
Welcome to MzScheme version 205.8, Copyright (c) 1995-2003 PLT
> (exact? (* 0 440.0))
#t
This is explicitly mentioned in R5RS, and exact zeroes turn up all the
time in controller input streams, from midi controllers for example.
> In any case, type checks are trivial.
Well yes, it is the the type check that determines the OSC encoding, but
without explicit type tagging there is no way of knowing if 1.0 should be
encoded as a single or double precision value? Or in fact if it is a
'proper' integer that has been contaminated somewhere along its
journey?
My actual argument regards all this is that OSC is a good thing to have
in user space, and that in user space 440 should be a valid frequency
input, and 1.0 a valid index input. I think it is an amazing contribution of
SuperCollider that composers find the language and the environment
approachable. The 'scsynth' OSC implementation is part of this
contribution, we should live up to it's example.
Regards,
Rohan
An aside: I bought up scheme as a counterexample to Lua to show that
just because a language has a lot of numerical types does not help with
getting OSC encoding `correct'.
(integer? 1.0) => #t
(integer? 1) => #t
(exact? 1.0) => #f
(exact? 1) => #t
(= 1 1.0) => #t
(eq? 1 1) => #t
(eq? 1.0 1.0) => #f
(eq? 1 1.0) => #f
These questions are interesting, and of course not peculiar to lisps, but
implementors should bend over backwards trying to make sure that
composers don't *need* to ponder the mysteries of inexact integers to
tune an instrument.
Four hours of work for an IPOD
>>> linux-audio-dev-request(a)music.columbia.edu 1/26/2004 10:02:19 AM
>>>
Send linux-audio-dev mailing list submissions to
linux-audio-dev(a)music.columbia.edu
To subscribe or unsubscribe via the World Wide Web, visit
http://music.columbia.edu/mailman/listinfo/linux-audio-dev
or, via email, send a message with subject or body 'help' to
linux-audio-dev-request(a)music.columbia.edu
You can reach the person managing the list at
linux-audio-dev-owner(a)music.columbia.edu
When replying, please edit your Subject line so it is more specific
than "Re: Contents of linux-audio-dev digest..."
Today's Topics:
1. Re: [RFC] Lite OSC API (Kjetil Svalastog Matheussen)
2. RE: Modulars (Brad Arant)
3. Modulars (Kjetil Svalastog Matheussen)
----------------------------------------------------------------------
Message: 1
Date: Mon, 26 Jan 2004 17:35:09 +0100 (CET)
From: Kjetil Svalastog Matheussen <k.s.matheussen(a)notam02.no>
Subject: [linux-audio-dev] Re: [RFC] Lite OSC API
To: linux-audio-dev(a)music.columbia.edu
Message-ID: <Pine.LNX.4.58-L.0401261731570.12025(a)iannis.uio.no>
Content-Type: TEXT/PLAIN; charset=US-ASCII
rd(a)alphalink.com.au:
>
> Since I think this is really important I will give an example, and
from the
> other end of a continuum. I use scheme for most of my music work.
> Scheme has a very sophisticated numerical tower. I might write (->
> "/n_set" 1001 "freq" 440) to set the frequency of an instrument at
SC3.
> The OSC encoder encodes values based on their lisp type, 1001 is an
> integer and gets encoded as 'i'. Lets assume that to the receiver
the
> frequency argument is a float, here I lose because 440 is an integer.
I
> argue that a receiver implemented like that is just wrong, that an
integer
> 440 frequency is completely valid, and SC3 thankfully agrees and
plays
> the right note.
>
For what scheme implementation are you using? And where can I get what
you are using?
--
------------------------------
Message: 2
Date: Mon, 26 Jan 2004 08:51:19 -0800
From: "Brad Arant" <barant(a)barant.com>
Subject: RE: [linux-audio-dev] Modulars
To: "'The Linux Audio Developers' Mailing List'"
<linux-audio-dev(a)music.columbia.edu>
Message-ID: <200401261655.i0QGt1EO021207(a)roar.music.columbia.edu>
Content-Type: text/plain; charset="us-ascii"
I have a few more for you since I still own some of these - don't hin
anybody has done emulators for them but I thought I would at least let
you
know they are there.
PAIA Modular
ARIES System II
-----Original Message-----
From: linux-audio-dev-bounces(a)music.columbia.edu
[mailto:linux-audio-dev-bounces@music.columbia.edu] On Behalf Of
Juhana
Sadeharju
Sent: Monday, January 26, 2004 8:20 AM
To: linux-audio-dev(a)music.columbia.edu
Subject: [linux-audio-dev] Modulars
Hello.
Below is an unfinished list of modular synths. Better than nothing.
This kind of simple lists gives a good overall picture of the
situation.
For us developers the list should have following info: have source
code?
have manuals? have screenshots? have example instrument files?
I think I have collected enough all of that.
BTW, the paper on first interactive graphics system (I.Sutherland's
SketchPad 1963) gives the idea that the drawn circuit diagram could
directly
be used as input to the circuit simulators.
Digital modulars have been around as long but I could not find
anything
(between 1963-1980) on having a graphical frontend to them.
Of course, I do not have access to many old papers.
Regards,
Juhana
============================================================================
=
Source Graph Script
Name Code GUI UI Author/Notes
----------------------------------------------------------------------------
-
AlsaModularSynth Yes Yes No M.Nagorni & F.Adriaensen
AnalogBox No Yes ? ?
Arts Yes Yes No ?
AudioMulch No Yes ? Ross Bencina
BlockCompiler OnHold No Yes M. Karjalainen
Building Blocks No Yes ? MIDI only
CPS No Yes ? Niels Gorisse
Csound Yes No Yes Barry Vercoe
Cmusic Yes No Yes ?
DirectCsound ? ? ? ?
DreamStation No ? ? Audio Simulation
Fugue Yes No Yes ?
Gabriel ? Yes ? ?
Galan Yes Yes ? ?
Gdam Yes Yes ? ?
Harmonizer/Vsig No Yes Yes Eventide
Infinity No Yes ? Sound Quest
InstrumentBuilder No Yes ? Mark Trombino, Csound
frontend
jMax Yes Yes Yes IRCAM
JSyn No ? ? ?
Kyma No ? ? Symbolic Sound
LabView No Yes Yes National Instruments
Matlab/Simulink No Yes ? Mathworks
MAX/MSP No Yes ? Cycling '74
Moog Modular V No ? ? Arturia
NMEdit Yes Yes No ?
Nord Modular No Yes No Clavia
Nyquist Yes No Yes R.B. Dannenberg
OASYS No ? ? Korg
OpenMusic ? Yes ? IRCAM
PatchWork ? ? ? ?
PD Yes Yes No Miller Puckette
Pulsar/Scope/Noah No Yes No Creamware
PSK Yes No Yes ?
Ptolemy Yes Yes ? ?
Quasimodo Yes Yes No Paul Davis
Reaktor No Yes No Native Instruments
Reality No ? ? Seer Systems
SAOL Yes No Yes ?
Scilab/Scicos Yes ? ? ?
Sildex/Signal ? ? ? ?
Spiralsynthmodular Yes Yes ? ?
SPT ? ? ? Synthetic Intelligence
Supercollider No ? Yes James McCartney
SynC Modular No ? ? ?
SynthBuilder Yes Yes ? Staccato Systems
Tassman No Yes No Applied Acoustics
Tempest No Yes ? Virtual Labs
Vaz Modular No Yes No STL/Martin Fay
VirSyn No ? ? ?
Virtual Waves No Yes ? Synoptic
Visual Orchestra No ? ? ?
WaveWarp No ? ? Sounds Logical
============================================================================
=
------------------------------
Message: 3
Date: Mon, 26 Jan 2004 17:51:46 +0100 (CET)
From: Kjetil Svalastog Matheussen <k.s.matheussen(a)notam02.no>
Subject: [linux-audio-dev] Modulars
To: linux-audio-dev(a)music.columbia.edu
Message-ID: <Pine.LNX.4.58-L.0401261742350.12025(a)iannis.uio.no>
Content-Type: TEXT/PLAIN; charset=US-ASCII
Juhana Sadeharju:
>
> Hello.
>
> Below is an unfinished list of modular synths. Better than nothing.
> This kind of simple lists gives a good overall picture of the
situation.
>
> For us developers the list should have following info: have source
code?
> have manuals? have screenshots? have example instrument files?
> I think I have collected enough all of that.
>
> BTW, the paper on first interactive graphics system (I.Sutherland's
> SketchPad 1963) gives the idea that the drawn circuit diagram could
> directly be used as input to the circuit simulators.
>
> Digital modulars have been around as long but I could not find
> anything (between 1963-1980) on having a graphical frontend to them.
> Of course, I do not have access to many old papers.
>
There was one with a graphical interface:
MusicBox No Yes No David Fahrland
And its from the 64-69 or something, implemented in fortran, had a
custom
made graphical interface, and supposedly was very much like Max, only
20 years earlier. The machine was placed at EMS/Sweden.
>From google I only found this information:
http://www.ballade.no/nmi.nsf/doc/art2003100811103357431448
(At the top there is a picture of the machine)
--
------------------------------
_______________________________________________
linux-audio-dev mailing list
linux-audio-dev(a)music.columbia.edu
http://music.columbia.edu/mailman/listinfo/linux-audio-dev
End of linux-audio-dev Digest, Vol 4, Issue 62
**********************************************
> 440.0 is still an exact integer
Hunh? What Scheme is this? The Scheme spec says
"It [a numerical constant] is inexact if it contains a decimal point..."
It also says "inexactness is a contagious property of a number". In
any case, type checks are trivial.
rd(a)alphalink.com.au:
> > For what scheme implementation are you using? And where can I
> > get what you are using?
>
> I use Matthew Flatt's mzscheme, which is part of the PLT project, see
> <www.plt-scheme.org>. I run it with a two line patch to put the Boehm
> GC into incremental mode.
>
> There is a pre-release archive at <www.alphalink.com.au/~rd>. I have
Thanks, I'm looking at it now. I was hoping you would have used
guile instead so that I could use it in pure data, so I was a bit
dissapointed.
> used this and James McCartney's SC3 synthesis server, see
> <supercollider.sf.net>, as my work environment for over a year and it is
> stable, however unless there is a particular affinity for Lisp I would
> recommend using James McCartney's Smalltalk dialect as a language
> client.
>
Actually, I'm currently using python and pure data to access the SC3 synth
engine. Look at the supercollider module in the pure-data cvs repository.
But it would be nice to use scheme as well as python.
--
I am afraid have gotten to your OSC messages a bit late, I can only
read lists at web archives at present and the jack lists have been
down...
> * No service discovery. This is a big deal, but can be solved /if/ we
I don't know of a database, which I guess is not a good situation.
CNMAT might be interested in doing the basic administration required
for a port register. I think that a database of static port numbers
is preferable to a dynamic system *if* it is workable. If a dynamic
system were neccessary it should be implemented as an OSC server! I
am actually not exactly sure what you mean by service discovery?
> I'm very happy to discussus a GPL'd library implementation or
I have had to do some work on the OSC implementation I have been
using
in order to address two issues. I think you will need to address
these with liblo also. They are: 1. type coercion and 2. variable
argmument messages.
I am going to attach the note I wrote about the implementation below,
which describes these in detail, but briefly on type coercion:
Given the message shape ("/foo/bar" "fi") as in the testlo.c file, a
receiver should match not only ("/foo/bar" "fi" 2.0 23) but also
("/foo/bar" "ii" 2 23) and ("/foo/bar" "if" 2 23.0) and in fact all
other possible numerical encodings, and provide them to the handler in
the form requested.
The work I have done *only* provides the byte string decoder and
encoder, but it does support all the extended basic OSC types and
numerical and string coercion. I think you could use it as is if you
wanted, or of course just take whatever you need. I will happily
implement/apply any changes/fixes required to make it usable for you.
The implementation is in the file 'osc.c' in the jack.clock or
jack.scope archives at <http://www.alphalink.com.au/~rd>. It
works for me but is otherwise untested!
Apart from the above the design looks good, although personally I
agree with James McCartney, see SC3 or recent post to OSC_dev, that
combining the verb and the subject in the address is a bad idea, and
would prefer to see a library that discourages that use ;) (This would
also make the handler type declarations simpler...)
Regards,
Rohan
> Sending '10.1' to a slot that is semantically an integer should
> be undefined, though in practice you get '10'.
Sorry, not even I agree with that. I meant to say that the
floor/truncate/round/ceiling decision should be unspecified.
>From: torbenh(a)gmx.de
>
[ gnomecanvas ]
>the only problem would be determining widget size when you add a widget
>to the canvas. gtk behaves sort of strange there.
[ Posted this to gtk-app-devel-list as well. Reply to where you wish
as I will summary. ]
Should the module widgets be put to a fixed size container before
they are inserted to the canvas? Or what is the problem?
I tested with Glade: created a top window with one "Fixed Position"
container widget, added viewport to the "Fixed Position", inserted
vbox to viewport, inserted horizontal scales to each slot of the vbox.
Then I took the properties of the viewport and changed viewport's
position and size. Only problem appeared when the viewport size
was made smaller than the minimum size of all scales. Viewport could
be made very small in which case the scales were clipped agains the
viewport.
Is there any way to determine when the viewport becomes smaller than
the vbox holding the scales? (Or the vbox larger than the viewport.)
Does the viewport generate any signals in these cases?
Is the viewport a wrong widget for the task? Is there any other constant
size container in GTK?
Regards,
Juhana
> OK, I've thought about this some more and I think I agree with
> you now. I'l add type coercion when I have time, should be easy
> enough.
I think a widely used library that does this transparently will make life
better for everyone. I hope the implementation I mentioned earlier can
save you some time :)
> typed APIs. In this case, if we only do conversions between different
> numerical types I dont see that it will hurt, as long as the corner cases
> are handled sensibly.
I don't think you need to worry about this, if the coercion changes the
semantic value, not just the representation or the precision, the sender
is in error. Sending '10.1' to a slot that is semantically an integer should
be undefined, though in practice you get '10'. Receivers need to run
domain checks in any case...
Regards,
Rohan
> an integer in scheme? Couldnt the problem be solved by specifying
> the type explicitly at send time and doing the coercion then? eg:
>
> (-> Â "/foo" Â "isf" 100 Â "hello" 100.0)
That is exactly what would be required and it is not at all good. Â People
in user space should not have to even know that there are single and
double precision floating point representations in order to set the
frequency of an instrument. Â Especially not from a language
environment where the distinction does not even exist! Â And it will afflict
not only Lisps and dialects but SmallTalks and dialects and MLs and
dialects and so on. Â I don't know the Patcher dialects but I imagine
things would be as bad if not worse.
It loses straight up for variable arity messages, (apply -> Â "/n_setn" node
0 data-from-somewhere).
And even from C like languages users still need to *remember* for
every OSC message they ever want to send whether '/frequency' is
required as a single or double precision real number, and whether
'/midi-note' is required as a 'c' integer, an 'i' integer, an 'f' float, or a 'd'
double, all of which are reasonable requirements for different
implemntations. Â
It means that if two synths have a '/global-gain' controller you might need
to format two different OSC packets to tell them to be quiet [one with a 'f'
zero and one with a 'd' zero]. Â
It means that if a synth implementor decides that the '/phase' input really
should be double precision she cannot change the request type from
the library because it will break *every existing user* of her synth! Â Their
single precision phase values are no longer good enough? Â Surely at
this point the implementor will probably just fix the library to do type
coercion or find another library...
In the redundant case the coercion adds one integer comparison to the
dispatch path per argument, and thoughtful ordering of the coercion
table should get most common cases in two or three comparisons; it is
not an expensive operation. Â
And I am still arguing that it is an important aspect of OSC that when a
synth advertises a '/freq' message, users can be confident that sending
it 440, whether encoded as a 32bit or 64bit integer, or as a 32bit or 64bit
float, will likely tune the synth to A440. Â OSC is in user space, I think it
would be a pity if synths advertised '/freqi', '/freqh', '/freqf' and '/freqd'
messages in an attempt to help users out.
Regards,
Rohan
> For what scheme implementation are you using? And where can I
> get what you are using?
I use Matthew Flatt's mzscheme, which is part of the PLT project, see
<www.plt-scheme.org>. I run it with a two line patch to put the Boehm
GC into incremental mode.
There is a pre-release archive at <www.alphalink.com.au/~rd>. I have
used this and James McCartney's SC3 synthesis server, see
<supercollider.sf.net>, as my work environment for over a year and it is
stable, however unless there is a particular affinity for Lisp I would
recommend using James McCartney's Smalltalk dialect as a language
client.
Regards,
Rohan