[Csnd] writing reading audio tables

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[Csnd] writing reading audio tables

Francesco Porta
Hi All,
so i have this csd that trigger a intrument for writing audio to table when input
is over a threshold. When the writer instrument has finished it start another instrument for reading
audio from table.
Seems all fine but sometimes the reader play the previous note instead of latest.
I mean:
i play a note, writer start writing audio from input, at the end start the reader that play that audio.
The writer seems to be ok, the reader instead, after a few (2 maybe) note, it play previous note.
If i play again then it play correctly this last note.
I create a new table with different number every note triggered and this numbers seems to
be right, so what i'm doing wrong?

Thanks for any help,
ciao,
francesco


<CsoundSynthesizer>
<CsOptions>
-odac -iadc -+rtaudio=jack -m0
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 2
nchnls = 2
0dbfs  = 1

gaInput init 0
gaudio init 0

instr 1
gaInput inch 1
endin

instr 2

iThresh = 0.1
iWait = 1000
kTimer init 1001
kRms rms gaInput, 20
iSampTim = 0.01
kRmsPrev delayk kRms, iSampTim
kChange = kRms - kRmsPrev

knote init 1

if(kTimer>iWait) then
        if kChange > iThresh then
                kTrig = 1
                knote = knote + 1
        else
                kTrig = 0
        endif
        kTimer = kTrig == 1 ? 0 : kTimer
else
        kTimer += ksmps
        kTrig = 0
endif

kfracnum = 10 + knote/1000

; 4 sec.
iTime = 4

; trigger a note event
schedkwhen kTrig, 0, 0, kfracnum, 0, iTime
endin

instr 10

;print p1

iTableLen  = p3*sr
iTableNum = (p1 - 10) * 1000

; crea una tavola per l'audio
iTable ftgen  iTableNum, 0, iTableLen, 7, 0

krelease   release                  ; sense when note is in final k-rate pass...

; -- write audio to table --
andx       line     0, p3, iTableLen
           tablew   gaInput, andx, iTable

; fa partire l'analisi del file audio registrato ...
schedkwhen krelease, 0, 0, 10 + p1, 0, 120, iTableLen, iTableNum

;ktime timeinsts
;printk2 krelease
;printk2 ktime
endin

instr 20

prints "New\n"
print p1
print p5

idur  = p3
ilock = 0
ipitch = 1
iamp  = 1

atime linseg 2, idur*0.5, 3.75, idur*0.5, 1
asig  mincer atime, iamp, ipitch, p5, ilock
gaudio += asig
endin

instr 100
outs gaudio, gaudio
gaudio = 0
endin

</CsInstruments>
<CsScore>

i 1 0 240
i 2 0 240

i 100 0 240

</CsScore>
</CsoundSynthesizer>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] writing reading audio tables

Steven Yi
Hi Francesco,

I'm not sure what the problem is, but I saw this bit of code:

instr 10

;print p1

iTableLen  = p3*sr
iTableNum = (p1 - 10) * 1000

I'm wondering, what is the intention of writing "(p1 - 10) * 1000" ?
Seems like it will always be zero, no?  I wonder if the source of the
problem might be tied to that.

steven




On Mon, May 14, 2018 at 8:11 AM, Francesco Porta
<[hidden email]> wrote:

> Hi All,
> so i have this csd that trigger a intrument for writing audio to table when input
> is over a threshold. When the writer instrument has finished it start another instrument for reading
> audio from table.
> Seems all fine but sometimes the reader play the previous note instead of latest.
> I mean:
> i play a note, writer start writing audio from input, at the end start the reader that play that audio.
> The writer seems to be ok, the reader instead, after a few (2 maybe) note, it play previous note.
> If i play again then it play correctly this last note.
> I create a new table with different number every note triggered and this numbers seems to
> be right, so what i'm doing wrong?
>
> Thanks for any help,
> ciao,
> francesco
>
>
> <CsoundSynthesizer>
> <CsOptions>
> -odac -iadc -+rtaudio=jack -m0
> </CsOptions>
> <CsInstruments>
> sr = 44100
> ksmps = 2
> nchnls = 2
> 0dbfs  = 1
>
> gaInput init 0
> gaudio init 0
>
> instr 1
> gaInput inch 1
> endin
>
> instr 2
>
> iThresh = 0.1
> iWait = 1000
> kTimer init 1001
> kRms rms gaInput, 20
> iSampTim = 0.01
> kRmsPrev delayk kRms, iSampTim
> kChange = kRms - kRmsPrev
>
> knote init 1
>
> if(kTimer>iWait) then
>         if kChange > iThresh then
>                 kTrig = 1
>                 knote = knote + 1
>         else
>                 kTrig = 0
>         endif
>         kTimer = kTrig == 1 ? 0 : kTimer
> else
>         kTimer += ksmps
>         kTrig = 0
> endif
>
> kfracnum = 10 + knote/1000
>
> ; 4 sec.
> iTime = 4
>
> ; trigger a note event
> schedkwhen kTrig, 0, 0, kfracnum, 0, iTime
> endin
>
> instr 10
>
> ;print p1
>
> iTableLen  = p3*sr
> iTableNum = (p1 - 10) * 1000
>
> ; crea una tavola per l'audio
> iTable ftgen  iTableNum, 0, iTableLen, 7, 0
>
> krelease   release                  ; sense when note is in final k-rate pass...
>
> ; -- write audio to table --
> andx       line     0, p3, iTableLen
>            tablew   gaInput, andx, iTable
>
> ; fa partire l'analisi del file audio registrato ...
> schedkwhen krelease, 0, 0, 10 + p1, 0, 120, iTableLen, iTableNum
>
> ;ktime timeinsts
> ;printk2 krelease
> ;printk2 ktime
> endin
>
> instr 20
>
> prints "New\n"
> print p1
> print p5
>
> idur  = p3
> ilock = 0
> ipitch = 1
> iamp  = 1
>
> atime linseg 2, idur*0.5, 3.75, idur*0.5, 1
> asig  mincer atime, iamp, ipitch, p5, ilock
> gaudio += asig
> endin
>
> instr 100
> outs            gaudio, gaudio
> gaudio = 0
> endin
>
> </CsInstruments>
> <CsScore>
>
> i 1 0 240
> i 2 0 240
>
> i 100 0 240
>
> </CsScore>
> </CsoundSynthesizer>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>         https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] writing reading audio tables

Francesco Porta
Hello Steven,
thanks for replies. Solved but i will try to explain better (maybe) :))
My idea was: i activate an instrument using decimal number for
instrument number
(i.e. one master instrument activate inst 10.01, then 10.02 and so on).
The same number is
used by this instrument for creating tables (i.e. table 1, table 2, etc.).
Then the calculation was intended as: instr 10.01 use table 1, instr
10.02 use table 2, ...
In principle seemed working ... but that was not the case.
When those instruments activate another instr for reading the tables
this last instr was
sometimes confused and used a previous table number.
I solved sending table numbers from master instrument, but i really
don't understand
why it doesn't work.
Now is just my curiosity.
Anyway in my first mail there should be the csd i used.

As always thanks,
ciao,
francesco

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here