diff --git a/Source/MainComponent.cpp b/Source/MainComponent.cpp index 74486cf..98dcf9d 100644 --- a/Source/MainComponent.cpp +++ b/Source/MainComponent.cpp @@ -35,6 +35,8 @@ MainComponent::MainComponent () m_pTransmitter(new Transmitter()), m_ControlComponent(new ControlComponent(m_pReceiver, m_pTransmitter)), m_log(this), m_pReceiverControl(m_pReceiver) + , Thread("Receiver") + { addAndMakeVisible (tabbedComponent = new TabbedComponent (TabbedButtonBar::TabsAtTop)); tabbedComponent->setTabBarDepth (38); @@ -75,13 +77,14 @@ MainComponent::MainComponent () getSharedAudioDeviceManager().addChangeListener (this); getSharedAudioDeviceManager().addAudioCallback (this); - startTimer (1000 / 30); + startTimer (1000 / 20); //[/Constructor] } MainComponent::~MainComponent() { //[Destructor_pre]. You can add your own custom destruction code here.. + stopThread(1000); stopTimer(); getSharedAudioDeviceManager().removeAudioCallback (this); getSharedAudioDeviceManager().removeChangeListener (this); @@ -127,6 +130,17 @@ void MainComponent::changeListenerCallback (ChangeBroadcaster*) // dumpDeviceInfo(); } +// Thread +void MainComponent::run() +{ + while(!threadShouldExit()) + { + const RVec &data = m_rxBuf.read(); + + m_pReceiver->processPassband(data, data.size()); + } +} + void MainComponent::audioDeviceIOCallback (const float** inputChannelData, int numInputChannels, float** outputChannelData, @@ -137,24 +151,25 @@ void MainComponent::audioDeviceIOCallback (const float** inputChannelData, (void) numInputChannels; (void) numOutputChannels; -// m_pReceiver->processBaseband((float*)inputChannelData[0], (float*)inputChannelData[1], numSamples); + Map rf((RealScalar*)inputChannelData[0], numSamples); m_pTransmitterControl->getData(outputChannelData[0], numSamples); - m_pReceiver->processPassband((float*)inputChannelData[0], numSamples); +// m_pReceiver->processPassband(rf, numSamples); + m_rxBuf.write(rf, numSamples); } void MainComponent::audioDeviceAboutToStart (AudioIODevice* device) { - int bufferSize; - + int bufferSize = device->getCurrentBufferSizeSamples(); + m_rxBuf.resize(bufferSize); m_samplerate = (float)device->getCurrentSampleRate(); - bufferSize = device->getCurrentBufferSizeSamples(); m_pTransmitterControl->setBuffersize(bufferSize); m_pTransmitterControl->setSamplerate(m_samplerate); m_pReceiver->setBufSize(bufferSize); m_pReceiverControl->setSamplerate(m_samplerate); + startThread(); } void MainComponent::audioDeviceStopped() diff --git a/Source/MainComponent.h b/Source/MainComponent.h index 56ca1f2..a5485b0 100644 --- a/Source/MainComponent.h +++ b/Source/MainComponent.h @@ -28,6 +28,8 @@ #include "ControlComponent.h" #include "Receiver.h" #include "Transmitter.h" +#include +#include "RxBuffer.hpp" //[/Headers] @@ -45,7 +47,8 @@ class MainComponent : public Component, public AudioIODeviceCallback, public ReceiverDataListener, public LogHandler, - public Timer + public Timer, + public Thread { public: //============================================================================== @@ -74,10 +77,11 @@ private: ReceiverInterface *m_pReceiverControl; TransmitterInterface *m_pTransmitterControl; float m_samplerate; - + RxBuffer<2> m_rxBuf; void timerCallback() override; - AudioDeviceManager& getSharedAudioDeviceManager(); void changeListenerCallback (ChangeBroadcaster*) override; + void run(); + AudioDeviceManager& getSharedAudioDeviceManager(); void audioDeviceIOCallback (const float** inputChannelData, int numInputChannels, float** outputChannelData,