GithubHelp home page GithubHelp logo

pedrolcl / dmidiplayer Goto Github PK

View Code? Open in Web Editor NEW
22.0 4.0 6.0 2.88 MB

Drumstick MIDI File Player Multiplatform (mirror)

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

License: GNU General Public License v3.0

CMake 6.12% C++ 83.49% Shell 0.15% QMake 0.42% Rich Text Format 9.81%
drumstick midi player linux macos windows lyrics piano-player karaoke alsa

dmidiplayer's Issues

Persistent loop setting

The Drumstick player should have a loop button that behaves similarly to other audio players. When the button is pressed, every MIDI file played from then on will loop until the button is pressed again. Thus, for example, the loop option persists across MIDI files and even when the Drumstick player is closed and opened again.

  • For this loop button, by default, the loop start and loop end should be the beginning and end of the MIDI file. The loop start and end can instead be those given in the MIDI file if the MIDI file follows certain loop-point conventions such as the so-called RPG Maker convention (see also nmlgc/ssg#25).

Currently, in order to loop the playback of a MIDI file, the Loop option must first be chosen from the File menu. The MIDI file will then loop until the MIDI file is closed or another MIDI file is opened. In order to loop the new MIDI file, the Loop option must be selected again, which I find cumbersome if I want every MIDI file I play to loop.

Saved song settings: patches locked on the channels window not applied when loading the song

Reported at https://sourceforge.net/p/dmidiplayer/tickets/19/

option "Automatically Load and Save Song Settings." turned on in Preferences. But when I load a midi file, for which I have changed the patches, it loads with those new patches selected, but it plays with the "Choir Aahs" (the patches defined in the Midi file). So the custom-chosen patch instrument is not getting loaded when the File starts playing.

Option to allow only one instance of the player running

A minor feature request to add in an option to allow only one instance of the player running. If dmidiplayer is playing a file and outputting it to MIDI port 1, for instance, opening another midi file will, instead of replacing the currently playing file, start up another instance of the player and start outputting to the same port. Can the player (or ALSA) detect that a MIDI port is currently being used to prevent midis from trampling over each other?

High density of MIDI events slows down playback tempo

Where there are a lot of MIDI events (for example, rapid MIDI CC modulation), dmidiplayer slows the tempo down, sometimes considerably so. This happens regardless if sending MIDI to an external player or using the internal FluidSynth. When this happens, the player's CPU usage remains quite low, so it doesn't seem to be a CPU limitation.

I have attached dmidiplayer event density test.zip for reproducing the issue. It contains the following files:

  • dmidiplayer event density test.mid – This MIDI file should play at 138 BPM, but it plays significantly slower than that. The metronome lights in dmidiplayer, however, still tick at 138 BPM. The culprit is the fast CC7 modulation on channels 1 and 2. If you remove these events, dmidiplayer will play correctly at 138 BPM.
  • midi event density test-FluidSynth.ogg – This is the density test MIDI played using the FluidSynth command-line sequencer. The tempo is correct.
  • midi event density test-dmidiplayer.ogg – This is the density test MIDI played using dmidiplayer routed to Qsynth. The tempo is too slow.

The SoundFont used in the recordings is the release candidate for GeneralUser GS v2.0.0, but any GM/GS SoundFont should suffice for testing this bug. Also, this bug happens in both Linux and Windows on my system, which is detailed below.

My System

  • dmidiplayer: 1.7.3
  • OS No.1: KDE Neon 6.0 User Edition (Plasma Desktop 6.1.2, KDE Frameworks 6.3.0, Qt 6.7.0)
  • OS No.2: Windows 10 Home Edition
  • OS No.3: Windows 10 Professional running in Virtualbox under KDE Neon
  • CPU: Intel Core i7-990x Gulftown (3.46 GHz hexa-core, Socket 1366) @ 4.15 GHz

Crash when loading a MIDI file while another song is playing

Opened from https://sourceforge.net/p/dmidiplayer/tickets/19/

  1. Load a File into the Midi Player.
  2. While it is playing, go to the File menu, Open Recent Files, and pick another one. If the player doesn't crash, repeat the process.
    It should crash either the first time you load a recent file, or the second time.
    NOTE: You have to load the Recent File while the player is playing. If you stop or pause the song, it does not crash while loading a new one. So I think you just need to introduce a "stop" command to the Midi player, before the new song loads, and it should fix this.

Feature Request: Count in

Feature Request:

Proposal: Use a separate "count in" midi file so that I can generate a click track before the song midi file plays.

Use Case: I practice using this app as a drum machine that plays drum midi files for each song. I need a count in so that I can start playing at the right time along with the drum track.

Investigate other encoding detection options

Currently, we use uchardet to detect lyrics encoding. This library is a (not very well maintained) fork of Mozilla's chardet. Alternatives:

The problem with most of the above alternatives is that the web requirements may not be the same as MIDI lyrics.

Hanging note if dmidiplayer is closed using the close window button during playback

As the title says, if dmidiplayer is closed using the close window button on the window while a MIDI file is playing the last note will be left hanging/playing indefinitely or until playback is restarted and stopped manually. If the player is closed through File->Quit then the playback is stopped automatically before the application closes.

Reproducible with version 1.7.3 on ArchLinux running KDE Plasma.

ability to load several soundfonts

Pedro - got it. Thanks for the timely response. And thanks for this app.

If you are looking for enhancement suggestions - the ability to load several soundfonts would be great as I have a few different ones for different instruments; and sometimes I have MIDI files where I want to use different .sf2 files for different parts (MIDI tracks).

But again, thanks for helping with my question.

Originally posted by @JeffRocchio in #18 (comment)

Window size too small at start up. Remember window size.

Plasma 6, Wayland, fractional scaling. The app's window is always this size when launched.

image

And it doesn't remember the window size, so i have to resize it every single time I start it.

It has to either set the initial size properly, or remember the window size.

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.