Make the Region::sampleId shared_ptr
This commit is contained in:
parent
3cc53a9d76
commit
e6ecbc6fcd
7 changed files with 87 additions and 87 deletions
|
|
@ -75,7 +75,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
else
|
else
|
||||||
filename = absl::StrCat(defaultPath, absl::StrReplaceAll(trimmedSample, { { "\\", "/" } }));
|
filename = absl::StrCat(defaultPath, absl::StrReplaceAll(trimmedSample, { { "\\", "/" } }));
|
||||||
|
|
||||||
sampleId = FileId(std::move(filename), sampleId.isReverse());
|
*sampleId = FileId(std::move(filename), sampleId->isReverse());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("sample_quality"):
|
case hash("sample_quality"):
|
||||||
|
|
@ -88,7 +88,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("direction"):
|
case hash("direction"):
|
||||||
sampleId = sampleId.reversed(opcode.value == "reverse");
|
*sampleId = sampleId->reversed(opcode.value == "reverse");
|
||||||
break;
|
break;
|
||||||
case hash("delay"):
|
case hash("delay"):
|
||||||
setValueFromOpcode(opcode, delay, Default::delayRange);
|
setValueFromOpcode(opcode, delay, Default::delayRange);
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ struct Region {
|
||||||
* @return true
|
* @return true
|
||||||
* @return false
|
* @return false
|
||||||
*/
|
*/
|
||||||
bool isGenerator() const noexcept { return sampleId.filename().size() > 0 ? sampleId.filename()[0] == '*' : false; }
|
bool isGenerator() const noexcept { return sampleId->filename().size() > 0 ? sampleId->filename()[0] == '*' : false; }
|
||||||
/**
|
/**
|
||||||
* @brief Is an oscillator (generator or wavetable)?
|
* @brief Is an oscillator (generator or wavetable)?
|
||||||
*
|
*
|
||||||
|
|
@ -308,7 +308,7 @@ struct Region {
|
||||||
const NumericId<Region> id;
|
const NumericId<Region> id;
|
||||||
|
|
||||||
// Sound source: sample playback
|
// Sound source: sample playback
|
||||||
FileId sampleId {}; // Sample
|
std::shared_ptr<FileId> sampleId { new FileId }; // Sample
|
||||||
absl::optional<int> sampleQuality {};
|
absl::optional<int> sampleQuality {};
|
||||||
float delay { Default::delay }; // delay
|
float delay { Default::delay }; // delay
|
||||||
float delayRandom { Default::delayRandom }; // delay_random
|
float delayRandom { Default::delayRandom }; // delay_random
|
||||||
|
|
|
||||||
|
|
@ -514,7 +514,7 @@ void sfz::Synth::finalizeSfzLoad()
|
||||||
size_t currentRegionCount = regions.size();
|
size_t currentRegionCount = regions.size();
|
||||||
|
|
||||||
auto removeCurrentRegion = [this, ¤tRegionIndex, ¤tRegionCount]() {
|
auto removeCurrentRegion = [this, ¤tRegionIndex, ¤tRegionCount]() {
|
||||||
DBG("Removing the region with sample " << regions[currentRegionIndex]->sampleId);
|
DBG("Removing the region with sample " << *regions[currentRegionIndex]->sampleId);
|
||||||
regions.erase(regions.begin() + currentRegionIndex);
|
regions.erase(regions.begin() + currentRegionIndex);
|
||||||
--currentRegionCount;
|
--currentRegionCount;
|
||||||
};
|
};
|
||||||
|
|
@ -534,12 +534,12 @@ void sfz::Synth::finalizeSfzLoad()
|
||||||
absl::optional<FileInformation> fileInformation;
|
absl::optional<FileInformation> fileInformation;
|
||||||
|
|
||||||
if (!region->isGenerator()) {
|
if (!region->isGenerator()) {
|
||||||
if (!resources.filePool.checkSampleId(region->sampleId)) {
|
if (!resources.filePool.checkSampleId(*region->sampleId)) {
|
||||||
removeCurrentRegion();
|
removeCurrentRegion();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
fileInformation = resources.filePool.getFileInformation(region->sampleId);
|
fileInformation = resources.filePool.getFileInformation(*region->sampleId);
|
||||||
if (!fileInformation) {
|
if (!fileInformation) {
|
||||||
removeCurrentRegion();
|
removeCurrentRegion();
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -583,11 +583,11 @@ void sfz::Synth::finalizeSfzLoad()
|
||||||
return Default::offsetCCRange.clamp(sumOffsetCC);
|
return Default::offsetCCRange.clamp(sumOffsetCC);
|
||||||
}();
|
}();
|
||||||
|
|
||||||
if (!resources.filePool.preloadFile(region->sampleId, maxOffset))
|
if (!resources.filePool.preloadFile(*region->sampleId, maxOffset))
|
||||||
removeCurrentRegion();
|
removeCurrentRegion();
|
||||||
}
|
}
|
||||||
else if (!region->isGenerator()) {
|
else if (!region->isGenerator()) {
|
||||||
if (!resources.wavePool.createFileWave(resources.filePool, std::string(region->sampleId.filename()))) {
|
if (!resources.wavePool.createFileWave(resources.filePool, std::string(region->sampleId->filename()))) {
|
||||||
removeCurrentRegion();
|
removeCurrentRegion();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,9 +64,9 @@ void sfz::Voice::startVoice(Region* region, int delay, const TriggerEvent& event
|
||||||
if (region->isOscillator()) {
|
if (region->isOscillator()) {
|
||||||
const WavetableMulti* wave = nullptr;
|
const WavetableMulti* wave = nullptr;
|
||||||
if (!region->isGenerator())
|
if (!region->isGenerator())
|
||||||
wave = resources.wavePool.getFileWave(region->sampleId.filename());
|
wave = resources.wavePool.getFileWave(region->sampleId->filename());
|
||||||
else {
|
else {
|
||||||
switch (hash(region->sampleId.filename())) {
|
switch (hash(region->sampleId->filename())) {
|
||||||
default:
|
default:
|
||||||
case hash("*silence"):
|
case hash("*silence"):
|
||||||
break;
|
break;
|
||||||
|
|
@ -94,7 +94,7 @@ void sfz::Voice::startVoice(Region* region, int delay, const TriggerEvent& event
|
||||||
}
|
}
|
||||||
setupOscillatorUnison();
|
setupOscillatorUnison();
|
||||||
} else {
|
} else {
|
||||||
currentPromise = resources.filePool.getFilePromise(region->sampleId);
|
currentPromise = resources.filePool.getFilePromise(*region->sampleId);
|
||||||
if (!currentPromise) {
|
if (!currentPromise) {
|
||||||
switchState(State::cleanMeUp);
|
switchState(State::cleanMeUp);
|
||||||
return;
|
return;
|
||||||
|
|
@ -658,7 +658,7 @@ void sfz::Voice::fillWithData(AudioSpan<float> buffer) noexcept
|
||||||
DBG("[sfizz] Underflow: source available samples "
|
DBG("[sfizz] Underflow: source available samples "
|
||||||
<< source.getNumFrames() << "/"
|
<< source.getNumFrames() << "/"
|
||||||
<< currentPromise->information.end
|
<< currentPromise->information.end
|
||||||
<< " for sample " << region->sampleId);
|
<< " for sample " << *region->sampleId);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!region->flexAmpEG) {
|
if (!region->flexAmpEG) {
|
||||||
|
|
@ -891,13 +891,13 @@ void sfz::Voice::fillWithGenerator(AudioSpan<float> buffer) noexcept
|
||||||
const auto leftSpan = buffer.getSpan(0);
|
const auto leftSpan = buffer.getSpan(0);
|
||||||
const auto rightSpan = buffer.getSpan(1);
|
const auto rightSpan = buffer.getSpan(1);
|
||||||
|
|
||||||
if (region->sampleId.filename() == "*noise") {
|
if (region->sampleId->filename() == "*noise") {
|
||||||
auto gen = [&]() {
|
auto gen = [&]() {
|
||||||
return uniformNoiseDist(Random::randomGenerator);
|
return uniformNoiseDist(Random::randomGenerator);
|
||||||
};
|
};
|
||||||
absl::c_generate(leftSpan, gen);
|
absl::c_generate(leftSpan, gen);
|
||||||
absl::c_generate(rightSpan, gen);
|
absl::c_generate(rightSpan, gen);
|
||||||
} else if (region->sampleId.filename() == "*gnoise") {
|
} else if (region->sampleId->filename() == "*gnoise") {
|
||||||
// You need to wrap in a lambda, otherwise generate will
|
// You need to wrap in a lambda, otherwise generate will
|
||||||
// make a copy of the gaussian distribution *along with its state*
|
// make a copy of the gaussian distribution *along with its state*
|
||||||
// leading to periodic behavior....
|
// leading to periodic behavior....
|
||||||
|
|
|
||||||
120
tests/FilesT.cpp
120
tests/FilesT.cpp
|
|
@ -23,7 +23,7 @@ TEST_CASE("[Files] Single region (regions_one.sfz)")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_one.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_one.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -32,9 +32,9 @@ TEST_CASE("[Files] Multiple regions (regions_many.sfz)")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_many.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_many.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 3);
|
REQUIRE(synth.getNumRegions() == 3);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy.1.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == "dummy.2.wav");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == "dummy.2.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Basic opcodes (regions_opcodes.sfz)")
|
TEST_CASE("[Files] Basic opcodes (regions_opcodes.sfz)")
|
||||||
|
|
@ -58,8 +58,8 @@ TEST_CASE("[Files] (regions_bad.sfz)")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_bad.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/regions_bad.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Local include")
|
TEST_CASE("[Files] Local include")
|
||||||
|
|
@ -67,7 +67,7 @@ TEST_CASE("[Files] Local include")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_local.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_local.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Multiple includes")
|
TEST_CASE("[Files] Multiple includes")
|
||||||
|
|
@ -75,8 +75,8 @@ TEST_CASE("[Files] Multiple includes")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/multiple_includes.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/multiple_includes.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy2.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy2.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Multiple includes with comments")
|
TEST_CASE("[Files] Multiple includes with comments")
|
||||||
|
|
@ -84,8 +84,8 @@ TEST_CASE("[Files] Multiple includes with comments")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/multiple_includes_with_comments.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/multiple_includes_with_comments.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy2.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy2.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Subdir include")
|
TEST_CASE("[Files] Subdir include")
|
||||||
|
|
@ -93,7 +93,7 @@ TEST_CASE("[Files] Subdir include")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_subdir.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_subdir.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy_subdir.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy_subdir.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Subdir include Win")
|
TEST_CASE("[Files] Subdir include Win")
|
||||||
|
|
@ -101,7 +101,7 @@ TEST_CASE("[Files] Subdir include Win")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_subdir_win.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_subdir_win.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy_subdir.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy_subdir.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Recursive include (with include guard)")
|
TEST_CASE("[Files] Recursive include (with include guard)")
|
||||||
|
|
@ -111,8 +111,8 @@ TEST_CASE("[Files] Recursive include (with include guard)")
|
||||||
parser.setRecursiveIncludeGuardEnabled(true);
|
parser.setRecursiveIncludeGuardEnabled(true);
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_recursive.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_recursive.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy_recursive2.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy_recursive2.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy_recursive1.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy_recursive1.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Include loops (with include guard)")
|
TEST_CASE("[Files] Include loops (with include guard)")
|
||||||
|
|
@ -122,8 +122,8 @@ TEST_CASE("[Files] Include loops (with include guard)")
|
||||||
parser.setRecursiveIncludeGuardEnabled(true);
|
parser.setRecursiveIncludeGuardEnabled(true);
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_loop.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Includes/root_loop.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy_loop2.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy_loop2.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "dummy_loop1.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "dummy_loop1.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Define test")
|
TEST_CASE("[Files] Define test")
|
||||||
|
|
@ -209,28 +209,28 @@ TEST_CASE("[Files] Full hierarchy with antislashes")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/basic_hierarchy.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/basic_hierarchy.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 8);
|
REQUIRE(synth.getNumRegions() == 8);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(3)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(3)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(4)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(4)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(5)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(5)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(6)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(6)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(7)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(7)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/basic_hierarchy_antislash.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/basic_hierarchy_antislash.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 8);
|
REQUIRE(synth.getNumRegions() == 8);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(3)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(3)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(4)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(4)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(5)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(5)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
REQUIRE(synth.getRegionView(6)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(6)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(7)->sampleId.filename() == "Regions/dummy.1.wav");
|
REQUIRE(synth.getRegionView(7)->sampleId->filename() == "Regions/dummy.1.wav");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -249,10 +249,10 @@ TEST_CASE("[Files] Pizz basic")
|
||||||
REQUIRE(synth.getRegionView(1)->randRange == Range<float>(0.25, 0.5));
|
REQUIRE(synth.getRegionView(1)->randRange == Range<float>(0.25, 0.5));
|
||||||
REQUIRE(synth.getRegionView(2)->randRange == Range<float>(0.5, 0.75));
|
REQUIRE(synth.getRegionView(2)->randRange == Range<float>(0.5, 0.75));
|
||||||
REQUIRE(synth.getRegionView(3)->randRange == Range<float>(0.75, 1.0));
|
REQUIRE(synth.getRegionView(3)->randRange == Range<float>(0.75, 1.0));
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == R"(../Samples/pizz/a0_vl4_rr1.wav)");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == R"(../Samples/pizz/a0_vl4_rr1.wav)");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == R"(../Samples/pizz/a0_vl4_rr2.wav)");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == R"(../Samples/pizz/a0_vl4_rr2.wav)");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == R"(../Samples/pizz/a0_vl4_rr3.wav)");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == R"(../Samples/pizz/a0_vl4_rr3.wav)");
|
||||||
REQUIRE(synth.getRegionView(3)->sampleId.filename() == R"(../Samples/pizz/a0_vl4_rr4.wav)");
|
REQUIRE(synth.getRegionView(3)->sampleId->filename() == R"(../Samples/pizz/a0_vl4_rr4.wav)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Channels (channels.sfz)")
|
TEST_CASE("[Files] Channels (channels.sfz)")
|
||||||
|
|
@ -260,9 +260,9 @@ TEST_CASE("[Files] Channels (channels.sfz)")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/channels.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/channels.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 2);
|
REQUIRE(synth.getNumRegions() == 2);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "mono_sample.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "mono_sample.wav");
|
||||||
REQUIRE(!synth.getRegionView(0)->isStereo());
|
REQUIRE(!synth.getRegionView(0)->isStereo());
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "stereo_sample.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "stereo_sample.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->isStereo());
|
REQUIRE(synth.getRegionView(1)->isStereo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -277,7 +277,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// generator only
|
// generator only
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "*sine");
|
REQUIRE(region->sampleId->filename() == "*sine");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(region->isGenerator());
|
REQUIRE(region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -285,7 +285,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// generator with multi
|
// generator with multi
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "*sine");
|
REQUIRE(region->sampleId->filename() == "*sine");
|
||||||
REQUIRE(region->isStereo());
|
REQUIRE(region->isStereo());
|
||||||
REQUIRE(region->isGenerator());
|
REQUIRE(region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -293,7 +293,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// explicit wavetable
|
// explicit wavetable
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "ramp_wave.wav");
|
REQUIRE(region->sampleId->filename() == "ramp_wave.wav");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -301,7 +301,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// explicit wavetable with multi
|
// explicit wavetable with multi
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "ramp_wave.wav");
|
REQUIRE(region->sampleId->filename() == "ramp_wave.wav");
|
||||||
REQUIRE(region->isStereo());
|
REQUIRE(region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -309,7 +309,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// explicit disabled wavetable
|
// explicit disabled wavetable
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "ramp_wave.wav");
|
REQUIRE(region->sampleId->filename() == "ramp_wave.wav");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(!region->isOscillator());
|
REQUIRE(!region->isOscillator());
|
||||||
|
|
@ -317,7 +317,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// explicit disabled wavetable with multi
|
// explicit disabled wavetable with multi
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "ramp_wave.wav");
|
REQUIRE(region->sampleId->filename() == "ramp_wave.wav");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(!region->isOscillator());
|
REQUIRE(!region->isOscillator());
|
||||||
|
|
@ -325,7 +325,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// implicit wavetable (sound file < 3000 frames)
|
// implicit wavetable (sound file < 3000 frames)
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "ramp_wave.wav");
|
REQUIRE(region->sampleId->filename() == "ramp_wave.wav");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -333,7 +333,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// implicit non-wavetable (sound file >= 3000 frames)
|
// implicit non-wavetable (sound file >= 3000 frames)
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "snare.wav");
|
REQUIRE(region->sampleId->filename() == "snare.wav");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(!region->isGenerator());
|
REQUIRE(!region->isGenerator());
|
||||||
REQUIRE(!region->isOscillator());
|
REQUIRE(!region->isOscillator());
|
||||||
|
|
@ -341,7 +341,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// generator with multi=1 (single)
|
// generator with multi=1 (single)
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "*sine");
|
REQUIRE(region->sampleId->filename() == "*sine");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(region->isGenerator());
|
REQUIRE(region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -349,7 +349,7 @@ TEST_CASE("[Files] Channels (channels_multi.sfz)")
|
||||||
|
|
||||||
// generator with multi=2 (ring modulation)
|
// generator with multi=2 (ring modulation)
|
||||||
region = synth.getRegionView(regionNumber++);
|
region = synth.getRegionView(regionNumber++);
|
||||||
REQUIRE(region->sampleId.filename() == "*sine");
|
REQUIRE(region->sampleId->filename() == "*sine");
|
||||||
REQUIRE(!region->isStereo());
|
REQUIRE(!region->isStereo());
|
||||||
REQUIRE(region->isGenerator());
|
REQUIRE(region->isGenerator());
|
||||||
REQUIRE(region->isOscillator());
|
REQUIRE(region->isOscillator());
|
||||||
|
|
@ -424,7 +424,7 @@ TEST_CASE("[Files] Specific bug: relative path with backslashes")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/SpecificBugs/win_backslashes.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/SpecificBugs/win_backslashes.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == R"(Xylo/Subfolder/closedhat.wav)");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == R"(Xylo/Subfolder/closedhat.wav)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Default path")
|
TEST_CASE("[Files] Default path")
|
||||||
|
|
@ -432,10 +432,10 @@ TEST_CASE("[Files] Default path")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 4);
|
REQUIRE(synth.getNumRegions() == 4);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == R"(DefaultPath/SubPath1/sample1.wav)");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == R"(DefaultPath/SubPath1/sample1.wav)");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == R"(DefaultPath/SubPath1/sample1.wav)");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == R"(DefaultPath/SubPath1/sample1.wav)");
|
||||||
REQUIRE(synth.getRegionView(3)->sampleId.filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
REQUIRE(synth.getRegionView(3)->sampleId->filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Default path reset when calling loadSfzFile again")
|
TEST_CASE("[Files] Default path reset when calling loadSfzFile again")
|
||||||
|
|
@ -445,7 +445,7 @@ TEST_CASE("[Files] Default path reset when calling loadSfzFile again")
|
||||||
REQUIRE(synth.getNumRegions() == 4);
|
REQUIRE(synth.getNumRegions() == 4);
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path_reset.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path_reset.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == R"(DefaultPath/SubPath2/sample2.wav)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Default path is ignored for generators")
|
TEST_CASE("[Files] Default path is ignored for generators")
|
||||||
|
|
@ -453,7 +453,7 @@ TEST_CASE("[Files] Default path is ignored for generators")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path_generator.sfz");
|
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/default_path_generator.sfz");
|
||||||
REQUIRE(synth.getNumRegions() == 1);
|
REQUIRE(synth.getNumRegions() == 1);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == R"(*sine)");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == R"(*sine)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Files] Set CC applies properly")
|
TEST_CASE("[Files] Set CC applies properly")
|
||||||
|
|
@ -616,10 +616,10 @@ TEST_CASE("[Files] Case sentitiveness")
|
||||||
Synth synth;
|
Synth synth;
|
||||||
synth.loadSfzFile(sfzFilePath);
|
synth.loadSfzFile(sfzFilePath);
|
||||||
REQUIRE(synth.getNumRegions() == 4);
|
REQUIRE(synth.getNumRegions() == 4);
|
||||||
REQUIRE(synth.getRegionView(0)->sampleId.filename() == "dummy1.wav");
|
REQUIRE(synth.getRegionView(0)->sampleId->filename() == "dummy1.wav");
|
||||||
REQUIRE(synth.getRegionView(1)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(1)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(2)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(2)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
REQUIRE(synth.getRegionView(3)->sampleId.filename() == "Regions/dummy.wav");
|
REQUIRE(synth.getRegionView(3)->sampleId->filename() == "Regions/dummy.wav");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,18 +23,18 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
|
|
||||||
SECTION("sample")
|
SECTION("sample")
|
||||||
{
|
{
|
||||||
REQUIRE(region.sampleId.filename() == "");
|
REQUIRE(region.sampleId->filename() == "");
|
||||||
region.parseOpcode({ "sample", "dummy.wav" });
|
region.parseOpcode({ "sample", "dummy.wav" });
|
||||||
REQUIRE(region.sampleId.filename() == "dummy.wav");
|
REQUIRE(region.sampleId->filename() == "dummy.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("direction")
|
SECTION("direction")
|
||||||
{
|
{
|
||||||
REQUIRE(!region.sampleId.isReverse());
|
REQUIRE(!region.sampleId->isReverse());
|
||||||
region.parseOpcode({ "direction", "reverse" });
|
region.parseOpcode({ "direction", "reverse" });
|
||||||
REQUIRE(region.sampleId.isReverse());
|
REQUIRE(region.sampleId->isReverse());
|
||||||
region.parseOpcode({ "direction", "forward" });
|
region.parseOpcode({ "direction", "forward" });
|
||||||
REQUIRE(!region.sampleId.isReverse());
|
REQUIRE(!region.sampleId->isReverse());
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("delay")
|
SECTION("delay")
|
||||||
|
|
|
||||||
|
|
@ -698,13 +698,13 @@ TEST_CASE("[Synth] Release (basic behavior with sample)")
|
||||||
)");
|
)");
|
||||||
synth.noteOn(0, 62, 85);
|
synth.noteOn(0, 62, 85);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "*sine" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "*sine" );
|
||||||
synth.noteOff(0, 62, 85);
|
synth.noteOff(0, 62, 85);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "closedhat.wav" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "closedhat.wav" );
|
||||||
synth.renderBlock(buffer);
|
synth.renderBlock(buffer);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "closedhat.wav" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "closedhat.wav" );
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Synth] Release key (basic behavior with sample)")
|
TEST_CASE("[Synth] Release key (basic behavior with sample)")
|
||||||
|
|
@ -720,7 +720,7 @@ TEST_CASE("[Synth] Release key (basic behavior with sample)")
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
synth.renderBlock(buffer);
|
synth.renderBlock(buffer);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "closedhat.wav" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "closedhat.wav" );
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Synth] Release key (pedal)")
|
TEST_CASE("[Synth] Release key (pedal)")
|
||||||
|
|
@ -1338,15 +1338,15 @@ TEST_CASE("[Synth] Off by with CC switches")
|
||||||
)");
|
)");
|
||||||
synth.noteOn(0, 60, 85);
|
synth.noteOn(0, 60, 85);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "*saw" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "*saw" );
|
||||||
synth.cc(0, 4, 127);
|
synth.cc(0, 4, 127);
|
||||||
synth.noteOn(0, 60, 85);
|
synth.noteOn(0, 60, 85);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "*triangle" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "*triangle" );
|
||||||
synth.cc(0, 4, 0);
|
synth.cc(0, 4, 0);
|
||||||
synth.noteOn(0, 60, 85);
|
synth.noteOn(0, 60, 85);
|
||||||
REQUIRE( numPlayingVoices(synth) == 1 );
|
REQUIRE( numPlayingVoices(synth) == 1 );
|
||||||
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId.filename() == "*saw" );
|
REQUIRE( getPlayingVoices(synth).front()->getRegion()->sampleId->filename() == "*saw" );
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("[Synth] Initial values of CC")
|
TEST_CASE("[Synth] Initial values of CC")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue