Csound Csound-dev Csound-tekno Search About

[Csnd] writing OSC values into a table

Date2011-08-06 22:05
Fromzappfinger
Subject[Csnd] writing OSC values into a table
I would like to write values received over OSC into a table, to be played
back at different speeds.
I am not sure if this is possible, to create tables dynamically this way.

Any ideas?

Richard

--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4673599.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-06 22:21
Fromjoachim heintz
SubjectRe: [Csnd] writing OSC values into a table
can you describe this more in detail? which kind of values: just floats,
ints, or anything else? is the number of values fix, or is there at
least a reasonable maximum?
bye -
	joachim


Am 06.08.2011 23:05, schrieb zappfinger:
> I would like to write values received over OSC into a table, to be played
> back at different speeds.
> I am not sure if this is possible, to create tables dynamically this way.
> 
> Any ideas?
> 
> Richard
> 
> --
> View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4673599.html
> Sent from the Csound - General mailing list archive at Nabble.com.
> 
> 
> Send bugs reports to the Sourceforge bug tracker
>             https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"
> 
> 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-06 22:35
Fromzappfinger
Subject[Csnd] Re: writing OSC values into a table
For now just ints. And the table size is of course limited, but that is not
important, say N.
The OSC messages are coming in at k-rate, if am not mistaken
I was thinking of a structure like this, in pseudocode:

do loop
   get value via OSClisten
   write value into next table position
until table index = N

turn off OSC (or continue with OSClisten, but discard the values)

playback table at an audio rate.




--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4673644.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 09:19
Fromjoachim heintz
SubjectRe: [Csnd] Re: writing OSC values into a table
yes this should be pretty easy. perhaps this can help:
http://en.flossmanuals.net/csound/ch019_d-function-tables

actually you just need to adjust the pointer, and write via tabw, read
via tab (or tablew/table if you work with powof2 table sizes). as
looping is done in each k-cycle, you may not need something like do
loop. either just increment the pointer with something like kndx =
kndx+1, or increment the pointer when a new osc value has been received.

send some code, if you like. best -

	joachim



Am 06.08.2011 23:35, schrieb zappfinger:
> For now just ints. And the table size is of course limited, but that is not
> important, say N.
> The OSC messages are coming in at k-rate, if am not mistaken
> I was thinking of a structure like this, in pseudocode:
> 
> do loop
>    get value via OSClisten
>    write value into next table position
> until table index = N
> 
> turn off OSC (or continue with OSClisten, but discard the values)
> 
> playback table at an audio rate.
> 
> 
> 
> 
> --
> View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4673644.html
> Sent from the Csound - General mailing list archive at Nabble.com.
> 
> 
> Send bugs reports to the Sourceforge bug tracker
>             https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"
> 
> 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 13:09
Fromzappfinger
Subject[Csnd] Re: writing OSC values into a table
Ok here is a sample.
It is not quote working yet.
I was also hoping I could see the wave form in the table after it is filled,
but I guess the waveform display is not updated?
Floats are coming in over OSC, forming many periods of a triangle waveform,
max amplitude =1.0

Richard



; Select audio/midi flags here according to platform
-odac     ;;;RT audio out
-iadc    ;;;uncomment -iadc if RT audio input is needed too




sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

giFt   	ftgen     0, 0, 2^20, 2, 0; large table
giosc1 	OSCinit	9000

instr 1
kval = 0.0
kindx = 0
kans 	OSClisten giosc1, "/freq", "f", kval
          prints    "RECORDING!%n"
loop:
          tablew    kval, kindx, giFt
          ;printk	1,kval
          kindx = kindx + 1
          ;if kindx < ftlen(giFt) kgoto loop
endin

instr 2; read the values of the table and play it again
kval = 0.0
          prints    "PLAYING!%n"
 ;create a reading pointer in the table, moving in p3 seconds from index 0
to the end
kindx     linseg    0, p3, ftlen(giFt)
 ;read the k-signal
kval      table     kindx, giFt
aSnd      oscil3    .2, kval, giFt; play it
          outs      aSnd, aSnd
endin




;sine wave.
f 1 0 16384 10 1

i 1 0 30
i 2 31 2
e




--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4674848.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 16:26
Fromjoachim heintz
SubjectRe: [Csnd] Re: writing OSC values into a table
hi richard -
i think it might be better to use the same method in instr 2 as in instr
1 for the pointer. and you need another function table for the audio in
instrument 2. below is a suggestion. note that it is important to set
kndx to 0 just at init-time. otherwise it will always be reset to 0 in
each k-cycle (sorry about my wrong suggestion in my previous mail).
does it work now?
best -
	joachim



