Coder Social home page Coder Social logo

rncbc / qsynth Goto Github PK

View Code? Open in Web Editor NEW
58.0 8.0 18.0 3.13 MB

Qsynth - A fluidsynth Qt GUI Interface

Home Page: https://qsynth.sourceforge.io

License: GNU General Public License v2.0

CMake 6.09% Shell 0.13% C++ 84.56% C 0.27% Roff 1.23% Rich Text Format 7.71%

qsynth's Introduction

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>

qsynth's People

Contributors

buzzdeee avatar h3xx avatar mchehab avatar pedrolcl avatar rncbc avatar trebmuh avatar xiaoxi-ij478 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qsynth's Issues

Impossible to increase gain above ui maximum

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

configure: error: *** FLUIDSYNTH library not found.

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?

Problem with jack implomentation

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?
screenshot at 2018-12-29 09-17-13

Add support for building with ninja after cmake

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.

soundfont drag & drop ?

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?

Can't select a new instrument

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.

Cmake build system checks for Qt5X11Extras

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 :)

init ladspa's on channel(s) as part of patch

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?

DLS sound fonts can't be added

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.

Non existing signals when compiling with Qt6

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

(Request) synth.device-id to be variable

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.

Even channels do not play back through JACK when audio group number is set to 2

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.

Unable to play any video while Qsynth is active

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.

Display active MIDI Port

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".

There is no configure file

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

Qsynth doesn't work with Jack with more than 2 stereo channels

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:

mchehab@8f7dabc

Pull request: #35

Bank Offset should accept values greater than 128

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.

No terminal output in Windows

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:

vmpk_help

The suggestion is to implement something similar in Qsynth, without migrating to QCommandLineParser.

Windows: runtime error (assertion failed) in qsynth compiled with MSVC

When testing qsynth compiled with the MSVC++ compiler, pressing the "setup..." button throws this message box and dies:

qsynth_runtime_error_20210410

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.

I can't hear music in game,but don't get an error message

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.

Change the UI language translation

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.

Feature request implement unix signals in qsynth

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.

fatal error: QLocalServer: No such file or directory

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.

Device initialization fails when audio driver is set to WASAPI and output destination is other than default.

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.
setup-audio-device 0 9 90

drag & dropping a MID file, and once again

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.

Panic button when playing a midi file

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 .

Build error on OSX with QT 5.15

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!

Incorrect scale value for reverb width

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%.

SF3 support

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!

Problems integrating fluidsynth-2.2.0 with the new wasapi audio driver in windows

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:

  • New setting not yet available in the GUI:
    • audio.wasapi.exclusive-mode
      0 = shared mode, 1 = exclusive mode
    • there is also audio.wasapi.device already working, more or less. See below...
  • there is this message in the console at startup:
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:

  • QSynth does not accept dropped files from the explorer anymore, so MIDI files can't be played this way.
  • Open/Save file dialogs do not work. Neither the open soundfont button, nor the import/export/save color themes can be used, and the UI freezes.

Possible solutions:

  • Move the affected API function calls to a background thread (I've already done this in my Drumstick fluidsynth backend).
  • Avoid the new driver or even the new version, until this issue is fixed in fluidsynth.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.