66 * @ref License
77 */
88
9- // Copyright (c) 2008-2019 OpenShot Studios, LLC
9+ // Copyright (c) 2008-2022 OpenShot Studios, LLC
1010//
1111// SPDX-License-Identifier: LGPL-3.0-or-later
1212
@@ -28,22 +28,18 @@ TEST_CASE( "Extract waveform data piano.wav", "[libopenshot][audiowaveformer]" )
2828 // Create AudioWaveformer and extract a smaller "average" sample set of audio data
2929 AudioWaveformer waveformer (&r);
3030 for (auto channel = 0 ; channel < r.info .channels ; channel++) {
31- std::vector< float > waveform = waveformer.ExtractSamples (channel, 20 , false );
31+ AudioWaveformData waveform = waveformer.ExtractSamples (channel, 20 , false );
3232
3333 if (channel == 0 ) {
34- CHECK (waveform.size () == 107 );
35- CHECK (waveform[0 ] == Approx (0 .000820312474f ).margin (0.00001 ));
36- CHECK (waveform[86 ] == Approx (-0 .00144531252f ).margin (0.00001 ));
37- CHECK (waveform[87 ] == Approx (0 .0f ).margin (0.00001 ));
38-
39- for (auto sample = 0 ; sample < waveform.size (); sample++) {
40- std::cout << waveform[sample] << std::endl;
41- }
34+ CHECK (waveform.rms_samples .size () == 107 );
35+ CHECK (waveform.rms_samples [0 ] == Approx (0 .04879f ).margin (0.00001 ));
36+ CHECK (waveform.rms_samples [86 ] == Approx (0 .13578f ).margin (0.00001 ));
37+ CHECK (waveform.rms_samples [87 ] == Approx (0 .0f ).margin (0.00001 ));
4238 } else if (channel == 1 ) {
43- CHECK (waveform.size () == 107 );
44- CHECK (waveform[0 ] == Approx (0 .000820312474f ).margin (0.00001 ));
45- CHECK (waveform[86 ] == Approx (- 0 . 00144531252f ).margin (0.00001 ));
46- CHECK (waveform[87 ] == Approx (0 .0f ).margin (0.00001 ));
39+ CHECK (waveform.rms_samples . size () == 107 );
40+ CHECK (waveform. rms_samples [0 ] == Approx (0 .04879f ).margin (0.00001 ));
41+ CHECK (waveform. rms_samples [86 ] == Approx (0 . 13578f ).margin (0.00001 ));
42+ CHECK (waveform. rms_samples [87 ] == Approx (0 .0f ).margin (0.00001 ));
4743 }
4844
4945 waveform.clear ();
@@ -63,18 +59,18 @@ TEST_CASE( "Extract waveform data sintel", "[libopenshot][audiowaveformer]" )
6359 // Create AudioWaveformer and extract a smaller "average" sample set of audio data
6460 AudioWaveformer waveformer (&r);
6561 for (auto channel = 0 ; channel < r.info .channels ; channel++) {
66- std::vector< float > waveform = waveformer.ExtractSamples (channel, 20 , false );
62+ AudioWaveformData waveform = waveformer.ExtractSamples (channel, 20 , false );
6763
6864 if (channel == 0 ) {
69- CHECK (waveform.size () == 1058 );
70- CHECK (waveform[0 ] == Approx (- 1 .48391728e- 05f ).margin (0.00001 ));
71- CHECK (waveform[1037 ] == Approx (6 .79016102e- 06f ).margin (0.00001 ));
72- CHECK (waveform[1038 ] == Approx (0 .0f ).margin (0.00001 ));
65+ CHECK (waveform.rms_samples . size () == 1058 );
66+ CHECK (waveform. rms_samples [0 ] == Approx (0 . 00001f ).margin (0.00001 ));
67+ CHECK (waveform. rms_samples [1037 ] == Approx (0 . 00003f ).margin (0.00001 ));
68+ CHECK (waveform. rms_samples [1038 ] == Approx (0 .0f ).margin (0.00001 ));
7369 } else if (channel == 1 ) {
74- CHECK (waveform.size () == 1058 );
75- CHECK (waveform[0 ] == Approx (- 1 .43432617e- 05f ).margin (0.00001 ));
76- CHECK (waveform[1037 ] == Approx (6 .79016102e- 06f ).margin (0.00001 ));
77- CHECK (waveform[1038 ] == Approx (0 .0f ).margin (0.00001 ));
70+ CHECK (waveform.rms_samples . size () == 1058 );
71+ CHECK (waveform. rms_samples [0 ] == Approx (0 . 00001f ).margin (0.00001 ));
72+ CHECK (waveform. rms_samples [1037 ] == Approx (0 . 00003f ).margin (0.00001 ));
73+ CHECK (waveform. rms_samples [1038 ] == Approx (0 .0f ).margin (0.00001 ));
7874 }
7975
8076 waveform.clear ();
@@ -84,6 +80,29 @@ TEST_CASE( "Extract waveform data sintel", "[libopenshot][audiowaveformer]" )
8480 r.Close ();
8581}
8682
83+
84+ TEST_CASE ( " Extract waveform data sintel (all channels)" , " [libopenshot][audiowaveformer]" )
85+ {
86+ // Create a reader
87+ std::stringstream path;
88+ path << TEST_MEDIA_PATH << " sintel_trailer-720p.mp4" ;
89+ FFmpegReader r (path.str ());
90+
91+ // Create AudioWaveformer and extract a smaller "average" sample set of audio data
92+ AudioWaveformer waveformer (&r);
93+ AudioWaveformData waveform = waveformer.ExtractSamples (-1 , 20 , false );
94+
95+ CHECK (waveform.rms_samples .size () == 1058 );
96+ CHECK (waveform.rms_samples [0 ] == Approx (0 .00001f ).margin (0.00001 ));
97+ CHECK (waveform.rms_samples [1037 ] == Approx (0 .00003f ).margin (0.00001 ));
98+ CHECK (waveform.rms_samples [1038 ] == Approx (0 .0f ).margin (0.00001 ));
99+
100+ waveform.clear ();
101+
102+ // Clean up
103+ r.Close ();
104+ }
105+
87106TEST_CASE ( " Normalize & scale waveform data piano.wav" , " [libopenshot][audiowaveformer]" )
88107{
89108 // Create a reader
@@ -95,14 +114,14 @@ TEST_CASE( "Normalize & scale waveform data piano.wav", "[libopenshot][audiowave
95114 AudioWaveformer waveformer (&r);
96115 for (auto channel = 0 ; channel < r.info .channels ; channel++) {
97116 // Normalize values and scale them between -1 and +1
98- std::vector< float > waveform = waveformer.ExtractSamples (channel, 20 , true );
117+ AudioWaveformData waveform = waveformer.ExtractSamples (channel, 20 , true );
99118
100119 if (channel == 0 ) {
101- CHECK (waveform.size () == 107 );
102- CHECK (waveform[0 ] == Approx (0.113821134 ).margin (0.00001 ));
103- CHECK (waveform[35 ] == Approx (- 1 . 0f ).margin (0.00001 ));
104- CHECK (waveform[86 ] == Approx (- 0 . 200542003f ).margin (0.00001 ));
105- CHECK (waveform[87 ] == Approx (0 .0f ).margin (0.00001 ));
120+ CHECK (waveform.rms_samples . size () == 107 );
121+ CHECK (waveform. rms_samples [0 ] == Approx (0 .07524f ).margin (0.00001 ));
122+ CHECK (waveform. rms_samples [35 ] == Approx (0 . 20063f ).margin (0.00001 ));
123+ CHECK (waveform. rms_samples [86 ] == Approx (0 . 2094f ).margin (0.00001 ));
124+ CHECK (waveform. rms_samples [87 ] == Approx (0 .0f ).margin (0.00001 ));
106125 }
107126
108127 waveform.clear ();
0 commit comments