; Select audio/midi flags here according to platform
-odac     ;;;RT audio out
-iadc    ;;;uncomment -iadc if RT audio input is needed too




sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

giFt   	ftgen     0, 0, 2^20, 2, 0; large table
giSine		ftgen	   0, 0, 2^10, 10, 1
giosc1 	OSCinit	9000

instr 1
kval init 0.0
kindx init 0 ;set kindx at initialization
kans 	OSClisten giosc1, "/freq", "f", kval
          prints    "RECORDING!%n"
          tablew    kval, kindx, giFt
          kindx = kindx + 1
endin

instr 2; read the values of the table and play it again
          prints    "PLAYING!%n"
kindx init 0
kval      table     kindx, giFt
aSnd      oscil3    .2, kval, giSine; play it
          outs      aSnd, aSnd
kindx = kindx + 1
endin



i 1 0 30
i 2 31 2
e





Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 19:01
Fromzappfinger
Subject[Csnd] Re: writing OSC values into a table
Hi Joachim,

Unfortunately, it does't work.
This is the output:

/new alloc for instr 1:
RECORDING!
B  0.000 .. 31.000 T 31.000 TT 31.000 M:  0.00000  0.00000
new alloc for instr 2:
PLAYING!
B 31.000 .. 33.000 T 33.000 TT 33.000 M:  0.00000  0.00000
Score finished in csoundPerform().
inactive allocs returned to freespace
end of score.		   overall amps:  0.00000  0.00000
	   overall samples out of range:        0        0
0 errors in performance
Elapsed time at end of performance: real: 35.891s, CPU: 27.296s
11370 512-byte soundblks of shorts written to dac3/

Also what I do not understand, why do you introduce this second (sine)
table?
I just want to store values in the giFt table (at k-rate) and play those
back at a-rate.
Maybe I should use a phasor?

Richard


--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4675411.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 19:43
Fromjoachim heintz
SubjectRe: [Csnd] Re: writing OSC values into a table
hi richard -

at least this is no error ...
can you print out some values both while recording and while playing, as
you did before with printk? and perhaps you should play instrument 2 for
30 seconds, too.

as to the table: i understood you record frequency information at
k-rate, for instance from some moving control device. something like:
starting at 200 hz, after 1 second moving to 100 hz, and so on. when you
record these data to a table, you need a table with a stored waveform.
you cannot play back the data as samples.

or did i misunderstand what you meant by "frequency" data?

	joachim

Am 07.08.2011 20:01, schrieb zappfinger:
> Hi Joachim,
> 
> Unfortunately, it does't work.
> This is the output:
> 
> /new alloc for instr 1:
> RECORDING!
> B  0.000 .. 31.000 T 31.000 TT 31.000 M:  0.00000  0.00000
> new alloc for instr 2:
> PLAYING!
> B 31.000 .. 33.000 T 33.000 TT 33.000 M:  0.00000  0.00000
> Score finished in csoundPerform().
> inactive allocs returned to freespace
> end of score.		   overall amps:  0.00000  0.00000
> 	   overall samples out of range:        0        0
> 0 errors in performance
> Elapsed time at end of performance: real: 35.891s, CPU: 27.296s
> 11370 512-byte soundblks of shorts written to dac3/
> 
> Also what I do not understand, why do you introduce this second (sine)
> table?
> I just want to store values in the giFt table (at k-rate) and play those
> back at a-rate.
> Maybe I should use a phasor?
> 
> Richard
> 
> 
> --
> View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4675411.html
> Sent from the Csound - General mailing list archive at Nabble.com.
> 
> 
> Send bugs reports to the Sourceforge bug tracker
>             https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"
> 
> 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 20:53
Fromzappfinger
Subject[Csnd] Re: writing OSC values into a table
Hi Joachim,

Sorry I was not clear enough. The data coming in over OSC could be sensor
data, or, for now, a waveform generated in Python. Below is the simple
Python code. It generates  many periods of a triangle.
These are stored in the table at k-rate and should be played back at a-rate.

#
#  wave2OSC, send values representing samples from a signal
#  this one creates a triangle by ramping up and down
#
import binascii,OSC,string

client = OSC.OSCClient()
msg = OSC.OSCMessage()
msg.setAddress("/freq")

MAX = 100
i = MAX  
down = True
while 1:
    msg.clearData()
    fl = float(i)/MAX
    msg.append(fl)
    print fl,
    client.sendto(msg, ('127.0.0.1', 9000))
    if down: 
    	i = i - 1
    else:
    	i = i + 1
    if i <= 0: down = False
    if i >= MAX: down = True

