[Stk] .tick() and callback function
Gary Scavone
gary at ccrma.Stanford.EDU
Fri Jan 16 08:09:17 PST 2009
Hi everyone,
I'll just point out something relevant to Emile's example ... the
StkFrames class provides an indexing operator. So, you can directly
fill the StkFrames buffer along the lines of:
frames[index] = *inputsamples;
Further, the StkFrames buffer is simply an malloc'ed vector, so you
can get a pointer to the buffer as:
StkFloat *ptr = &frames[0];
and then work with pointer arithmetic if you like (though you then
need to keep track of your location and limits more carefully).
Regards,
--gary
On 16-Jan-09, at 10:47 AM, Emile Vrijdags wrote:
> I'm not an expert here, but I think I might have something useful to
> say
> about your problem.
> My guess is you specify how the input can be read while initializing
> your rtaudio object with a call to openstream
>
> http://ccrma.stanford.edu/software/stk/classRtAudio.html#a7
>
> One of its parameters specify how many channels are read and which one
> is the starting channel.
> I only use the outputbuffer in my project with 2 channels. With me
> these
> two channels are interleaved, which means that 1 sample of the
> channel 1
> is put on the stream then 1 sample of the next channel ... until all
> channels are used, and then you go and put sample nr2 of channel 1 on
> the stream and so on. So I guess this works the same for input.
> The input can be read pointerlike in the callbackfunction: (as
> explanatory pseudo-code-like illustration, not compiled, could
> contain
> errors, it resembles working output code I have written)
>
> Stkfloat* inputsamples = (StkFloat *) inputBuffer
>
> Stkfloat sampleChan1, sampleChan2;
> StkFrames frames(buffersize,2,true); //buffersize from the
> callbackfunction parameters
>
> for(unsigned int i=0; i < buffersize; ++i)
> {
> ...
> sampleChan1 = *inputsamples;
> ++inputsamples;
> sampleChan2 = *inputsamples;
> ++inputsamples;
> frames[2*i] = SampleChan1;
> frames[2*i+1] = SampleChan2;
> //of course this can be written much shorter
> }
>
> filewvout.tick(frames); //magically a filewvout object appears here :)
>
>
>
> Hope this explanes some things (without to many errors) and gets you
> on
> your way, awaiting a more educated answer
>
> Emile Vrijdags
>
>
>
> Beinan Li schreef, op 16/01/2009 1:57:
>> Hi,
>>
>> Might be an obvious one but I'm confused..
>> I'm trying to monitor mic input and save everything to a wave file
>> before an interrupting signal
>> like CTRL-C. So what I do is to use the call-back function and try to
>> use a FileWvOut object.tick()
>> to take the void* inputBuffer, which is first interpreted as a
>> StkFloat. But I notice that .tick() takes
>> StkFrame as input parameter.
>>
>> So my questions are:
>>
>> 1. How to "tick" the data (inputBuffer) in this case?
>> 2. What if my input is multichannel in this case?
>>
>> Thanks!
>>
>> Beinan
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Stk mailing list
>> Stk at ccrma.stanford.edu
>> http://ccrma-mail.stanford.edu/mailman/listinfo/stk
>>
>
> _______________________________________________
> Stk mailing list
> Stk at ccrma.stanford.edu
> http://ccrma-mail.stanford.edu/mailman/listinfo/stk
More information about the Stk
mailing list