I’m really interested in cross-platform midi programming, but I really missing QMidi class something like RtMidi. I hope It will be part of the QtMultimedia package soon.
You mean small market like Ableton Live, ACID Pro, Adobe Audition, Cakewalk Sonar, FL Studio, GarageBand, Logic Pro, MAGIX, Pro Tools, Reason, Steinberg Cubase, Steinberg Nuendo or linux based apps Ardour, LMMS, MusE, Qtractor, Rosegarden. I mention the musical instruments vendors like Roland, Yamaha, Akai, Korg, Access, Waldorf, Native Instruments and many midi controller manufacturer what creates patch editors etc.
I am by no means saying that there is no market for MIDI at all, just that I doubt there is a market for a special, platform independent API within Qt for MIDI. If you see the apps you mention yourself, it is clear that to create a MIDI capable app, you don’t really need Qt to support it directly. Rosegarden for instance is Qt based. But hey, I am not a Troll, but a mere Qt user, so there is a good chance that my opinions on this differ from those living at Nokia.
Just subscribed to DevNet to discuss this very issue: Me too I miss both QMidi as well as QPcm classes where the latter would be for raw PCM audio I/O. Currently it seems that the multimedia framework can only playback files. However MIDI-triggered Real Time synthesis does not seem to be covered. There are ways to do this outside of QT by e.g. using the JACK audio connection kit. However it would be much nicer to have convenient classes within the QT framework. Happy to support this with proof of concept softsynth code if this should get implemented. Have done similar things in my ALSA Programming Howto.
MIDI and USB support both represent huge holes in Qt’s family of APIs.
Does anyone have a pointer for classes designed to target Qt, but which are created by end users?
I’ve written several generally useful classes I’d be willing to contribute, and I would hope to find MIDI and USB there considerably sooner than I’d expect any support from the actual Qt folks.
For my own Linux only MIDI projects, I’ve created a library, Drumstick [drumstick.sf.net] as a wrapper for the ALSA Sequencer API based on Qt4. It is the basement of my projects KMetronome [kmetronome.sourceforge.net] and KMidimon [kmidimon.sourceforge.net] and maybe in the future will be extended to other operating systems.
On the other hand, for my multiplatform project VMPK [vmpk.sourceforge.net] I’ve used RtMIDI. These classes are not really hard to use in a Qt4 project, but the functionality is really limited: as the name implies, it offers only real-time MIDI input/output.
I’ve tried to include RtMIDI, it compiled ok, but in the link stage, it throws errors I don’t know how to resolve (kind of a C++ newbie here… still finding my way.) Here’s what I get:
- Undefined symbols:
- "vtable for RtMidiOut", referenced from:
- __ZTV9RtMidiOut$non_lazy_ptr in RtMidi.o
- (maybe you meant: __ZTV9RtMidiOut$non_lazy_ptr)
- "RtMidiOut::initialize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
- RtMidiOut::RtMidiOut(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in RtMidi.o
- "vtable for RtMidiIn", referenced from:
- __ZTV8RtMidiIn$non_lazy_ptr in RtMidi.o
- (maybe you meant: __ZTV8RtMidiIn$non_lazy_ptr)
- "RtMidiIn::initialize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
- RtMidiIn::RtMidiIn(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)in RtMidi.o
- ld: symbol(s) not found
- collect2: ld returned 1 exit status
- make: *** [release/SdrDx.app/Contents/MacOS/SdrDx] Error 1
- make: Leaving directory `/Users/username/src/sdrdx'
- The process "/usr/bin/make" exited with code 2.
- Error while building project SdrDx (target: Desktop)
- When executing build step 'Make'
I’ve no idea where to even start dealing with those messages. Can you point me in a proper direction?
NM, found it — the define…
…wasn’t being passed along verbatim, probably some extra underscores (or fewer, whatever) in the process of passing it from the project file to the code. I #defined it in the actual source file, and it compiled with only a few warnings (unused parameters to functions), which I fixed.