From 6fbe9541a7d90e6511b41c39f9d16aeb6961ca4f Mon Sep 17 00:00:00 2001 From: Akiyuki Okayasu Date: Tue, 19 Dec 2017 17:07:07 +0900 Subject: [PATCH] =?UTF-8?q?[fix]=20=E6=B8=AC=E5=AE=9A=E6=99=82=E9=96=93?= =?UTF-8?q?=E3=81=8C=E9=95=B7=E3=81=84=E3=81=A8Int=E5=9E=8B=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=83=E3=82=AF=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=95=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E8=B5=B7=E3=81=93=E3=82=8B=E5=8F=AF=E8=83=BD=E6=80=A7?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Long型が使用できるように変更した。 --- Source/MainComponent.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/Source/MainComponent.cpp b/Source/MainComponent.cpp index 47c5858..1cb5c4a 100644 --- a/Source/MainComponent.cpp +++ b/Source/MainComponent.cpp @@ -151,13 +151,19 @@ void MainContentComponent::getNextAudioBlock (const AudioSourceChannelInfo& buff switch (measureState) { case measurementState::stopped: + { bufferToFill.clearActiveBufferRegion(); break; + } case measurementState::starting: + { recordIndex = 0; measureState = measurementState::started; break; + } case measurementState::started: + { + auto** recordESSArray = buf_recordedSweptSine.getArrayOfWritePointers(); for (int sample = 0; sample < bufferToFill.buffer->getNumSamples(); ++sample) { if (recordIndex >= buf_recordedSweptSine.getNumSamples()) @@ -168,13 +174,16 @@ void MainContentComponent::getNextAudioBlock (const AudioSourceChannelInfo& buff } for(int channel = 0; channel < bufferToFill.buffer->getNumChannels(); ++channel) { - buf_recordedSweptSine.setSample(channel, recordIndex, bufferToFill.buffer->getSample(channel, sample)); + recordESSArray[channel][recordIndex] = bufferToFill.buffer->getSample(channel, sample); } recordIndex++; } break; + } case measurementState::computingIR: + { break; + } } bufferToFill.clearActiveBufferRegion(); } @@ -273,16 +282,18 @@ void MainContentComponent::generateSweptSine(const double freqBegin, const doubl const double alpha = (2.0 * double_Pi * freqBegin * sweptSineDuration) / log(freqEnd / freqBegin); const double invFilterGainCoefficient = (-6.0 * log2(freqEnd / freqBegin)); - for(int i = 0; i < sweptSineLengthInSamples; ++i) + auto* ESSArray = buf_sweptSine.getWritePointer(0); + auto* inverseFilterArray = buf_inverseFilter.getWritePointer(0); + for(long i = 0; i < sweptSineLengthInSamples; ++i) { double tESS = (double)i / sampleRate; double vESS = sin(alpha * (exp((tESS / sweptSineDuration) * log(freqEnd / freqBegin)) - 1.0)); - buf_sweptSine.setSample(0, i, vESS); + ESSArray[i] = vESS; double gainInvFilter = Decibels::decibelsToGain(invFilterGainCoefficient * (i / (double)sweptSineLengthInSamples)); double tInvFilter = (double)(sweptSineLengthInSamples - (i + 1)) / sampleRate; double vInvFilter = sin(alpha * (exp((tInvFilter / sweptSineDuration) * log(freqEnd / freqBegin)) - 1.0)) * gainInvFilter; - buf_inverseFilter.setSample(0, i, vInvFilter); + inverseFilterArray[i] = vInvFilter; } } @@ -301,23 +312,26 @@ void MainContentComponent::computeIR() { std::vector> H(2*N, std::complex(0.0f, 0.0f));//SweptSine信号 std::vector> invH(2*N, std::complex(0.0f, 0.0f));//逆フィルタ - for(int i = 0; i < buf_recordedSweptSine.getNumSamples(); ++i) + auto** recordESSArray = buf_recordedSweptSine.getArrayOfWritePointers(); + auto* inverseFilterArray = buf_inverseFilter.getWritePointer(0); + for(long i = 0; i < buf_recordedSweptSine.getNumSamples(); ++i) { - H.at(i + N).real(buf_recordedSweptSine.getSample(channel, i)); - invH.at(i + N).real(buf_inverseFilter.getSample(0, i)); + H.at(i + N).real(recordESSArray[channel][i]); + invH.at(i + N).real(inverseFilterArray[i]); } fft.perform(H.data(), H.data(), false); fft.perform(invH.data(), invH.data(), false); - for(int i = 0; i < 2*N; ++i) { + for(long i = 0; i < 2*N; ++i) { H.at(i) *= invH.at(i); } fft.perform(H.data(), H.data(), true); - for (int i = 0; i < 2*N; ++i) { - buf_IR.setSample(channel, i, H.at(i).real()); + auto** IRArray = buf_IR.getArrayOfWritePointers(); + for (long i = 0; i < 2*N; ++i) { + IRArray[channel][i] = H.at(i).real(); } }