|
CLAM-Development
1.3
|
00001 #include "AudioSink.hxx" 00002 #include "ProcessingFactory.hxx" 00003 #include "Audio.hxx" 00004 00005 #include <iostream> 00006 00007 namespace CLAM 00008 { 00009 00010 namespace 00011 { 00012 static const char* metadata[] = { 00013 "key", "AudioSink", 00014 "category", "Audio I/O", 00015 "description", "AudioSink", 00016 "port_sink_type", typeid(float).name(), 00017 "icon", "sink.svg", 00018 "embedded_svg", "sink.svg", 00019 0 00020 }; 00021 static FactoryRegistrator<ProcessingFactory, AudioSink> reg = metadata; 00022 } 00023 00024 bool AudioSink::Do() 00025 { 00026 for (Ports::iterator it = _ports.begin(); it != _ports.end(); ++it) 00027 { 00028 Port& port = (*it); 00029 AudioInPort* in = port.mPort; 00030 00031 const CLAM::Audio& so=in->GetAudio(); 00032 CLAM_DEBUG_ASSERT(port.mFloatBuffer, "No float buffer"); 00033 CLAM_DEBUG_ASSERT(!port.mDoubleBuffer, "There should not be double buffer"); 00034 CLAM_DEBUG_ASSERT(port.mBufferSize>0, "internal buffer size must be greater than 0"); 00035 const CLAM::TData * audioBuffer = so.GetBuffer().GetPtr(); 00036 00037 for (unsigned i=0; i<port.mBufferSize; i++) 00038 port.mFloatBuffer[i] = audioBuffer[i]; 00039 00040 in->Consume(); 00041 } 00042 00043 return true; 00044 } 00045 00046 void AudioSink::SetExternalBuffer(float* buf, unsigned nframes, unsigned index) 00047 { 00048 CLAM_ASSERT(index < _ports.size(), "AudioInPort index out of range"); 00049 Port& port = _ports[index]; 00050 port.mPort->SetSize(nframes); 00051 port.mPort->SetHop(nframes); 00052 port.mFloatBuffer = buf; 00053 port.mBufferSize = nframes; 00054 port.mDoubleBuffer = 0; 00055 00056 } 00057 00058 void AudioSink::SetExternalBuffer(double* buf, unsigned nframes, unsigned index) 00059 { 00060 CLAM_ASSERT(index < _ports.size(), "AudioInPort index out of range"); 00061 Port& port = _ports[index]; 00062 port.mPort->SetSize(nframes); 00063 port.mPort->SetHop(nframes); 00064 port.mDoubleBuffer = buf; 00065 port.mBufferSize = nframes; 00066 port.mFloatBuffer = 0; 00067 } 00068 00069 } //namespace CLAM 00070
1.7.6.1