--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4675684.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-07 21:12
Fromjoachim heintz
SubjectRe: [Csnd] Re: writing OSC values into a table
i see ...
in this case, you should certainly use a phasor in instr 2, i think.
and for writing the data properly in the table, it might be good to use
the kans output of the OSClisten opcode, and to write the next index
whenever kans==1. something like this:
kndx init 0
loop:
kans OSClisten ...
 if kans == 1 then
tablew kval, kndx, giFt
kndx = kndx+1
kgoto loop
 endif
not sure if this works or ends in an endless loop ...
good luck -
	joachim


Am 07.08.2011 21:53, schrieb zappfinger:
> Hi Joachim,
> 
> Sorry I was not clear enough. The data coming in over OSC could be sensor
> data, or, for now, a waveform generated in Python. Below is the simple
> Python code. It generates  many periods of a triangle.
> These are stored in the table at k-rate and should be played back at a-rate.
> 
> #
> #  wave2OSC, send values representing samples from a signal
> #  this one creates a triangle by ramping up and down
> #
> import binascii,OSC,string
> 
> client = OSC.OSCClient()
> msg = OSC.OSCMessage()
> msg.setAddress("/freq")
> 
> MAX = 100
> i = MAX  
> down = True
> while 1:
>     msg.clearData()
>     fl = float(i)/MAX
>     msg.append(fl)
>     print fl,
>     client.sendto(msg, ('127.0.0.1', 9000))
>     if down: 
>     	i = i - 1
>     else:
>     	i = i + 1
>     if i <= 0: down = False
>     if i >= MAX: down = True
> 
> --
> View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4675684.html
> Sent from the Csound - General mailing list archive at Nabble.com.
> 
> 
> Send bugs reports to the Sourceforge bug tracker
>             https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"
> 
> 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-08 07:22
FromTarmo Johannes
SubjectRe: [Csnd] Re: writing OSC values into a table
hi,

with generating the waveform in python - isn't there a timing problem between python and csound? Python computes and sends the OSC messages as fast it can but csound reads osc messages just every k-cycle - so  a lot of information can be lost? 

In that case, perpahs you can use python inside csound http://www.csounds.com/journal/issue6/pythonOpcodes.html to ensure the sync
or use csound API, where, I think, you can create tables in your programming language, send values to channel at k or a rate and do many miracolous things. But I am not very experienced, though.
http://en.flossmanuals.net/csound/ch063_the-csound-api/

greetings,
tarmo

On Sunday 07 August 2011 22:53:45 zappfinger wrote:
> Hi Joachim,
> 
> Sorry I was not clear enough. The data coming in over OSC could be sensor
> data, or, for now, a waveform generated in Python. Below is the simple
> Python code. It generates  many periods of a triangle.
> These are stored in the table at k-rate and should be played back at a-rate.
> 
> #
> #  wave2OSC, send values representing samples from a signal
> #  this one creates a triangle by ramping up and down
> #
> import binascii,OSC,string
> 
> client = OSC.OSCClient()
> msg = OSC.OSCMessage()
> msg.setAddress("/freq")
> 
> MAX = 100
> i = MAX  
> down = True
> while 1:
>     msg.clearData()
>     fl = float(i)/MAX
>     msg.append(fl)
>     print fl,
>     client.sendto(msg, ('127.0.0.1', 9000))
>     if down: 
>     	i = i - 1
>     else:
>     	i = i + 1
>     if i <= 0: down = False
>     if i >= MAX: down = True
> 
> --
> View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4675684.html
> Sent from the Csound - General mailing list archive at Nabble.com.
> 
> 
> Send bugs reports to the Sourceforge bug tracker
>             https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"
> 
> 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2011-08-08 10:52
Fromzappfinger
Subject[Csnd] Re: writing OSC values into a table
Hi Tarmo,

Thanks for the tips.
Yes, in this case the Python program sends data as fast as possible over the
network. In my testing I have noticed that this is buffered neatly in Csound
(OSC). 
But the input could be much slower, for instance if I want to get serial
data from a sensor and convert that to OSC. That is the whole idea: storing
slowly changing data (maybe a user drawing a wave form on the screen) in a
csound table and then play it back at audio rate.

regards,
Richard


--
View this message in context: http://csound.1045644.n5.nabble.com/writing-OSC-values-into-a-table-tp4673599p4677154.html
Sent from the Csound - General mailing list archive at Nabble.com.


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"