| @@ -320,9 +320,9 @@ public: | |||||
| classId (clsID), | classId (clsID), | ||||
| inputLatency (0), | inputLatency (0), | ||||
| outputLatency (0), | outputLatency (0), | ||||
| minSize (0), maxSize (0), | |||||
| preferredSize (0), | |||||
| granularity (0), | |||||
| minBufferSize (0), maxBufferSize (0), | |||||
| preferredBufferSize (0), | |||||
| bufferGranularity (0), | |||||
| numClockSources (0), | numClockSources (0), | ||||
| currentBlockSizeSamples (0), | currentBlockSizeSamples (0), | ||||
| currentBitDepth (16), | currentBitDepth (16), | ||||
| @@ -403,7 +403,7 @@ public: | |||||
| Array<double> getAvailableSampleRates() override { return sampleRates; } | Array<double> getAvailableSampleRates() override { return sampleRates; } | ||||
| Array<int> getAvailableBufferSizes() override { return bufferSizes; } | Array<int> getAvailableBufferSizes() override { return bufferSizes; } | ||||
| int getDefaultBufferSize() override { return preferredSize; } | |||||
| int getDefaultBufferSize() override { return preferredBufferSize; } | |||||
| String open (const BigInteger& inputChannels, | String open (const BigInteger& inputChannels, | ||||
| const BigInteger& outputChannels, | const BigInteger& outputChannels, | ||||
| @@ -469,10 +469,10 @@ public: | |||||
| removeCurrentDriver(); | removeCurrentDriver(); | ||||
| loadDriver(); | loadDriver(); | ||||
| const String error (initDriver()); | |||||
| String initError = initDriver(); | |||||
| if (error.isNotEmpty()) | |||||
| JUCE_ASIO_LOG ("ASIOInit: " + error); | |||||
| if (initError.isNotEmpty()) | |||||
| JUCE_ASIO_LOG ("ASIOInit: " + initError); | |||||
| needToReset = false; | needToReset = false; | ||||
| } | } | ||||
| @@ -489,7 +489,7 @@ public: | |||||
| if (err != ASE_OK) | if (err != ASE_OK) | ||||
| { | { | ||||
| currentBlockSizeSamples = preferredSize; | |||||
| currentBlockSizeSamples = preferredBufferSize; | |||||
| JUCE_ASIO_LOG_ERROR ("create buffers 2", err); | JUCE_ASIO_LOG_ERROR ("create buffers 2", err); | ||||
| asioObject->disposeBuffers(); | asioObject->disposeBuffers(); | ||||
| @@ -561,8 +561,7 @@ public: | |||||
| } | } | ||||
| readLatencies(); | readLatencies(); | ||||
| asioObject->getBufferSize (&minSize, &maxSize, &preferredSize, &granularity); | |||||
| refreshBufferSizes(); | |||||
| deviceIsOpen = true; | deviceIsOpen = true; | ||||
| JUCE_ASIO_LOG ("starting"); | JUCE_ASIO_LOG ("starting"); | ||||
| @@ -762,7 +761,7 @@ private: | |||||
| Array<double> sampleRates; | Array<double> sampleRates; | ||||
| Array<int> bufferSizes; | Array<int> bufferSizes; | ||||
| long inputLatency, outputLatency; | long inputLatency, outputLatency; | ||||
| long minSize, maxSize, preferredSize, granularity; | |||||
| long minBufferSize, maxBufferSize, preferredBufferSize, bufferGranularity; | |||||
| ASIOClockSource clocks[32]; | ASIOClockSource clocks[32]; | ||||
| int numClockSources; | int numClockSources; | ||||
| @@ -829,23 +828,27 @@ private: | |||||
| } | } | ||||
| } | } | ||||
| int readBufferSizes (int bufferSizeSamples) | |||||
| long refreshBufferSizes() | |||||
| { | { | ||||
| minSize = 0; | |||||
| maxSize = 0; | |||||
| granularity = 0; | |||||
| return asioObject->getBufferSize (&minBufferSize, &maxBufferSize, &preferredBufferSize, &bufferGranularity); | |||||
| } | |||||
| int readBufferSizes (int bufferSizeSamples) | |||||
| { | |||||
| minBufferSize = 0; | |||||
| maxBufferSize = 0; | |||||
| bufferGranularity = 0; | |||||
| long newPreferredSize = 0; | long newPreferredSize = 0; | ||||
| if (asioObject->getBufferSize (&minSize, &maxSize, &newPreferredSize, &granularity) == ASE_OK) | |||||
| if (asioObject->getBufferSize (&minBufferSize, &maxBufferSize, &newPreferredBufferSize, &bufferGranularity) == ASE_OK) | |||||
| { | { | ||||
| if (preferredSize != 0 && newPreferredSize != 0 && newPreferredSize != preferredSize) | |||||
| if (preferredBufferSize != 0 && newPreferredSize != 0 && newPreferredSize != preferredBufferSize) | |||||
| shouldUsePreferredSize = true; | shouldUsePreferredSize = true; | ||||
| if (bufferSizeSamples < minSize || bufferSizeSamples > maxSize) | |||||
| if (bufferSizeSamples < minBufferSize || bufferSizeSamples > maxBufferSize) | |||||
| shouldUsePreferredSize = true; | shouldUsePreferredSize = true; | ||||
| preferredSize = newPreferredSize; | |||||
| preferredBufferSize = newPreferredSize; | |||||
| } | } | ||||
| // unfortunate workaround for certain drivers which crash if you make | // unfortunate workaround for certain drivers which crash if you make | ||||
| @@ -855,11 +858,11 @@ private: | |||||
| if (shouldUsePreferredSize) | if (shouldUsePreferredSize) | ||||
| { | { | ||||
| JUCE_ASIO_LOG ("Using preferred size for buffer.."); | JUCE_ASIO_LOG ("Using preferred size for buffer.."); | ||||
| long err = asioObject->getBufferSize (&minSize, &maxSize, &preferredSize, &granularity); | |||||
| long err = refreshBufferSizes(); | |||||
| if (err == ASE_OK) | if (err == ASE_OK) | ||||
| { | { | ||||
| bufferSizeSamples = (int) preferredSize; | |||||
| bufferSizeSamples = (int) preferredBufferSize; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -1082,8 +1085,8 @@ private: | |||||
| if (i < 2) | if (i < 2) | ||||
| { | { | ||||
| // clear the channels that are used with the dummy stuff | // clear the channels that are used with the dummy stuff | ||||
| outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[0], preferredSize); | |||||
| outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[1], preferredSize); | |||||
| outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[0], preferredBufferSize); | |||||
| outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[1], preferredBufferSize); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1203,9 +1206,9 @@ private: | |||||
| inputFormat.calloc (chansToAllocate); | inputFormat.calloc (chansToAllocate); | ||||
| outputFormat.calloc (chansToAllocate); | outputFormat.calloc (chansToAllocate); | ||||
| if ((err = asioObject->getBufferSize (&minSize, &maxSize, &preferredSize, &granularity)) == 0) | |||||
| if ((err = refreshBufferSizes()) == 0) | |||||
| { | { | ||||
| addBufferSizes (minSize, maxSize, preferredSize, granularity); | |||||
| addBufferSizes (minBufferSize, maxBufferSize, preferredBufferSize, bufferGranularity); | |||||
| double currentRate = getSampleRate(); | double currentRate = getSampleRate(); | ||||
| @@ -1226,8 +1229,8 @@ private: | |||||
| updateSampleRates(); | updateSampleRates(); | ||||
| readLatencies(); // ..doing these steps because cubase does so at this stage | |||||
| createDummyBuffers (preferredSize); // in initialisation, and some devices fail if we don't. | |||||
| readLatencies(); // ..doing these steps because cubase does so at this stage | |||||
| createDummyBuffers (preferredBufferSize); // in initialisation, and some devices fail if we don't. | |||||
| readLatencies(); | readLatencies(); | ||||
| // start and stop because cubase does it.. | // start and stop because cubase does it.. | ||||