Merge pull request #926 from jpcima/importer
Enable the importer in JACK and Puredata
This commit is contained in:
commit
c3ee3982ec
9 changed files with 92 additions and 30 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
if(SFIZZ_JACK)
|
if(SFIZZ_JACK)
|
||||||
add_executable(sfizz_jack MidiHelpers.h jack_client.cpp)
|
add_executable(sfizz_jack MidiHelpers.h jack_client.cpp)
|
||||||
target_link_libraries(sfizz_jack PRIVATE sfizz::sfizz sfizz::jack sfizz::spin_mutex absl::flags_parse)
|
target_link_libraries(sfizz_jack PRIVATE sfizz::import sfizz::sfizz sfizz::jack sfizz::spin_mutex absl::flags_parse)
|
||||||
sfizz_enable_lto_if_needed(sfizz_jack)
|
sfizz_enable_lto_if_needed(sfizz_jack)
|
||||||
install(TARGETS sfizz_jack DESTINATION ${CMAKE_INSTALL_BINDIR}
|
install(TARGETS sfizz_jack DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
COMPONENT "jack" OPTIONAL)
|
COMPONENT "jack" OPTIONAL)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "sfizz.hpp"
|
#include "sfizz.hpp"
|
||||||
|
#include "sfizz/import/sfizz_import.h"
|
||||||
#include "MidiHelpers.h"
|
#include "MidiHelpers.h"
|
||||||
#include <absl/flags/parse.h>
|
#include <absl/flags/parse.h>
|
||||||
#include <absl/flags/flag.h>
|
#include <absl/flags/flag.h>
|
||||||
|
|
@ -188,7 +189,13 @@ int main(int argc, char** argv)
|
||||||
sfz::Sfizz synth;
|
sfz::Sfizz synth;
|
||||||
synth.setOversamplingFactor(factor);
|
synth.setOversamplingFactor(factor);
|
||||||
synth.setPreloadSize(preload_size);
|
synth.setPreloadSize(preload_size);
|
||||||
synth.loadSfzFile(filesToParse[0]);
|
|
||||||
|
const char *importFormat = nullptr;
|
||||||
|
if (!sfizz_load_or_import_file(synth.handle(), filesToParse[0], &importFormat)) {
|
||||||
|
std::cout << "Could not load the instrument file: " << filesToParse[0] << '\n';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
std::cout << "==========" << '\n';
|
std::cout << "==========" << '\n';
|
||||||
std::cout << "Total:" << '\n';
|
std::cout << "Total:" << '\n';
|
||||||
std::cout << "\tMasters: " << synth.getNumMasters() << '\n';
|
std::cout << "\tMasters: " << synth.getNumMasters() << '\n';
|
||||||
|
|
@ -211,6 +218,10 @@ int main(int argc, char** argv)
|
||||||
for (auto& opcode : synth.getUnknownOpcodes())
|
for (auto& opcode : synth.getUnknownOpcodes())
|
||||||
std::cout << opcode << ',';
|
std::cout << opcode << ',';
|
||||||
std::cout << '\n';
|
std::cout << '\n';
|
||||||
|
if (importFormat) {
|
||||||
|
std::cout << "==========" << '\n';
|
||||||
|
std::cout << "Import format: " << importFormat << '\n';
|
||||||
|
}
|
||||||
// std::cout << std::flush;
|
// std::cout << std::flush;
|
||||||
|
|
||||||
jack_status_t status;
|
jack_status_t status;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
#include "sfizz_lv2.h"
|
#include "sfizz_lv2.h"
|
||||||
#include "sfizz_lv2_plugin.h"
|
#include "sfizz_lv2_plugin.h"
|
||||||
|
|
||||||
#include "sfizz/import/ForeignInstrument.h"
|
#include "sfizz/import/sfizz_import.h"
|
||||||
#include "plugin/InstrumentDescription.h"
|
#include "plugin/InstrumentDescription.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
@ -1231,8 +1231,6 @@ sfizz_lv2_update_sfz_info(sfizz_plugin_t *self)
|
||||||
static bool
|
static bool
|
||||||
sfizz_lv2_load_file(sfizz_plugin_t *self, const char *file_path)
|
sfizz_lv2_load_file(sfizz_plugin_t *self, const char *file_path)
|
||||||
{
|
{
|
||||||
bool status;
|
|
||||||
|
|
||||||
char buf[MAX_PATH_SIZE];
|
char buf[MAX_PATH_SIZE];
|
||||||
if (file_path[0] == '\0')
|
if (file_path[0] == '\0')
|
||||||
{
|
{
|
||||||
|
|
@ -1241,18 +1239,7 @@ sfizz_lv2_load_file(sfizz_plugin_t *self, const char *file_path)
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
const sfz::InstrumentFormatRegistry& formatRegistry = sfz::InstrumentFormatRegistry::getInstance();
|
bool status = sfizz_load_or_import_file(self->synth, file_path, nullptr);
|
||||||
const sfz::InstrumentFormat* format = formatRegistry.getMatchingFormat(file_path);
|
|
||||||
|
|
||||||
if (!format)
|
|
||||||
status = sfizz_load_file(self->synth, file_path);
|
|
||||||
else {
|
|
||||||
auto importer = format->createImporter();
|
|
||||||
std::string virtual_path = std::string(file_path) + ".sfz";
|
|
||||||
std::string sfz_text = importer->convertToSfz(file_path);
|
|
||||||
status = sfizz_load_string(self->synth, virtual_path.c_str(), sfz_text.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
sfizz_lv2_update_sfz_info(self);
|
sfizz_lv2_update_sfz_info(self);
|
||||||
sfizz_lv2_update_file_info(self, file_path);
|
sfizz_lv2_update_file_info(self, file_path);
|
||||||
return status;
|
return status;
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ add_pd_external(sfizz_puredata "sfizz_puredata.c")
|
||||||
target_compile_definitions(sfizz_puredata PRIVATE
|
target_compile_definitions(sfizz_puredata PRIVATE
|
||||||
"SFIZZ_NUM_CCS=${SFIZZ_NUM_CCS}"
|
"SFIZZ_NUM_CCS=${SFIZZ_NUM_CCS}"
|
||||||
"SFIZZ_VERSION=\"${CMAKE_PROJECT_VERSION}\"")
|
"SFIZZ_VERSION=\"${CMAKE_PROJECT_VERSION}\"")
|
||||||
target_link_libraries(sfizz_puredata PRIVATE sfizz::sfizz)
|
target_link_libraries(sfizz_puredata PRIVATE sfizz::import sfizz::sfizz)
|
||||||
|
|
||||||
set_target_properties(sfizz_puredata PROPERTIES
|
set_target_properties(sfizz_puredata PROPERTIES
|
||||||
OUTPUT_NAME "sfizz"
|
OUTPUT_NAME "sfizz"
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include "GitBuildId.h"
|
#include "GitBuildId.h"
|
||||||
#include <m_pd.h>
|
#include <m_pd.h>
|
||||||
#include <sfizz.h>
|
#include <sfizz.h>
|
||||||
|
#include <sfizz/import/sfizz_import.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
@ -62,7 +63,7 @@ static bool sfizz_tilde_do_load(t_sfizz_tilde* self)
|
||||||
{
|
{
|
||||||
bool loaded;
|
bool loaded;
|
||||||
if (self->filepath[0] != '\0')
|
if (self->filepath[0] != '\0')
|
||||||
loaded = sfizz_load_file(self->synth, self->filepath);
|
loaded = sfizz_load_or_import_file(self->synth, self->filepath, NULL);
|
||||||
else
|
else
|
||||||
loaded = sfizz_load_string(self->synth, "default.sfz", "<region>sample=*sine");
|
loaded = sfizz_load_string(self->synth, "default.sfz", "<region>sample=*sine");
|
||||||
return loaded;
|
return loaded;
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include "SfizzVstState.h"
|
#include "SfizzVstState.h"
|
||||||
#include "SfizzVstParameters.h"
|
#include "SfizzVstParameters.h"
|
||||||
#include "SfizzVstIDs.h"
|
#include "SfizzVstIDs.h"
|
||||||
#include "sfizz/import/ForeignInstrument.h"
|
#include "sfizz/import/sfizz_import.h"
|
||||||
#include "plugin/SfizzFileScan.h"
|
#include "plugin/SfizzFileScan.h"
|
||||||
#include "plugin/InstrumentDescription.h"
|
#include "plugin/InstrumentDescription.h"
|
||||||
#include "base/source/fstreamer.h"
|
#include "base/source/fstreamer.h"
|
||||||
|
|
@ -682,16 +682,7 @@ void SfizzVstProcessor::loadSfzFileOrDefault(const std::string& filePath, bool i
|
||||||
sfz::Sfizz& synth = *_synth;
|
sfz::Sfizz& synth = *_synth;
|
||||||
|
|
||||||
if (!filePath.empty()) {
|
if (!filePath.empty()) {
|
||||||
const sfz::InstrumentFormatRegistry& formatRegistry = sfz::InstrumentFormatRegistry::getInstance();
|
sfizz_load_or_import_file(synth.handle(), filePath.c_str(), nullptr);
|
||||||
const sfz::InstrumentFormat* format = formatRegistry.getMatchingFormat(filePath);
|
|
||||||
if (!format)
|
|
||||||
synth.loadSfzFile(filePath);
|
|
||||||
else {
|
|
||||||
auto importer = format->createImporter();
|
|
||||||
std::string virtualPath = filePath + ".sfz";
|
|
||||||
std::string sfzText = importer->convertToSfz(filePath);
|
|
||||||
synth.loadSfzString(virtualPath, sfzText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
synth.loadSfzString("default.sfz", defaultSfzText);
|
synth.loadSfzString("default.sfz", defaultSfzText);
|
||||||
|
|
|
||||||
|
|
@ -251,11 +251,13 @@ endif()
|
||||||
|
|
||||||
# Import library
|
# Import library
|
||||||
set(SFIZZ_IMPORT_HEADERS
|
set(SFIZZ_IMPORT_HEADERS
|
||||||
|
sfizz/import/sfizz_import.h
|
||||||
sfizz/import/ForeignInstrument.h
|
sfizz/import/ForeignInstrument.h
|
||||||
sfizz/import/foreign_instruments/AudioFile.h
|
sfizz/import/foreign_instruments/AudioFile.h
|
||||||
sfizz/import/foreign_instruments/DecentSampler.h)
|
sfizz/import/foreign_instruments/DecentSampler.h)
|
||||||
|
|
||||||
set(SFIZZ_IMPORT_SOURCES
|
set(SFIZZ_IMPORT_SOURCES
|
||||||
|
sfizz/import/sfizz_import.cpp
|
||||||
sfizz/import/ForeignInstrument.cpp
|
sfizz/import/ForeignInstrument.cpp
|
||||||
sfizz/import/foreign_instruments/AudioFile.cpp
|
sfizz/import/foreign_instruments/AudioFile.cpp
|
||||||
sfizz/import/foreign_instruments/DecentSampler.cpp)
|
sfizz/import/foreign_instruments/DecentSampler.cpp)
|
||||||
|
|
|
||||||
32
src/sfizz/import/sfizz_import.cpp
Normal file
32
src/sfizz/import/sfizz_import.cpp
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
// SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
|
||||||
|
// This code is part of the sfizz library and is licensed under a BSD 2-clause
|
||||||
|
// license. You should have receive a LICENSE.md file along with the code.
|
||||||
|
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
|
||||||
|
|
||||||
|
#include "sfizz_import.h"
|
||||||
|
#include "ForeignInstrument.h"
|
||||||
|
|
||||||
|
bool sfizz_load_or_import_file(sfizz_synth_t* synth, const char* path, const char** format)
|
||||||
|
{
|
||||||
|
const sfz::InstrumentFormatRegistry& ireg = sfz::InstrumentFormatRegistry::getInstance();
|
||||||
|
const sfz::InstrumentFormat* ifmt = ireg.getMatchingFormat(path);
|
||||||
|
|
||||||
|
if (!ifmt) {
|
||||||
|
if (!sfizz_load_file(synth, path))
|
||||||
|
return false;
|
||||||
|
if (format)
|
||||||
|
*format = nullptr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
auto importer = ifmt->createImporter();
|
||||||
|
std::string virtualPath = std::string(path) + ".sfz";
|
||||||
|
std::string sfzText = importer->convertToSfz(path);
|
||||||
|
if (!sfizz_load_string(synth, virtualPath.c_str(), sfzText.c_str()))
|
||||||
|
return false;
|
||||||
|
if (format)
|
||||||
|
*format = ifmt->name();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
38
src/sfizz/import/sfizz_import.h
Normal file
38
src/sfizz/import/sfizz_import.h
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
// SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
|
||||||
|
// This code is part of the sfizz library and is licensed under a BSD 2-clause
|
||||||
|
// license. You should have receive a LICENSE.md file along with the code.
|
||||||
|
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <sfizz.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Loads or imports an instrument file.
|
||||||
|
*
|
||||||
|
* The file path can be absolute or relative.
|
||||||
|
* @since 1.0.1
|
||||||
|
*
|
||||||
|
* @param synth The synth.
|
||||||
|
* @param path A null-terminated string representing a path to an instrument
|
||||||
|
* in SFZ format, or another format which can be imported.
|
||||||
|
* @param format An optional pointer to a string pointer, which receives the
|
||||||
|
* null-terminated name of the format if the file was imported,
|
||||||
|
* or null if the file was loaded directly as SFZ.
|
||||||
|
*
|
||||||
|
* @return @true when file loading went OK,
|
||||||
|
* @false if some error occured while loading.
|
||||||
|
*
|
||||||
|
* @par Thread-safety constraints
|
||||||
|
* - @b CT: the function must be invoked from the Control thread
|
||||||
|
* - @b OFF: the function cannot be invoked while a thread is calling @b RT functions
|
||||||
|
*/
|
||||||
|
bool sfizz_load_or_import_file(sfizz_synth_t* synth, const char* path, const char** format);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
Loading…
Add table
Reference in a new issue