Commit graph

198 commits

Author SHA1 Message Date
derselbst
26710f1076 Bump to 2.1.6 2021-01-01 21:26:12 +01:00
getraid-gg
1cdeebef37 Enable the use of UTF-8 filenames under Windows (#718)
While `fopen` (used through the macro `FLUID_FOPEN`) uses UTF-8 on *nix, it's restricted to ANSI on Windows. A change to enable using paths containing non-ANSI characters was suggested before in issue #128 but was rejected due to requiring large parts of both the public API and private implementation to be modified to accommodate Windows.

This PR instead changes the macro definition for `FLUID_FOPEN` from `fopen` to a new wrapper, `fluid_fopen`. This wrapper is defined in `fluidsynth_priv.h` and defined in `fluid_sys.c` (following the pattern of `fluid_alloc`). Under Windows, it converts the `const char*` UTF-8 parameters to Unicode `wchar_t*` strings using the Windows API function `MultiByteToWideChar` and opens the file using the Windows API-specific `_wfopen`. On all other platforms, it simply calls `fopen`.

The public API is unchanged. This solution will require Windows users of the API to convert UTF-16 strings to UTF-8 (which then get converted back into UTF-16 anyway), but that's still an improvement over only being able to use ANSI paths.

This PR also adds a new test, `test_utf8_open`, which tests `FLUID_FOPEN` directly and through `fluid_is_soundfont` and `fluid_synth_sfload` using a new soundfont file, `sf2/â– VintageDreamsWaves-v2â– .sf2`, which is just a copy of `VintageDreamsWaves-v2.sf2` with Unicode characters in the filename.
2020-12-22 11:30:14 +01:00
derselbst
23b270c08b Merge branch '2.1.x' into master 2020-09-06 14:54:26 +02:00
derselbst
ff7c72c80f Bump to 2.1.5 2020-09-06 11:52:39 +02:00
derselbst
0acfd81e28 Merge branch '2.1.x' into master 2020-08-17 18:24:45 +02:00
Fabrice Fontaine
0cccf83a38 CMakeLists.txt: fix build with gcc 4.8 (#661)
-Werror=incompatible-pointer-types is unconditionally used since version
2.1.4 and 137a14e106. This will raise a
build failure when checking for threads on gcc 4.8:

/home/buildroot/autobuild/run/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc --sysroot=/home/buildroot/autobuild/run/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot -DTESTKEYWORD=inline  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -Wall -W -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wno-unused-parameter -Wdeclaration-after-statement -Werror=implicit-function-declaration -Werror=incompatible-pointer-types -Wbad-function-cast -Wcast-align   -DNDEBUG -fPIE   -o CMakeFiles/cmTC_98946.dir/CheckIncludeFile.c.o   -c /home/buildroot/autobuild/run/instance-3/output-1/build/fluidsynth-2.1.4/CMakeFiles/CMakeTmp/CheckIncludeFile.c
cc1: error: -Werror=incompatible-pointer-types: no option -Wincompatible-pointer-types

Fixes:
 - http://autobuild.buildroot.org/results/13cbba871db56ef8657a3d13c6ac8e1b4da0d244

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-08-17 18:01:39 +02:00
derselbst
62b715483f Merge branch '2.1.x' into master 2020-07-09 19:39:21 +02:00
derselbst
137a14e106 Turn incompatible-pointer-types warning into error 2020-07-08 19:10:53 +02:00
derselbst
d73135fc48 Merge branch '2.1.x' into master 2020-07-05 16:32:47 +02:00
derselbst
459949a62b Bump to 2.1.4 2020-07-05 16:19:33 +02:00
Tom M
0d98c47545
Revise the sequencer's event queue (#604)
Proposing a new event queue for the sequencer, based on prior discussion:
https://lists.nongnu.org/archive/html/fluid-dev/2019-12/msg00001.html

With this change fluidsynth will require a C++98 compliant compiler.

Consider this as RFC, feedback is welcome.

The "pain-points" from the discussion:

#### 1. It is slow.

Done (thanks to heap sort), see runtime of `test_seq_event_queue_sort`.

#### 2. A meaningful ordering for events with the same tick has not been considered.

Done, see comments in `fluid_seq_queue.cpp`.

#### 3. Complicated implementation

Now uses one single event queue, which requires C++98. Implemented similarly to std::priority_queue by using heap sort.

The "queue" I use currently is of type `std::deque`. `deque` does not provide preallocation. `std::vector` does provide it. However, `std::deque` has the huge advantage that appending additional elements is cheap. For `std::vector` appending new elements would require to reallocate all the memory and copy it to the new array. So,

* either use `std::deque` with the risk that memory allocation may occur during `fluid_sequencer_send_at()`, or
* use `std::vector` with a preallocated pool of events and make `fluid_sequencer_send_at()` when the `vector` runs out of capacity.

Comments?

#### 4. Events that have been processed are deleted and gone.

After having thought about this more, this is the correct behavior. After events have been dispatched, they must be released to free underlying memory, see point 3. For the very rare case that a client (e.g. fluid_player) may require those events in the future, the client should be responsible for storing the events somewhere.

#### 5. The sequencer supports the system timer as alternative time source.

The conclusion from the mailing list was that the system timer can be removed. This has been done.

#### 6. Time Scaling

Time scaling can now be used for arbitrary tempo changes. The previous implementation was capable of that as well, however, the time-scale was limited to 1000. The only limitation for the scale is now >0, see `test_seq_scale`.

### Other Points

* `fluid_sequencer_remove_events()` turned out to be broken before, as it did not remove all events from the queue. This has been fixed, see `test_seq_event_queue_remove`.

* Consider the following code executed by `threadA`:

```c
fluid_sequencer_send_at(event0);
fluid_sequencer_set_time_scale(); // new scale
fluid_sequencer_send_at(event1);
```

The new scale will be definitely applied to `event1`. However, if another concurrently running `threadB` executes `fluid_sequencer_process()`, it was previously not clear, whether the new scale was also applied to event0. This depends on whether `event0` was still in the `preQueue`, and this depends on `event0.time` and the tick count that `fluid_sequencer_process()` is being called with. This has been changed. As of now, events are queued with their timestamp AS-IS. And only the latest call to `fluid_sequencer_set_time_scale()` is being considered during `fluid_sequencer_process()`. This makes the implementation very simple, i.e. no events need to be changed and the sequencer doesn't have to be locked down. On the other hand, it means that `fluid_sequencer_set_time_scale()` can only be used for tempo changes when called from the sequencer callback. In other words, if `threadA` executes the code above followed by `fluid_sequencer_process()`, `event0` and `event1` will be executed with the same tempo, which is the latest scale provided to the seq. Is this acceptable? The old implementation had the same limitation. And when looking through the internet, I only find users who call `fluid_sequencer_set_time_scale()` from the sequencer callback. Still, this is a point I'm raising for discussion.
2020-05-26 17:16:22 +02:00
Tom M
9995fd88b2
Support loading SoundFonts >2GiB on Windows (#629)
Since sizeof(long) == 4 even on 64 bit Windose, big files cannot be
loaded natively via the ANSI C file API. This change makes fluidsynth's
file callback API use long long, which is guaranteed to be at least 64
bit wide.
2020-05-26 16:53:59 +02:00
derselbst
5af89f8c92 Bump to 2.1.3 2020-05-23 14:29:17 +02:00
derselbst
d9ad6a0725 Fix warning in cmake >= 3.17 2020-04-06 10:40:37 +02:00
derselbst
2a6b22e9bb Bump to 2.1.2 2020-04-05 18:44:06 +02:00
derselbst
ab15b32656 Bump to 2.1.1 2020-02-16 15:59:11 +01:00
derselbst
8a0761a129 Fix cmake warning 2020-02-02 15:25:39 +01:00
Nikos Chantziaras
545959ca17
Fix linking against libinstpatch (#617)
This fixes the case where linking fails if libinstpatch is not installed in a system/default location but instead needs to be found through `PKG_CONFIG_PATH`.
2020-02-01 08:54:21 +01:00
Atsushi Eno
69ba49348a
CMakeLists.txt: make positional code (-fPIC) customizible. (#616)
For some use cases it is necessary to specify -fPIC even if we build
static library e.g. building vst plugins (*.so) which may not load
shared libraries from outside the system paths (depends on DAWs).
For such environment we would like to build the final shared library
without depending on `libfluidsynth.so(.*)` but if we build libfluidsynth.a
it always comes without -fPIC. This change makes it adjustable.
2020-01-31 15:45:18 +01:00
derselbst
6163577a61 Remove unused clang-format cmake target 2020-01-11 09:45:05 +01:00
derselbst
850e8a2ec8 Fix building without pkg-config 2020-01-11 09:43:46 +01:00
Fabrice Fontaine
c538c9fa7e CMakeLists.txt: use pkg-config to find readline
Use pkg_check_modules to find readline dependencies such as ncurses and
fallback on current mechanism.

This will fix the following build failure when building statically:

/home/buildroot/autobuild/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: /home/buildroot/autobuild/instance-1/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libreadline.a(display.o): in function `cr':
display.c:(.text+0x1a0): undefined reference to `tputs'

Fixes:
 - http://autobuild.buildroot.org/results/88609eefe55af2ca50d43e17d3424b923528b07a

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-01-10 08:57:57 +01:00
derselbst
b4bef26482 Apply compilation flags to AppleClang 2019-11-13 22:15:01 +02:00
Tom M
4c980c5860
Remove unused macros from config.h (#588) 2019-11-04 16:44:32 +01:00
derselbst
99a0ccbaad Adjust SOVERSION for 2.1.0RC1 2019-10-27 17:00:53 +01:00
derselbst
585396d36e Bump version to 2.1.0 RC1 2019-10-23 21:00:38 +02:00
derselbst
18ad9df21b Bump required libinstpatch version to 1.1.0 2019-10-23 17:28:55 +02:00
derselbst
606c4d47b6 Turn implicit function declarations into errors 2019-10-21 13:01:50 +02:00
derselbst
587fbf2e67 Fix broken previous merge.
Fixes build and closes #567.
2019-10-05 14:24:22 +02:00
derselbst
9ab3e3ab51 Merge branch '2.0.x' into master 2019-09-28 07:38:54 +02:00
derselbst
ca7f7047ad Correctly define DEBUG macro 2019-09-27 14:05:13 +02:00
derselbst
9793c0def3 bump to 2.0.7 2019-09-24 16:23:55 +02:00
derselbst
1e7a5f594d Merge branch '2.0.x' into master 2019-08-19 16:39:36 +02:00
derselbst
dec5e98f23 Bump version to 2.0.6 2019-08-17 18:00:29 +02:00
derselbst
90c5eb05c1 Let clang only report successfully vectorized loops
too spamy otherwise, flag kept as comment for manual profiling though
2019-08-08 21:54:12 +02:00
derselbst
03511aef3a Merge branch '2.0.x' into master 2019-08-08 19:51:44 +02:00
derselbst
b87d8b96ef Print out version of clang-tidy 2019-08-08 19:50:41 +02:00
derselbst
d8bbd56fea Restore original libinstpatch pkgconfig module name 2019-08-02 14:06:54 +02:00
derselbst
6a6015f047 Fix build if -Denable-fpe-check=1 on windows 2019-08-02 13:53:14 +02:00
derselbst
e1dc5d8f68 Correctly define DEBUG macro 2019-08-02 13:21:21 +02:00
derselbst
eb40b5a550 Compile with address sanitizer on request 2019-07-10 17:01:12 +02:00
Carlo Bramini
a02f1379d8 Add support for C99 math functions, if available (#545) 2019-07-07 11:02:31 +02:00
Tom M
b6df34cc27
Restructure cmake build summary (#542) 2019-06-28 16:28:41 +02:00
Tom M
ef2c256e9e
fix build with recent libinstpatch 2019-06-22 18:57:13 +02:00
Tom M
e49b5ed201
Support Loading DLS Files (#493)
Fixes #320
2019-05-11 05:31:56 +02:00
derselbst
e31bbe3504 Merge branch '2.0.x' into master 2019-04-17 19:14:46 +02:00
derselbst
e5c29cf8b8 bump to 2.0.5 2019-04-13 14:02:01 +02:00
Tom M
c04acc653e
Use pkgconfig to find SDL2 (#524) 2019-04-06 09:10:50 +02:00
Atsushi Eno
daa037b0d3 Add Android audio drivers based on OpenSLES and Oboe (#464)
This set of changes implements audio drivers for Android, OpenSLES and Oboe. The changes in the original sources are kept minimal so that it should be easily maintained.
2019-03-27 18:02:23 +01:00
derselbst
0cd44d00e1 Merge branch '2.0.x' into master 2019-03-02 10:23:13 +01:00
Florian Léger
099369f8b7 Improve systemd integration
When fluidsynth is run as a service using systemd, make sure
the service is considered started only when it is ready to process events.

In order to do so:
 - Add an optional runtime dependency to libsystemd to the fluidsynth executable
 - Change the systemd service type to "notify"
 - Have fluidsynth notify systemd that the service is started after the server is started
 - Have fluidsynth notify systemd that the service is stopping after joining the server thread
2019-03-02 10:18:32 +01:00
derselbst
96e43ec72c Merge branch '2.0.x' into master 2019-02-17 09:00:32 +01:00
derselbst
52cd3338ac re-enable Network Support on Darwin 2019-02-10 08:37:40 +01:00
derselbst
c096c54cb6 Merge branch '2.0.x' into master 2019-02-09 09:52:53 +01:00
derselbst
551d6495df cmake: correctly query for glib version 2019-02-08 19:59:46 +01:00
derselbst
851a26fff1 bump to 2.0.4 2019-02-08 17:39:12 +01:00
derselbst
aa65624f8c Merge branch '2.0.x' into master 2019-02-07 08:55:24 +01:00
derselbst
b6a5c5f570 avoid using g_stat on windows if glib < 2.26
Closes #452.
2019-02-03 19:45:51 +01:00
Tobias Kortkamp
ff6377a3bd Address comments from #472
Resolves #508.

Signed-off-by: Tobias Kortkamp <t@tobik.me>
2019-02-03 11:09:08 +01:00
Yuri
22dd94fc5c FreeBSD compatibility patch upstream from the port 2019-02-03 11:06:17 +01:00
derselbst
8b1820580b Merge branch '2.0.x' 2018-12-30 12:42:30 +01:00
derselbst
1bae9b2fe1 bump to version 2.0.3 2018-12-30 12:42:00 +01:00
derselbst
6d981aedfe Merge branch '2.0.x' into master 2018-12-22 16:08:54 +01:00
derselbst
06ec2d4e67 Revert "remove unused io.h include"
This reverts commit cb485806c3. Fixes #491.
2018-12-22 16:04:49 +01:00
derselbst
2cef5b0587 Merge branch 'master' into 2.1-testing 2018-12-19 14:22:40 +01:00
derselbst
cb485806c3 remove unused io.h include 2018-12-14 17:50:03 +01:00
derselbst
73689925da disable clang-tidy for normal builds
It may cause errors when cross compiling. Keep it for profiling builds
though.

Fixes #475.
2018-12-14 17:49:49 +01:00
carlo-bramini
978283bbf0 Add Sdl2 driver (#478) 2018-12-14 16:43:35 +01:00
carlo-bramini
cfe2d158f4 Add WaveOut driver (#466) 2018-12-01 15:04:26 +01:00
derselbst
f52e4fdf39 update documentation for enable-threads 2018-11-18 09:45:28 +01:00
derselbst
eb22cfbdbb bump to version 2.0.2 2018-11-18 09:39:09 +01:00
carlo-bramini
fe92a0a655 Introduce enable-threads option to cmake (#463) 2018-11-18 08:55:52 +01:00
carlo-bramini
a1affca2ca
Use "enable-network" instead of NETWORK_SUPPORT 2018-10-27 10:11:28 +02:00
carlo-bramini
02d7ab6939
Fix "-mms-bitfields" option. 2018-10-26 19:49:27 +02:00
carlo-bramini
2ffad4dd2c
Add options for Windows drivers 2018-10-26 19:48:01 +02:00
derselbst
0f11c9a0da bump to 2.0.1 2018-10-07 14:47:07 +02:00
derselbst
457edfcdda fix build for cmake < 3.3
CMP0063 hasnt been introduced yet
2018-09-18 17:34:10 +02:00
derselbst
f0f9ebeefb remove -Wno-cast-qual flag 2018-08-23 14:16:35 +02:00
Tom M
c8056ee002
Merge branch 'master' into test-flag 2018-08-08 20:13:39 +02:00
Tom M
75db4f31b3
WinXP compatible CI builds (#419)
attempt to remain windows xp compatibility for AppVeyor CI builds and statically link MSVC's C Run-Time Library
2018-08-08 20:12:37 +02:00
derselbst
908aaeb5cc cmake: setup linker directories before creating target 2018-08-07 15:19:05 +02:00
derselbst
521e5451fc remove cmake option enable-tests
Always build unit tests instead and use cmakes OBJECT library to bypass visibility control and the value of BUILD_SHARED_LIBS.
2018-08-05 20:50:41 +02:00
derselbst
90c2d76709 cmake: setup formatting targets
for clang-tidy and astyle + minor formatting adjustments to clang-format config
2018-06-24 12:59:46 +02:00
derselbst
c43bb5d505 set CMAKE_C_FLAGS rather than build type specific ones 2018-06-02 13:23:50 +02:00
Tom M
f1384f03d9
Merge branch 'master' into rvoice-align 2018-05-11 16:53:42 +02:00
derselbst
d8f46f2bae remove unused vars, clarify comments 2018-05-05 15:17:09 +02:00
derselbst
a153d0ad73 no need to link against openMP 2018-05-04 20:07:06 +02:00
derselbst
7fba85296b fix compilation with intel compiler
by adding -restrict compile flag
2018-05-04 20:05:45 +02:00
Tom M
05c2d57e65
Merge pull request #372 from FluidSynth/rvoice-refactor3
rvoice_mixer refactorings + cleanups
2018-05-02 20:51:53 +02:00
derselbst
edd52edac2 consistently use signed int for sfont_id, bank_num and preset_num 2018-04-30 10:09:48 +02:00
derselbst
e229f62020 cmake: detect openMP 2018-04-26 16:25:18 +02:00
derselbst
384f05e77c disable padding warnings 2018-04-25 17:28:37 +02:00
Marcus Weseloh
f52bbf53a4 Add VintageDreamsWaves-v2 in SF3 format and some tests for sf3 loading 2018-04-18 09:14:55 +02:00
derselbst
cb35fac1c6 make VintageDreams sf2 an explicit requirement for unit tests 2018-04-11 11:03:12 +02:00
derselbst
de68492710 add cmake option enable-tests
forces a static build and sets up test env
2018-04-07 10:45:44 +02:00
derselbst
42a6a2153a add a macro to simplify adding unit tests 2018-04-07 10:45:43 +02:00
derselbst
4032ae0a48 cmake: enable testing with ctest 2018-04-06 20:20:07 +02:00
derselbst
4fd56639fa fix build for clang-tidy >= 5.0 2018-03-22 21:51:46 +01:00
derselbst
2099dae4f6 remove custom clang-format and clang-tidy scripts
everything is now handled by cmake
2018-03-22 20:48:15 +01:00
derselbst
d16ca62465 use cmake to specify C standard explicitly 2018-03-22 20:42:03 +01:00