Csound Csound-dev Csound-tekno Search About

[Csnd] Dynamically naming variables

Date2013-02-11 12:36
FromAnders Genell
Subject[Csnd] Dynamically naming variables
Hi list!

I am wondering if someone know of a way to dynamically name variables?

What I want to do is typically create filter coeffs in e.g. matlab, save them to a text file and GEN23 them into an ftable, which all works very well, then I want to read one coeff at a time as argument to e.g. filter2.

So,

;read filtercoeffs from matlab into tables
gibcoeff ftgen 5, 0, 0, -23, "matlab_b_coeff.txt"
giacoeff ftgen 6, 0, 0, -23, "matlab_a_coeff.txt"

is all good and well, but depending of my system analysis in matlab, the length of the tables can vary.

I can of course check with ftlen, but how do I do something like

kb0 tab 0, 5
kb1 tab 1, 5
kb2 tab 2, 5

ka1 tab 1, 6
ka2 tab 2, 6

dynamically so that I can read all coeffs in the tables regardless of length?

something like (in pseudo-ish csound code)

kindx init 0

loop:
 kb_coeff[insert dynamic num 2 variable name] tab kindx, 5
 kindx = kindx +1

if (kindx < ftlen(5)) kgoto loop

And how to call filter2 with dioferent number of coeffs?

ares filter2 asig, ftlen(5), ftlen(6=, i(kb0), i(kb1), ..., ia1, ia2, ..., iaN


Any ideas?

Thanks!!

Best regards,
/Anders




Date2013-02-11 13:33
FromVictor Lazzarini
SubjectRe: [Csnd] Dynamically naming variables
tvars?

t1 init 4
k1 init 0
until k1 < 4 do
k2 table k1, 1
t[k1] = k2
k1 = k1 +1
od

Victor
On 11 Feb 2013, at 12:36, Anders Genell wrote:

> Hi list!
> 
> I am wondering if someone know of a way to dynamically name variables?
> 
> What I want to do is typically create filter coeffs in e.g. matlab, save them to a text file and GEN23 them into an ftable, which all works very well, then I want to read one coeff at a time as argument to e.g. filter2.
> 
> So,
> 
> ;read filtercoeffs from matlab into tables
> gibcoeff ftgen 5, 0, 0, -23, "matlab_b_coeff.txt"
> giacoeff ftgen 6, 0, 0, -23, "matlab_a_coeff.txt" 
> 
> is all good and well, but depending of my system analysis in matlab, the length of the tables can vary.
> 
> I can of course check with ftlen, but how do I do something like
> 
> kb0 tab 0, 5
> kb1 tab 1, 5
> kb2 tab 2, 5
> 
> ka1 tab 1, 6
> ka2 tab 2, 6
> 
> dynamically so that I can read all coeffs in the tables regardless of length?
> 
> something like (in pseudo-ish csound code)
> 
> kindx init 0
> 
> loop:
>  kb_coeff[insert dynamic num 2 variable name] tab kindx, 5
>  kindx = kindx +1
> 
> if (kindx < ftlen(5)) kgoto loop 
> 
> And how to call filter2 with dioferent number of coeffs?
> 
> ares filter2 asig, ftlen(5), ftlen(6=, i(kb0), i(kb1), ..., ia1, ia2, ..., iaN
> 
> 
> Any ideas?
> 
> Thanks!!
> 
> Best regards,
> /Anders
> 
> 
> 

Dr Victor Lazzarini
Senior Lecturer
Dept. of Music
NUI Maynooth Ireland
tel.: +353 1 708 3545
Victor dot Lazzarini AT nuim dot ie





Date2013-02-11 18:38
FromAnders Genell
SubjectRe: [Csnd] Dynamically naming variables
On 2013-02-11 14:33, Victor Lazzarini wrote:
> t1 init 4
> k1 init 0
> until k1 < 4 do
> k2 table k1, 1
> t[k1] = k2
> k1 = k1 +1
> od

Brilliant, thanks!!
I have not really  used t-vars before so this didn't really occur to me...

They don't happen to be useable directly as in

ares filter2 ain, ftlen(5), ftlen(6), t_acoeffs, t_bcoeffs

do they? If not, that would be my two cents as requested feature for 
csound6...

I suppose I could figure something out using strcatk, spfrintfk, and 
perhaps some macro?

Best regards,
/Anders

Date2013-02-11 18:44
FromVictor.Lazzarini@nuim.ie
SubjectRe: [Csnd] Dynamically naming variables
AttachmentsNone  None  

Date2013-02-11 19:55
FromAnders Genell
SubjectRe: [Csnd] Dynamically naming variables
Just to let you know, I took the lazy way out and had matlab do the 
dirty work.

In matlab

[b,a]=butter(2,2*fc/fs);
csvwrite('coeffs.txt',[length(b) length(a)-1 b a(2:end)])
...and in another m-file
fid=fopen('coeffs.txt','r');
coeffs=fread(fid);
coeffs=char(coeffs)';

system(['csound -d -W -o out.wav --omacro:COEFFS=' coeffs ' my_csd.csd'])

and in csound

ares filter2 ain, $COEFFS

Best regards,
/Anders


On 2013-02-11 19:44, Victor.Lazzarini@nuim.ie wrote:
> There is set of operations for them. You can assign them to kvars etc.
> In csound6 there are generalized arrays, so there you can use them 
> directly.
>
>
>
>
> ----- Original Message -----
> From: Anders Genell 
> Date: Monday, February 11, 2013 6:39 pm
> Subject: Re: [Csnd] Dynamically naming variables
> To: csound@lists.bath.ac.uk
>
> > On 2013-02-11 14:33, Victor Lazzarini wrote:
> > > t1 init 4
> > > k1 init 0
> > > until k1 < 4 do
> > > k2 table k1, 1
> > > t[k1] = k2
> > > k1 = k1 +1
> > > od
> >
> > Brilliant, thanks!!
> > I have not really  used t-vars before so this didn't really
> > occur to me...
> >
> > They don't happen to be useable directly as in
> >
> > ares filter2 ain, ftlen(5), ftlen(6), t_acoeffs, t_bcoeffs
> >
> > do they? If not, that would be my two cents as requested feature
> > for
> > csound6...
> >
> > I suppose I could figure something out using strcatk, spfrintfk,
> > and
> > perhaps some macro?
> >
> > Best regards,
> > /Anders
> >
> >
> > 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"
> >
>
> Dr Victor Lazzarini, Senior Lecturer, Dept. of Music,
> National University of Ireland, Maynooth