rncbc / qsynth Goto Github PK
View Code? Open in Web Editor NEWQsynth - A fluidsynth Qt GUI Interface
Home Page: https://qsynth.sourceforge.io
License: GNU General Public License v2.0
Qsynth - A fluidsynth Qt GUI Interface
Home Page: https://qsynth.sourceforge.io
License: GNU General Public License v2.0
qsynth - A fluidsynth Qt GUI Interface -------------------------------------- Qsynth is a fluidsynth GUI front-end application written in C++ around the Qt framework using Qt Designer. Eventually it may evolve into a softsynth management application allowing the user to control and manage a variety of command line softsynths but for the moment it wraps the excellent FluidSynth (http://www.fluidsynth.org). FluidSynth is a command line software synthesiser based on the Soundfont specification. Homepage: https://qsynth.sourceforge.io http://qsynth.sourceforge.net License: GNU General Public License (GPL) Requirements ------------ The software requirements for build and runtime are listed as follows: Mandatory: - Qt framework, C++ class library and tools for cross-platform application and UI development https://qt.io/ - fluidsynth, real-time software synthesizer based on the SoundFont 2 specifications http://www.fluidsynth.org/ Installation ------------ Unpack the tarball and in the extracted source directory: cmake [-DCMAKE_INSTALL_PREFIX=<prefix>] -B build cmake --build build [--parallel <Njobs>] and optionally, as root: [sudo] cmake --install build Note that the default installation path (<prefix>) is /usr/local . Configuration ------------- Qsynth holds its settings and configuration state per user, in a file located as $HOME/.config/rncbc.org/Qsynth.conf . Normally, there's no need to edit this file, as it is recreated and rewritten everytime qsynth is run. Bugs ---- Plenty still although this is beta software ;) Support ------- Qsynth is open source free software. For bug reports, feature requests, discussion forums, mailling lists, or any other matter related to the development of this piece of software, please use the Sourceforge project page (https://sourceforge.net/projects/qsynth). Acknowledgements ---------------- Qsynth has been created by Rui Nuno Capela, Richard Bown and Chris Cannam to bring a simple but effective software synthesier front end to the Linux desktop. From an original idea by Richard Bown and Chris Cannam to create an open software synthesiser front end to use in conjunction with Rosegarden (https://www.sourceforge.net/projects/rosegarden) and other ALSA based software sequencers. Inspired by Rui's work on QjackCtl (https://qjackctl.sourceforge.io). Ebrahim Mayat <ebmayat at mac dot com> also contributed with instructions to build Qsynth on Mac OSX (see README-OSX). This might be outdated now that Qsynth has migrated to Qt4, but nevertheless... Pedro Lopez-Cabanillas is currently the most prominent developer, having contributed with the awesome knob skins/styles option, the alternate cmake build system and the Windows(tm) installer bundle. Kudos to Pedro! Enjoy. rncbc aka Rui Nuno Capela <rncbc at rncbc dot org> bownie aka Richard Bown <bownie at bownie dot com> cannam aka Chris Cannam <cannam at all dash day dash breakfast dot com>
By command line --gain, --option (synth.gain=) or by change registry key. It always working as 0.2 maximum. I can go lower, but cannot exceed UI limit. Doing by "--option" the change is visible in settings, but I cannot hear the difference.
Version: qsynth-0.9.5-49.2
Platform Windows 10 x64
Hi guys. When I run run ./configure
or make
I get this error:
configure: error: *** FLUIDSYNTH library not found.
I can assure you I have fluidsynth installed. Also, I have an old version (0.4.3) of qsynth installed from the repos (in raspbian). And I play piano from time to time. So, fluidsynth is there.
I have little experience building from source. But I guess there's a parameter to tell where is fluidsynth located right? Any clue on how to solve this?
I am currently building this package for Solus and I am having some problems when it comes to jack. I forgot to add jack-audio-connection-kit as a run-time dependency, so qsynth filed an error on startup since jack apparently was the default chosen audio driver. I then closed down the program and installed jack. Now the jack entry isn't selectable from the audio driver popout and the jack settings are grayed out. Any ideas on how to fix this?
Currently there is an error if building qsynth using cmake and then trying to use ninja to build it instead of make/autotools. It complains about not finding the right directory. Ninja is far superior in every way than make and especially when it comes to the speed of the compile.
See this text for more info on building with ninja. I recommend you to give it a go your self and correct what ever is causing the error.
reading at the changelog file (paragraph "version 0.1.0"), a soundfont drag & drop on the GUI looks to be possible. That said, I can't find a way to make it working. Would you mind to tell me where a SF2 should be dropped?
Version: qsynth 0.9.9-1
OS: Debian unstable
I would like to use QSynth to just "play some notes" with my MIDI keyboard. I am using the pulseaudio driver. The only instrument I can access is the default grand piano. Trying to select a different instrument in the Channels selector has no effect. Can someone point me to a way to resolve this issue? Thanks for any help.
Seems like QSynth has not implemented a way of configuring the interpolation method for samples.
In this forum talks about this feature in fluidsynth:
https://fluid-dev.nongnu.narkive.com/Y7ytIbja/problems-with-fluidsynth-1-1-6-on-a-raspberry-pi
And here the documentation:
https://www.fluidsynth.org/api/group__synthesis__params.html
It would be useful since I'm debuging a SF2 with these kind of interpolations.
Currently, the program looks like it doesn’t need Qt5X11Extras when building using configure. But when running Cmake it checks for that program but it’s never used from any Abi stand point. Please remove that check from that build system :)
One of the things about qsynth is that it's a run-and-jam-frontend for fluidsynth, the gold standard of soundfont playback.
Something what I would like is setting up a ladspa on the master, or a different ladspa on the reverb/chorus channel.
Heck, I even would not mind setting a highpass-filter ladspa on that lead-synth as well.
Any idea on doing the following with qsynth:
https://github.com/FluidSynth/fluidsynth/blob/master/doc/ladspa.md
This is a bit of gray area I guess, because on one hand qsynth is a fluidsynth frontend, but on the other hand it might fall outside of the 'patch'-scope.
Any thoughts on this?
The Open File dialog has no option to display and load DLS sound fonts. There should be a file dialog filter enabling to select DLS files, like the existing filters for SF2 and SF3 file formats.
The problem is that not always the libfluidsynth library has support for DLS soundfonts. This format is enabled in FluidSynth only when it is linked to the "libinstpatch" library. In a similar way, the SF3 format is enabled when it is linked to the "libsndfile" library. At runtime, if a file type is not supported it will produce an error when the synthesizer is created. It would be better to detect and prevent this at build time. FluidSynth should provide a way to expose these capabilities.
When builing Qsynth with Qt6, the following messages are logged at runtime, when opening the "Setup..." form:
qt.core.qobject.connect: QObject::connect: No such signal QComboBox::activated(const QString&)
qt.core.qobject.connect: QObject::connect: (sender name: 'MidiDriverComboBox')
qt.core.qobject.connect: QObject::connect: (receiver name: 'qsynthSetupForm')
qt.core.qobject.connect: QObject::connect: No such signal QComboBox::activated(const QString&)
qt.core.qobject.connect: QObject::connect: (sender name: 'MidiBankSelectComboBox')
qt.core.qobject.connect: QObject::connect: (receiver name: 'qsynthSetupForm')
qt.core.qobject.connect: QObject::connect: No such signal QComboBox::activated(const QString&)
qt.core.qobject.connect: QObject::connect: (sender name: 'AudioDriverComboBox')
qt.core.qobject.connect: QObject::connect: (receiver name: 'qsynthSetupForm')
The signal QComboBox::activated(QString&) has been removed from Qt6, and now only the QComboBox::activated(int) is available.
References:
https://doc.qt.io/qt-5/qcombobox-obsolete.html#activated-1
https://doc.qt.io/qt-6/qcombobox.html#activated
Sorry to keep pestering you.
Is there a way to change the FluidSynth option synth.device-id in the Qsynth UI?
The Settings tab in the setup window seems to only allow me to view the settings.
I have looked in the registry but can't seem to find it.
The default value of synth.device-id is 0.
However, the default device-id for classic GS and XG devices was 16 (0x10 in hexadecimal).
It has been confirmed that when classic SMF (.mid) is replayed in Qsynth, the intended GS and XG reset behavior is not performed due to the device-id difference.
See also.FluidSynth/fluidsynth/issues/1323
It would be useful if synth.device-id could be variable in order to get closer to the behavior of classic GS and XG devices.
OSX.
Using "Macbook Pro Speakers" works fine.
My proposal is to add a qsynth flatpak to flathub:
https://flathub.org/apps/category/AudioVideo
This commit fixed multi-channel JACK support, although it likely introduced another problem (at least on my ALC1220 hardware on Fedora 33): when JACK is selected as audio output and number of audio groups is forced to 2 (the multi-output checkbox is off), all the even-numbered channels (2, 4, 6, 8, 10, 12, 14 and 16) are not heard, despite MIDI activity is being shown. Odd-numbered channels (1, 3, 5, 7, 9, 11, 13 and 15) play back normally.
Workaround is to manually edit the Qsynth.conf
file and force AudioGroups
setting to 1, and after that all channels are heard.
This is probably related to commit above, since I've started experiencing that only after updating Qsynth to 0.9.1.
Hi,
I'm using Qsynth in addition with QJackCtl to play with my MIDI keyboard. But when QSynth is active any video or music that comes from another source (Firefox, VLC) is either muted or slowed down.
I use Dosbox on Linux and it was a little bit work to get Midi output working (with fluidsynth+qsynth). It's a little bit unclear that you have to write the actual midi port into the dosbox-conf file. Many guides mentioned it's "128", but not always and it would be great, if qsynth could display it somewhere on the gui, so I don't have to use "pmidi -l".
I would expect the second file to be played.
(last one for tonight !)
The build instructions in the README do not work, because there is no "configure" file.
[liam@liam-desktop-Manjaro src]$ ./configure
bash: ./configure: No such file or directory
When Qsynth is used with more than 2 stereo channels, it hits an issue at fluidsynth, making the Jack Thread stop, and causing a silent "crash":
22:19:27.353 Qsynth1: Creating synthesizer engine...
22:19:27.359 Qsynth1: Loading soundfont: "/usr/share/soundfonts/FluidR3_GS.sf2" (bank offset 0)...
22:19:27.367 Qsynth1: Loading soundfont: "/usr/share/soundfonts/SGM-v2.01-YamahaGrand-Guit-Bass-v2.7.sf2" (bank offset 0)...
22:19:27.786 Qsynth1: Loading soundfont: "/usr/share/soundfonts/Chateau Grand-v1.8.sf2" (bank offset 0)...
22:19:27.921 Qsynth1: Creating audio driver (jack)...
22:19:27.940 Qsynth1: Creating MIDI router (alsa_seq)...
22:19:27.940 Qsynth1: Creating MIDI driver (alsa_seq)...
22:19:27.941 Qsynth1: Creating MIDI player...
22:19:27.941 Qsynth1: fluid_synth_set_reverb_on(0)
22:19:27.941 Qsynth1: fluid_synth_set_chorus_on(0)
22:19:27.942 Qsynth1: Synthesizer engine started.
22:19:27.942 Qsynth1: fluid_synth_set_gain(1)
22:19:27.943 Qsynth1: fluid_synth_set_reverb(0.4,0,1,0.9)
22:19:27.943 Qsynth1: fluid_synth_set_chorus(3,1,0.3,8,0)
fluidsynth: warning: SDL2 not initialized, SDL2 audio driver won't be usable
fluidsynth: error: Unknown integer parameter 'synth.dump'
fluidsynth: prog 0 0 0
fluidsynth: warning: No preset found on channel 0 [bank=0 prog=0]
fluidsynth: prog 1 0 0
fluidsynth: warning: No preset found on channel 1 [bank=0 prog=0]
fluidsynth: prog 2 0 0
fluidsynth: warning: No preset found on channel 2 [bank=0 prog=0]
fluidsynth: prog 3 0 0
fluidsynth: warning: No preset found on channel 3 [bank=0 prog=0]
fluidsynth: prog 4 0 0
fluidsynth: warning: No preset found on channel 4 [bank=0 prog=0]
fluidsynth: prog 5 0 0
fluidsynth: warning: No preset found on channel 5 [bank=0 prog=0]
fluidsynth: prog 6 0 0
fluidsynth: warning: No preset found on channel 6 [bank=0 prog=0]
fluidsynth: prog 7 0 0
fluidsynth: warning: No preset found on channel 7 [bank=0 prog=0]
fluidsynth: prog 8 0 0
fluidsynth: warning: No preset found on channel 8 [bank=0 prog=0]
fluidsynth: prog 9 128 0
fluidsynth: warning: No preset found on channel 9 [bank=128 prog=0]
fluidsynth: prog 10 0 0
fluidsynth: warning: No preset found on channel 10 [bank=0 prog=0]
fluidsynth: prog 11 0 0
fluidsynth: warning: No preset found on channel 11 [bank=0 prog=0]
fluidsynth: prog 12 0 0
fluidsynth: warning: No preset found on channel 12 [bank=0 prog=0]
fluidsynth: prog 13 0 0
fluidsynth: warning: No preset found on channel 13 [bank=0 prog=0]
fluidsynth: prog 14 0 0
fluidsynth: warning: No preset found on channel 14 [bank=0 prog=0]
fluidsynth: prog 15 0 0
fluidsynth: warning: No preset found on channel 15 [bank=0 prog=0]
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 0
fluidsynth: prog 2 0 0
fluidsynth: prog 3 0 0
fluidsynth: prog 4 0 0
fluidsynth: prog 5 0 0
fluidsynth: prog 6 0 0
fluidsynth: prog 7 0 0
fluidsynth: prog 8 0 0
fluidsynth: prog 9 128 0
fluidsynth: prog 10 0 0
fluidsynth: prog 11 0 0
fluidsynth: prog 12 0 0
fluidsynth: prog 13 0 0
fluidsynth: prog 14 0 0
fluidsynth: prog 15 0 0
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 0
fluidsynth: prog 2 0 0
fluidsynth: prog 3 0 0
fluidsynth: prog 4 0 0
fluidsynth: prog 5 0 0
fluidsynth: prog 6 0 0
fluidsynth: prog 7 0 0
fluidsynth: prog 8 0 0
fluidsynth: prog 9 128 0
fluidsynth: prog 10 0 0
fluidsynth: prog 11 0 0
fluidsynth: prog 12 0 0
fluidsynth: prog 13 0 0
fluidsynth: prog 14 0 0
fluidsynth: prog 15 0 0
Jack: JackClient::SetupDriverSync driver sem in flush mode
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_Qsynth1
Jack: Clock source : system clock via clock_gettime
Jack: JackLibClient::Open name = Qsynth1 refnum = 3
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_00 type = 32 bit float mono audio port_index = 41
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_00 type = 32 bit float mono audio port_index = 42
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_01 type = 32 bit float mono audio port_index = 43
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_01 type = 32 bit float mono audio port_index = 44
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_02 type = 32 bit float mono audio port_index = 45
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_02 type = 32 bit float mono audio port_index = 46
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_03 type = 32 bit float mono audio port_index = 47
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_03 type = 32 bit float mono audio port_index = 48
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_04 type = 32 bit float mono audio port_index = 49
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_04 type = 32 bit float mono audio port_index = 50
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:l_05 type = 32 bit float mono audio port_index = 51
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:r_05 type = 32 bit float mono audio port_index = 52
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:fx_l_00 type = 32 bit float mono audio port_index = 53
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:fx_r_00 type = 32 bit float mono audio port_index = 54
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:fx_l_01 type = 32 bit float mono audio port_index = 55
Jack: JackClient::PortRegister ref = 3 name = Qsynth1:fx_r_01 type = 32 bit float mono audio port_index = 56
Jack: JackClient::Activate
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackClient::kBufferSizeCallback buffer_size = 512
Jack: JackClient::Init : period = 10666 computation = 100 constraint = 10666
Jack: JackPosixThread::AcquireRealTimeImp priority = 15
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 2
Jack: JackClient::kActivateClient name = Qsynth1 ref = 3
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 41
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 42
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 43
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 44
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 45
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 46
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 47
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 48
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 49
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 50
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 51
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 52
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 53
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 54
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 55
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::kPortRegistrationOn port_index = 56
Jack: JackClient::Connect src = Qsynth1:l_00 dst = system:playback_1
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 18
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 18
Jack: JackClient::Connect src = Qsynth1:r_00 dst = system:playback_2
Jack: JackClient::Connect src = Qsynth1:l_01 dst = system:playback_3
Jack: JackClient::Connect src = Qsynth1:r_01 dst = system:playback_4
Jack: JackClient::Connect src = Qsynth1:l_02 dst = system:playback_5
Jack: JackClient::Connect src = Qsynth1:r_02 dst = system:playback_6
Jack: JackClient::Connect src = Qsynth1:l_03 dst = system:playback_7
Jack: JackClient::Connect src = Qsynth1:r_03 dst = system:playback_8
Jack: JackClient::Connect src = Qsynth1:l_04 dst = system:playback_9
Jack: JackClient::Connect src = Qsynth1:r_04 dst = system:playback_10
Jack: JackClient::Connect src = Qsynth1:l_05 dst = system:playback_11
Jack: JackClient::Connect src = Qsynth1:r_05 dst = system:playback_12
Jack: JackClient::Connect src = Qsynth1:fx_l_00 dst = system:playback_1
Jack: JackClient::Connect src = Qsynth1:fx_r_00 dst = system:playback_2
Jack: JackClient::Connect src = Qsynth1:fx_l_01 dst = system:playback_3
Jack: JackClient::Connect src = Qsynth1:fx_r_01 dst = system:playback_4
fluidsynth: prog 0 0 128
fluidsynth: prog 1 0 128
fluidsynth: prog 2 0 128
fluidsynth: prog 3 0 128
fluidsynth: prog 4 0 128
fluidsynth: prog 5 0 128
fluidsynth: prog 6 0 128
fluidsynth: prog 7 0 128
fluidsynth: prog 8 0 128
fluidsynth: prog 9 128 128
fluidsynth: prog 10 0 128
fluidsynth: prog 11 0 128
fluidsynth: prog 12 0 128
fluidsynth: prog 13 0 128
fluidsynth: prog 14 0 128
fluidsynth: prog 15 0 128
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 1
fluidsynth: prog 2 0 2
fluidsynth: prog 3 0 3
fluidsynth: prog 4 0 4
fluidsynth: prog 5 0 5
fluidsynth: prog 6 0 6
fluidsynth: prog 7 0 7
fluidsynth: prog 8 0 8
fluidsynth: prog 9 128 9
fluidsynth: prog 10 0 10
fluidsynth: prog 11 0 11
fluidsynth: prog 12 0 12
fluidsynth: prog 13 0 13
fluidsynth: prog 14 0 14
fluidsynth: prog 15 0 15
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 1
fluidsynth: prog 2 0 2
fluidsynth: prog 3 0 3
fluidsynth: prog 4 0 4
fluidsynth: prog 5 0 5
fluidsynth: prog 6 0 6
fluidsynth: prog 7 0 7
fluidsynth: prog 8 0 8
fluidsynth: prog 9 128 9
fluidsynth: prog 10 0 10
fluidsynth: prog 11 0 11
fluidsynth: prog 12 0 12
fluidsynth: prog 13 0 13
fluidsynth: prog 14 0 14
fluidsynth: prog 15 0 15
fluidsynth: prog 0 0 128
fluidsynth: prog 1 0 128
fluidsynth: prog 2 0 128
fluidsynth: prog 3 0 128
fluidsynth: prog 4 0 128
fluidsynth: prog 5 0 128
fluidsynth: prog 6 0 128
fluidsynth: prog 7 0 128
fluidsynth: prog 8 0 128
fluidsynth: prog 9 128 128
fluidsynth: prog 10 0 128
fluidsynth: prog 11 0 128
fluidsynth: prog 12 0 128
fluidsynth: prog 13 0 128
fluidsynth: prog 14 0 128
fluidsynth: prog 15 0 128
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 1
fluidsynth: prog 2 0 2
fluidsynth: prog 3 0 3
fluidsynth: prog 4 0 4
fluidsynth: prog 5 0 5
fluidsynth: prog 6 0 6
fluidsynth: prog 7 0 7
fluidsynth: prog 8 0 8
fluidsynth: prog 9 128 9
fluidsynth: prog 10 0 10
fluidsynth: prog 11 0 11
fluidsynth: prog 12 0 12
fluidsynth: prog 13 0 13
fluidsynth: prog 14 0 14
fluidsynth: prog 15 0 15
fluidsynth: prog 0 0 0
fluidsynth: prog 1 0 1
fluidsynth: prog 2 0 2
fluidsynth: prog 3 0 3
fluidsynth: prog 4 0 4
fluidsynth: prog 5 0 5
fluidsynth: prog 6 0 6
fluidsynth: prog 7 0 7
fluidsynth: prog 8 0 8
fluidsynth: prog 9 128 9
fluidsynth: prog 10 0 10
fluidsynth: prog 11 0 11
fluidsynth: prog 12 0 12
fluidsynth: prog 13 0 13
fluidsynth: prog 14 0 14
fluidsynth: prog 15 0 15
Jack: JackClient::Execute end name = Qsynth1
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 9
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 18
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 18
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackClient::ClientNotify ref = 3 name = Qsynth1 notify = 10
Jack: JackPosixThread::Terminate
This patch fixes the issue:
Pull request: #35
The text input for the bank offset in the soundfonts setup is limited to 128. Fluidsynth allows for much higher offsets and the 128 is very limiting if you want to load several soundfonts and address them all via midi.
Windows GUI programs don't produce output on the terminal. This means that the command line options --help
and --version
are completely and silently ignored in that operating system. Error messages related to the command line options aren't displayed, either.
Other Qt programs, using the class QCommandLineParser, show a message box dialog in those cases:
The suggestion is to implement something similar in Qsynth, without migrating to QCommandLineParser.
When testing qsynth compiled with the MSVC++ compiler, pressing the "setup..." button throws this message box and dies:
It is the same problem documented here: https://docs.microsoft.com/en-us/answers/questions/240332/assert-when-using-mtd-dynamic-library.html
The problem comes because qsynth and Qt are linked to the DLL C runtime (dynamic runtime, flag /MD) but fluidsynth is linked with the static C runtime library, flag /MT).
The solution is to compile everything using dynamic or static C runtime library, but not mixing both. The easiest fix is to modify fluidsynth CMake buildsystem to make use of the DLL C runtime, because rebuilding each Qt version with the static C runtime is very time consuming.
This is the relevant part of fluidsynth's CMakeList.txt
if ( MSVC )
# statically link in the CRT library to avoid a bunch of runtime DLL dependencies and allow
# the CI windows builds to be run under WinXP
# foreach ( flag_var
# CMAKE_C_FLAGS
# CMAKE_C_FLAGS_DEBUG
# CMAKE_C_FLAGS_RELEASE
# CMAKE_C_FLAGS_MINSIZEREL
# CMAKE_C_FLAGS_RELWITHDEBINFO
# CMAKE_CXX_FLAGS
# CMAKE_CXX_FLAGS_DEBUG
# CMAKE_CXX_FLAGS_RELEASE
# CMAKE_CXX_FLAGS_MINSIZEREL
# CMAKE_CXX_FLAGS_RELWITHDEBINFO
# )
# if ( ${flag_var} MATCHES "/MD" )
# string ( REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}" )
# endif ( ${flag_var} MATCHES "/MD" )
# endforeach ( flag_var )
I will request to add a new configurable option to fluidsynth. Meanwhile, lets keep this ticket as a remainder.
Sometimes I hear a crackle sound and then I have to restart qsynth,
I get this.
And in the messages I get this:
23:31:13.622 Qsynth1: Creating synthesizer engine...
23:31:13.625 Qsynth1: Creating audio driver (jack)...
23:31:19.630 Qsynth1: Failed to create the audio driver (jack). Cannot continue without it.
ALSA lib pcm_dsnoop.c:638:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
fluidsynth: warning: SDL2 not initialized, SDL2 audio driver won't be usable
fluidsynth: error: Unknown integer parameter 'synth.dump'
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
jackd 0.125.0
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
JACK is running in realtime mode, but you are not allowed to use realtime scheduling.
Please check your /etc/security/limits.conf for the following line
and correct/add it if necessary:
@Audio - rtprio 99
After applying these changes, please re-login in order for them to take effect.
You don't appear to have a sane system configuration. It is very likely that you
encounter xruns. Please apply all the above mentioned changes and start jack again!
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
fluidsynth: error: Failed to connect to Jack server.
23:33:44.175 Qsynth1: Destroying synthesizer engine...
23:33:44.176 Qsynth1: Synthesizer engine terminated.
The program language translation at runtime is automatically loaded and can't be changed easily (you need to use some exotic environment variables).
Proposed enhancement: adding a setting and another display "Option..." to the corresponding dialog, so the user can choose comfortably his preferred language translation. Qt doesn't support changing translators at runtime, but this can be an option activated only after restarting the program.
When I open it then I can't do anything and it closes after some seconds.
I use the aut package,I am on latest arch kde wayland.
If qsynth is started programmatically or more to the point stopped with killall -term from say qjackctl run script after start and run script on shutdown. Qsynths' state is not saved because qsynth doesn't respond to unix signals.
The attached patch is a proof of concept from a non programer.
qsynth_unixSignals.txt
I hope you will consider implementing unix signals or have I missed how to control qsynth from a script.
When I try to compile on NixOS, I get the above error.
Some more context:
[ 65%] Building CXX object src/CMakeFiles/qsynth.dir/qsynth.cpp.o
/build/qsynth-0.5.5/src/qsynth.cpp:67:10: fatal error: QLocalServer: No such file or directory
#include <QLocalServer>
^~~~~~~~~~~~~~
compilation terminated.
By default, music can be generated without problems.
It fails no matter what sample rate or sample format is changed.
It fails even if set to 48000Hz,16bit.
The error message is as follows
Qsynth1: Failed to create the audio driver (wasapi). Cannot continue without it.
Other Drivers can be initialized without problems.
I thought the problem was that it is a Japanese environment,
All other Drivers can be initialized without any problem.
If I drag & drop a midi file on the GUI, it starts to play it. Sweet.
If I drag & drop a second midi file while it's playing, it keeps playing the same first one.
As an user point of view, I would expect Qsynth to switch playing the second midi file when dropped on the GUI.
When playing a MIDI file (drag & dropped, thanks ! ), I would expect the sound to shut down if I click on the "Panic" button. It doesn't happen here on version 0.4.1 .
I was hoping to try this out on OSX but I'm getting a Qt error when configuring:
checking for qtchooser... no
checking for qmake... /usr/local/opt/qt/bin/qmake
checking for Qt major version... 5
checking for Qt install path... /usr/local/Cellar/qt/5.15.0/bin
checking for qmake... /usr/local/Cellar/qt/5.15.0/bin/qmake
checking for Qt install headers... /usr/local/Cellar/qt/5.15.0/include
checking for Qt install libraries... /usr/local/Cellar/qt/5.15.0/lib
checking for Qt library version >= 5.1... no; Qt 5.1 or greater is required
Does this indicate an error in the configure script not correctly comparing minor versions 1 vs 15, or is there something I'm missing on my end?
Here is a homebrew formula to reproduce:
class Qsynth < Formula
url "https://github.com/rncbc/qsynth.git",
:tag => "qsynth_0_6_3",
:revision => "b9e5ed9d93ec9489e411ec5e006f9b6c121d18f0",
:using => :git
depends_on "autoconf" => :build
depends_on "automake" => :build
depends_on "gnu-sed" => :build
depends_on "fluid-synth"
depends_on "qt"
def install
# Requires gnu-sed on path
ENV["PATH"] = "#{ENV["HOMEBREW_PREFIX"]}/opt/gnu-sed/libexec/gnubin:#{ENV["PATH"]}"
system "./autogen.sh"
system "./configure", "--prefix=#{prefix}"
system "make", "install"
end
end
It can be installed with brew install --verbose --debug ./qsynth.rb
.
Thank you!
In src/qsynthMainForm.cpp, line 80, QSYNTH_REVERB_WIDTH_SCALE should be set to 100.0f, not 1.0f.
According to the documentation, FluidSynth uses values 0-1 for reverb width (0-100%), while Qsynth's reverb width knob goes from 0 to 100. To get 100% reverb width currently, Qsynth's width knob must be set to 1. Trying to set, say 75% reverb width is impossible as the control in Qsynth cannot accept decimal values. Values above 1 (100%) are apparently accepted by FluidSynth, but whatever those values are doing makes the reverb sound horrible.
With QSYNTH_REVERB_WIDTH_SCALE set to 100.0f, Qsynth's reverb width knob now properly represents the full range of reverb width from 0% through 100%.
As title, log window shows fluidset_reverb values changing but no reverb or chorus is heard.
set OutputMeters=false and all works as it should.
Now that fluidsynth is supporting the SF3 soundfont format, that would be great to support sf3 in Qsynth.
See: FluidSynth/fluidsynth#183
For information, Musescore and Polyphone already support it, and LMMS is getting to it LMMS/lmms#3286 .
Cheers!
The new fluidsynth-2.2.0 was released last week including a new wasapi audio driver for Windows, which is a very welcome addition because it allows lower latency than the other alternatives. Both the new wasapi audio driver and dsound support now the new_fluid_audio_driver2()
which enables the output peak level meters. Awesome!
With my hat of QSynth for Windows package provider, I'm testing a build of the current qsynth master branch, and observed:
audio.wasapi.exclusive-mode
audio.wasapi.device
already working, more or less. See below...fluidsynth: error: wasapi: cannot initialize COM. 0x80010106
The new wasapi driver calls CoInitializeEx(NULL, COINIT_MULTITHREADED)
twice (MTA mode). One in new_fluid_wasapi_audio_driver2()
and another in fluid_wasapi_foreach_device()
. The problem is that the threads affected by this call do not {belong to, have not been created by} the fluidsynth library, and could already be initialized by the client application. Indeed, Qt initializes the UI thread in STA mode. And QSynth does call every Fluidsynth API function from the UI thread.
When the wasapi driver enumerates his audio devices, it tries to initialize the running thread as MTA and aborts the enumeration if he can't. The first time fails, and the list of audio devices becomes empty. Anyway, before exiting the function it calls CoUninitialize()
. That also allows the next call to CoInitialize()
to succeed, so the audio driver can be created, and it works! The price is payed by the UI thread reinitialized as MTA, and the consequences for Qt apps that I could observe are:
Possible solutions:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.