[CLAM] Help with AudioCircularBuffer
Pau Arumi
parumi at iua.upf.es
Thu May 19 05:50:29 PDT 2005
Xavier Amatriain wrote:
>
>Hi again,
>
>
>>Winamp feeds my music analysis plugin with frame audio data through a
>>callback function. I use the circular buffer to aggregate enought data to
>>do a FFT of a reasonably sized frame. How do you suggest I use In and
>>Outport in this case?
>>
>
>If you are using it to connect to the "outside world" then it is a good
>choice. We use similar workarounds when developing VST plugins with CLAM.
>In this case the Port mechanism would not help.
>
Don't agree on that, I think the Ports are, actually, a very good choice
for that problem.
Look the following test/example, or others in
CLAM/test/UnitTests/FlowControlTests/TestsAudioPorts.cxx
void testAudioPortsProduceAndConsume_whenDifferentSizes()
{
CLAM::AudioOutPort out;
CLAM::AudioInPort in;
int writerFrameSize = 4;
int readerFrameSize = 6;
out.ConnectToConcreteIn(in);
out.SetSize( writerFrameSize );
out.SetHop( writerFrameSize );
in.SetSize( readerFrameSize );
in.SetHop( readerFrameSize );
CLAM::Audio & toProduce = out.GetAudio();
for(int i=0;i<writerFrameSize;i++)
toProduce.GetBuffer()[i] = i;
out.Produce();
CPPUNIT_ASSERT_EQUAL( false, in.CanConsume() );
CLAM::Audio & toProduce2 = out.GetAudio();
for(int i=0;i<writerFrameSize;i++)
toProduce2.GetBuffer()[i] = i+writerFrameSize;
out.Produce();
const CLAM::Audio & toConsume = in.GetAudio();
for(int i=0;i<readerFrameSize;i++)
CPPUNIT_ASSERT_EQUAL( (CLAM::TData)i,
toConsume.GetBuffer()[i] );
}
Of course you would need to set a different in.SetHop(...),
and copy the callback in-buffer to the out.GetAudio()
Also notice that there is an already usable SpectralAnalysis which
performs windowing, fft, etc. and is port based. That means that you could
connect the "auxiliary" out-port to the SpectralAnalysis in-port.
Actually, SpectralAnalysis it have two ports attributes: an InAudioPort
and an
OutPort<Spectrum>. You can change the in-port hopsize as a configuration
parameter.
Hope this help
Pau
More information about the clam-users
mailing list