File: waveFactory.cpp

package info (click to toggle)
giada 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,516 kB
  • sloc: cpp: 30,620; sh: 144; xml: 66; makefile: 55; ansic: 1
file content (54 lines) | stat: -rw-r--r-- 1,788 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "../src/core/waveFactory.h"
#include "../src/core/const.h"
#include "../src/core/resampler.h"
#include "../src/core/wave.h"
#include <catch2/catch_test_macros.hpp>

using namespace giada::m;

TEST_CASE("waveFactory")
{
	constexpr int  SAMPLE_RATE   = 44100;
	constexpr int  BUFFER_SIZE   = 4096;
	constexpr int  G_CHANNELS    = 2;
	constexpr auto TEST_WAV_PATH = TEST_RESOURCES_DIR "test.wav";

	SECTION("test creation")
	{
		waveFactory::Result res = waveFactory::createFromFile(TEST_WAV_PATH,
		    /*ID=*/0, /*sampleRate=*/SAMPLE_RATE, Resampler::Quality::LINEAR);

		REQUIRE(res.status == G_RES_OK);
		REQUIRE(res.wave->getRate() == SAMPLE_RATE);
		REQUIRE(res.wave->getBuffer().countChannels() == G_CHANNELS);
		REQUIRE(res.wave->isLogical() == false);
		REQUIRE(res.wave->isEdited() == false);
	}

	SECTION("test recording")
	{
		std::unique_ptr<Wave> wave = waveFactory::createEmpty(BUFFER_SIZE,
		    G_MAX_IO_CHANS, SAMPLE_RATE, "test.wav");

		REQUIRE(wave->getRate() == SAMPLE_RATE);
		REQUIRE(wave->getBuffer().countFrames() == BUFFER_SIZE);
		REQUIRE(wave->getBuffer().countChannels() == G_CHANNELS);
		REQUIRE(wave->isLogical() == true);
		REQUIRE(wave->isEdited() == false);
	}

	SECTION("test resampling")
	{
		waveFactory::Result res = waveFactory::createFromFile(TEST_WAV_PATH,
		    /*ID=*/0, /*sampleRate=*/SAMPLE_RATE, Resampler::Quality::LINEAR);

		int oldSize = res.wave->getBuffer().countFrames();
		waveFactory::resample(*res.wave.get(), Resampler::Quality::LINEAR, SAMPLE_RATE * 2);

		REQUIRE(res.wave->getRate() == SAMPLE_RATE * 2);
		REQUIRE(res.wave->getBuffer().countFrames() == oldSize * 2);
		REQUIRE(res.wave->getBuffer().countChannels() == G_CHANNELS);
		REQUIRE(res.wave->isLogical() == false);
		REQUIRE(res.wave->isEdited() == false);
	}
}