@@ -501,188 +501,6 @@ void AudioDataConverters::deinterleaveSamples (const float* source, float** dest
501501 numSamples);
502502}
503503
504- // ==============================================================================
505- // ==============================================================================
506- #if YUP_UNIT_TESTS
507-
508- class AudioConversionTests final : public UnitTest
509- {
510- public:
511- AudioConversionTests ()
512- : UnitTest (" Audio data conversion" , UnitTestCategories::audio)
513- {
514- }
515-
516- template <class F1 , class E1 , class F2 , class E2 >
517- struct Test5
518- {
519- static void test (UnitTest& unitTest, Random& r)
520- {
521- test (unitTest, false , r);
522- test (unitTest, true , r);
523- }
524-
525- YUP_BEGIN_IGNORE_WARNINGS_MSVC (6262 )
526-
527- static void test (UnitTest& unitTest, bool inPlace, Random& r)
528- {
529- const int numSamples = 2048 ;
530- int32 original[(size_t ) numSamples],
531- converted[(size_t ) numSamples],
532- reversed[(size_t ) numSamples];
533-
534- {
535- AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::NonConst> d (original);
536- bool clippingFailed = false ;
537-
538- for (int i = 0 ; i < numSamples / 2 ; ++i)
539- {
540- d.setAsFloat (r.nextFloat () * 2 .2f - 1 .1f );
541-
542- if (! d.isFloatingPoint ())
543- clippingFailed = d.getAsFloat () > 1 .0f || d.getAsFloat () < -1 .0f || clippingFailed;
544-
545- ++d;
546- d.setAsInt32 (r.nextInt ());
547- ++d;
548- }
549-
550- unitTest.expect (! clippingFailed);
551- }
552-
553- // convert data from the source to dest format..
554- std::unique_ptr<AudioData::Converter> conv (new AudioData::ConverterInstance<AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const>,
555- AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::NonConst>>());
556- conv->convertSamples (inPlace ? reversed : converted, original, numSamples);
557-
558- // ..and back again..
559- conv.reset (new AudioData::ConverterInstance<AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::Const>,
560- AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::NonConst>>());
561- if (! inPlace)
562- zeromem (reversed, sizeof (reversed));
563-
564- conv->convertSamples (reversed, inPlace ? reversed : converted, numSamples);
565-
566- {
567- int biggestDiff = 0 ;
568- AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const> d1 (original);
569- AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const> d2 (reversed);
570-
571- const int errorMargin = 2 * AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const>::get32BitResolution ()
572- + AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::Const>::get32BitResolution ();
573-
574- for (int i = 0 ; i < numSamples; ++i)
575- {
576- biggestDiff = jmax (biggestDiff, std::abs (d1.getAsInt32 () - d2.getAsInt32 ()));
577- ++d1;
578- ++d2;
579- }
580-
581- unitTest.expect (biggestDiff <= errorMargin);
582- }
583- }
584-
585- YUP_END_IGNORE_WARNINGS_MSVC
586- };
587-
588- template <class F1 , class E1 , class FormatType >
589- struct Test3
590- {
591- static void test (UnitTest& unitTest, Random& r)
592- {
593- Test5<F1, E1 , FormatType, AudioData::BigEndian>::test (unitTest, r);
594- Test5<F1, E1 , FormatType, AudioData::LittleEndian>::test (unitTest, r);
595- }
596- };
597-
598- template <class FormatType , class Endianness >
599- struct Test2
600- {
601- static void test (UnitTest& unitTest, Random& r)
602- {
603- Test3<FormatType, Endianness, AudioData::Int8>::test (unitTest, r);
604- Test3<FormatType, Endianness, AudioData::UInt8>::test (unitTest, r);
605- Test3<FormatType, Endianness, AudioData::Int16>::test (unitTest, r);
606- Test3<FormatType, Endianness, AudioData::Int24>::test (unitTest, r);
607- Test3<FormatType, Endianness, AudioData::Int32>::test (unitTest, r);
608- Test3<FormatType, Endianness, AudioData::Float32>::test (unitTest, r);
609- }
610- };
611-
612- template <class FormatType >
613- struct Test1
614- {
615- static void test (UnitTest& unitTest, Random& r)
616- {
617- Test2<FormatType, AudioData::BigEndian>::test (unitTest, r);
618- Test2<FormatType, AudioData::LittleEndian>::test (unitTest, r);
619- }
620- };
621-
622- void runTest () override
623- {
624- auto r = getRandom ();
625- beginTest (" Round-trip conversion: Int8" );
626- Test1<AudioData::Int8>::test (*this , r);
627- beginTest (" Round-trip conversion: Int16" );
628- Test1<AudioData::Int16>::test (*this , r);
629- beginTest (" Round-trip conversion: Int24" );
630- Test1<AudioData::Int24>::test (*this , r);
631- beginTest (" Round-trip conversion: Int32" );
632- Test1<AudioData::Int32>::test (*this , r);
633- beginTest (" Round-trip conversion: Float32" );
634- Test1<AudioData::Float32>::test (*this , r);
635-
636- using Format = AudioData::Format<AudioData::Float32, AudioData::NativeEndian>;
637-
638- beginTest (" Interleaving" );
639- {
640- constexpr auto numChannels = 4 ;
641- constexpr auto numSamples = 512 ;
642-
643- AudioBuffer<float > sourceBuffer { numChannels, numSamples },
644- destBuffer { 1 , numChannels * numSamples };
645-
646- for (int ch = 0 ; ch < numChannels; ++ch)
647- for (int i = 0 ; i < numSamples; ++i)
648- sourceBuffer.setSample (ch, i, r.nextFloat ());
649-
650- AudioData::interleaveSamples (AudioData::NonInterleavedSource<Format> { sourceBuffer.getArrayOfReadPointers (), numChannels },
651- AudioData::InterleavedDest<Format> { destBuffer.getWritePointer (0 ), numChannels },
652- numSamples);
653-
654- for (int ch = 0 ; ch < numChannels; ++ch)
655- for (int i = 0 ; i < numSamples; ++i)
656- expectEquals (destBuffer.getSample (0 , ch + (i * numChannels)), sourceBuffer.getSample (ch, i));
657- }
658-
659- beginTest (" Deinterleaving" );
660- {
661- constexpr auto numChannels = 4 ;
662- constexpr auto numSamples = 512 ;
663-
664- AudioBuffer<float > sourceBuffer { 1 , numChannels * numSamples },
665- destBuffer { numChannels, numSamples };
666-
667- for (int ch = 0 ; ch < numChannels; ++ch)
668- for (int i = 0 ; i < numSamples; ++i)
669- sourceBuffer.setSample (0 , ch + (i * numChannels), r.nextFloat ());
670-
671- AudioData::deinterleaveSamples (AudioData::InterleavedSource<Format> { sourceBuffer.getReadPointer (0 ), numChannels },
672- AudioData::NonInterleavedDest<Format> { destBuffer.getArrayOfWritePointers (), numChannels },
673- numSamples);
674-
675- for (int ch = 0 ; ch < numChannels; ++ch)
676- for (int i = 0 ; i < numSamples; ++i)
677- expectEquals (sourceBuffer.getSample (0 , ch + (i * numChannels)), destBuffer.getSample (ch, i));
678- }
679- }
680- };
681-
682- static AudioConversionTests audioConversionUnitTests;
683-
684- #endif
685-
686504YUP_END_IGNORE_DEPRECATION_WARNINGS
687505
688506} // namespace yup
0 commit comments