summaryrefslogtreecommitdiff
path: root/libs/ardour/test/audio_region_test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-04-16 16:32:22 +0000
committerCarl Hetherington <carl@carlh.net>2012-04-16 16:32:22 +0000
commita2897ecef6da6a458aa1de8c2d9973a1e809dca2 (patch)
tree189e34b829823fc73d11fba249f283e00336d44d /libs/ardour/test/audio_region_test.cc
parent02c498a8fa1c2e47988a256321bdcf5e9e869de1 (diff)
Fairly major change to the way in which crossfades are handled;
they are now done with region fades, rather than separate objects. After this commit, Ardour will try to convert your session files to the new crossfade format, but will make a backup in your session folder first. If you have works in progress using Ardour 3 it is ***STRONGLY RECOMMENDED*** that you back up session files before updating to this commit. git-svn-id: svn://localhost/ardour2/branches/3.0@11986 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/test/audio_region_test.cc')
-rw-r--r--libs/ardour/test/audio_region_test.cc85
1 files changed, 85 insertions, 0 deletions
diff --git a/libs/ardour/test/audio_region_test.cc b/libs/ardour/test/audio_region_test.cc
new file mode 100644
index 0000000000..72e886b4e1
--- /dev/null
+++ b/libs/ardour/test/audio_region_test.cc
@@ -0,0 +1,85 @@
+#include "ardour/playlist.h"
+#include "ardour/region.h"
+#include "ardour/audioregion.h"
+#include "audio_region_test.h"
+#include "test_globals.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION (AudioRegionTest);
+
+using namespace std;
+using namespace ARDOUR;
+
+void
+AudioRegionTest::readTest ()
+{
+ int const N = 1024;
+
+ Sample buf[N];
+ Sample mbuf[N];
+ float gbuf[N];
+
+ int const P = 100;
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (_region[0]);
+
+ /* Simple read: 256 frames from start of region, no fades */
+
+ /* gbuf should be ignored; set it to 0 to ensure that it is */
+ for (int i = 0; i < N; ++i) {
+ gbuf[i] = 0;
+ }
+
+ ar->set_position (P);
+ ar->set_length (1024);
+
+ for (int i = 0; i < N; ++i) {
+ buf[i] = 0;
+ }
+
+ ar->_read_at (ar->_sources, ar->_length, buf, mbuf, gbuf, P, 256, 0, AudioRegion::ReadOps (0));
+ check_staircase (buf, 0, 256);
+
+ for (int i = 0; i < N; ++i) {
+ buf[i] = 0;
+ }
+
+ /* Offset read: 256 frames from 128 frames into the region, no fades */
+ ar->_read_at (ar->_sources, ar->_length, buf, mbuf, gbuf, P + 128, 256, 0, AudioRegion::ReadOps (0));
+ check_staircase (buf, 128, 256);
+
+ /* Simple read with a fade-in: 256 frames from start of region, with fades */
+ ar->set_default_fade_in ();
+ CPPUNIT_ASSERT_EQUAL (double (64), ar->_fade_in->back()->when);
+
+ for (int i = 0; i < N; ++i) {
+ buf[i] = 0;
+ }
+
+ ar->read_at (buf, mbuf, gbuf, P, 256, 0);
+ for (int i = 0; i < 64; ++i) {
+ /* XXX: this isn't very accurate, but close enough for now; needs investigation */
+ CPPUNIT_ASSERT_DOUBLES_EQUAL (float (i * i / 63.0), buf[i], 1e-4);
+ }
+ for (int i = 64; i < P; ++i) {
+ CPPUNIT_ASSERT_EQUAL (i, int (buf[i]));
+ }
+
+ /* Offset read: 256 frames from 128 frames into the region, with fades
+ (though the fade should not affect it, as it is finished before the read starts)
+ */
+
+ for (int i = 0; i < N; ++i) {
+ buf[i] = 0;
+ }
+
+ ar->read_at (buf, mbuf, gbuf, P + 128, 256, 0);
+ check_staircase (buf, 128, 256);
+}
+
+void
+AudioRegionTest::check_staircase (Sample* b, int offset, int N)
+{
+ for (int i = 0; i < N; ++i) {
+ int const j = i + offset;
+ CPPUNIT_ASSERT_EQUAL (j, int (b[i]));
+ }
+}