@@ -331,7 +331,7 @@ void logAudioConverterProperties()
331331 }
332332 else
333333 {
334- fprintf (stderr, " AudioMonitor2 AudioConverterGetProperty kAudioConverterPrimeInfo error = %d\n " , (int )primeInfoStatus);
334+ fprintf (stderr, " AudioMonitor2 AudioConverterGetProperty kAudioConverterPrimeInfo error = %d (OK) \n " , (int )primeInfoStatus);
335335 }
336336
337337
@@ -695,6 +695,7 @@ void * runInputBufferOnThread(void * ptr)
695695 // works in all cases.
696696
697697 const int maxWhiteNoiseBufferLength = 24000 ;
698+ // const int maxWhiteNoiseBufferLength = 192000;
698699
699700 // instead of silence, send some white noise when needed
700701 char whiteNoiseBuffer[maxWhiteNoiseBufferLength];
@@ -719,15 +720,20 @@ void * runInputBufferOnThread(void * ptr)
719720
720721 // CFTimeInterval inputTimeoutInterval = 0.025f;
721722 // CFTimeInterval inputTimeoutInterval = 20000.0f / sampleRate;
723+ // CFTimeInterval inputTimeoutInterval = 6.0f;
722724 CFTimeInterval inputTimeoutInterval = 6 .0f ;
723-
725+
724726 float whiteNoiseBufferLengthFloat = (float )sampleRate * (float )inputChannels * inputTimeoutInterval;
725727 int whiteNoiseBufferLength = whiteNoiseBufferLengthFloat;
726728 if (whiteNoiseBufferLength > maxWhiteNoiseBufferLength)
727729 {
728730 whiteNoiseBufferLength = maxWhiteNoiseBufferLength;
729731 }
730-
732+ if (whiteNoiseBufferLength > inputBufferSize)
733+ {
734+ whiteNoiseBufferLength = inputBufferSize;
735+ }
736+
731737 fprintf (stderr, " AudioMonitor2 runInputBufferOnThread inputTimeoutInterval=%f, whiteNoiseBufferLength=%d\n " , inputTimeoutInterval, whiteNoiseBufferLength);
732738
733739 int packetIndex = 0 ;
@@ -740,6 +746,14 @@ void * runInputBufferOnThread(void * ptr)
740746 fprintf (stderr, " AudioMonitor2 runInputBufferOnThread inputCircularBuffer=%p, circularBufferLength = %d\n " , &inputCircularBuffer, circularBufferLength);
741747
742748 unsigned char * rtlsdrBuffer = (unsigned char *)malloc (circularBufferLength);
749+
750+ UInt32 initialBytesAvailableCount = 0 ;
751+ int initial_ioctl_result = ioctl (STDIN_FILENO, FIONREAD, &initialBytesAvailableCount);
752+ if (initialBytesAvailableCount < whiteNoiseBufferLength / 2 )
753+ {
754+ fprintf (stderr, " AudioMonitor2 priming input buffer\n " );
755+ bool produceBytesPrimeResult = TPCircularBufferProduceBytes (&inputCircularBuffer, &whiteNoiseBuffer, whiteNoiseBufferLength / 2 );
756+ }
743757
744758 UInt64 loopCount = 0 ;
745759
@@ -839,6 +853,35 @@ void * runInputBufferOnThread(void * ptr)
839853 }
840854 }
841855
856+ // send some white noise during periods of silence (no audio input received from source, the buffer is empty)
857+ /*
858+ int32_t bytesAvailableToReadCount = 0;
859+ void * circularBufferDataPtr = TPCircularBufferTail(&inputCircularBuffer, &bytesAvailableToReadCount); // get pointer to read buffer
860+ if (bytesAvailableToReadCount == 0)
861+ {
862+ bool produceBytesResult = TPCircularBufferProduceBytes(&inputCircularBuffer, &whiteNoiseBuffer, whiteNoiseBufferLength);
863+
864+ //fprintf(stderr, "AudioMonitor2 runInputBufferOnThread - buffer is empty, write white noise - interval=%f, inputTimeoutInterval=%f, length=%d\n", currentAbsoluteTime - lastValidPacketAbsoluteTime, inputTimeoutInterval, whiteNoiseBufferLength);
865+
866+ lastValidPacketAbsoluteTime = currentAbsoluteTime;
867+ }
868+ */
869+
870+ // send some white noise during periods of silence (no audio input received from source, the buffer is low)
871+ int32_t bytesAvailableToReadCount = 0 ;
872+ void * circularBufferDataPtr = TPCircularBufferTail (&inputCircularBuffer, &bytesAvailableToReadCount); // get pointer to read buffer
873+ if (bytesAvailableToReadCount < 1000 )
874+ {
875+ // bool produceBytesResult = TPCircularBufferProduceBytes(&inputCircularBuffer, &whiteNoiseBuffer, whiteNoiseBufferLength);
876+ bool produceBytesResult = TPCircularBufferProduceBytes (&inputCircularBuffer, &whiteNoiseBuffer, 500 );
877+
878+ fprintf (stderr, " bytesAvailableToReadCount = %d, whiteNoiseBufferLength = %d, currentAbsoluteTime = %f\n " , bytesAvailableToReadCount, whiteNoiseBufferLength, currentAbsoluteTime);
879+ // fprintf(stderr, "AudioMonitor2 runInputBufferOnThread - buffer is low, write white noise - interval=%f, inputTimeoutInterval=%f, length=%d\n", currentAbsoluteTime - lastValidPacketAbsoluteTime, inputTimeoutInterval, whiteNoiseBufferLength);
880+
881+ lastValidPacketAbsoluteTime = currentAbsoluteTime;
882+ }
883+
884+ /*
842885 // In scanning mode with squelch, we might not get continuous audio data,
843886 // so send some white noise periodically during long periods of silence
844887 if (currentAbsoluteTime - lastValidPacketAbsoluteTime >= inputTimeoutInterval)
@@ -849,6 +892,7 @@ void * runInputBufferOnThread(void * ptr)
849892
850893 lastValidPacketAbsoluteTime = currentAbsoluteTime;
851894 }
895+ */
852896
853897 usleep (1000 );
854898
0 commit comments