diff options
author | Carl Hetherington <carl@carlh.net> | 2012-04-16 16:32:22 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-04-16 16:32:22 +0000 |
commit | a2897ecef6da6a458aa1de8c2d9973a1e809dca2 (patch) | |
tree | 189e34b829823fc73d11fba249f283e00336d44d /libs/ardour/test/audio_region_test.cc | |
parent | 02c498a8fa1c2e47988a256321bdcf5e9e869de1 (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.cc | 85 |
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])); + } +} |