{"id":20754224,"url":"https://github.com/rainbow-dreamer/sfplayer","last_synced_at":"2025-04-28T16:28:52.862Z","repository":{"id":65839461,"uuid":"432783221","full_name":"Rainbow-Dreamer/SfPlayer","owner":"Rainbow-Dreamer","description":"This is an easy-to-use SoundFont player that supports playing MIDI files using SoundFont files","archived":false,"fork":false,"pushed_at":"2025-02-09T08:51:14.000Z","size":132452,"stargazers_count":22,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T11:22:55.156Z","etag":null,"topics":["midi","music","musicpy","python","sf2","soundfont","soundfonts"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rainbow-Dreamer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-28T17:47:13.000Z","updated_at":"2025-02-09T08:51:18.000Z","dependencies_parsed_at":"2025-02-02T17:31:21.496Z","dependency_job_id":null,"html_url":"https://github.com/Rainbow-Dreamer/SfPlayer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rainbow-Dreamer%2FSfPlayer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rainbow-Dreamer%2FSfPlayer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rainbow-Dreamer%2FSfPlayer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rainbow-Dreamer%2FSfPlayer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rainbow-Dreamer","download_url":"https://codeload.github.com/Rainbow-Dreamer/SfPlayer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251345242,"owners_count":21574672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["midi","music","musicpy","python","sf2","soundfont","soundfonts"],"created_at":"2024-11-17T09:16:38.534Z","updated_at":"2025-04-28T16:28:52.855Z","avatar_url":"https://github.com/Rainbow-Dreamer.png","language":"Python","funding_links":["https://patreon.com/rainbow_dreamer"],"categories":[],"sub_categories":[],"readme":"# SfPlayer\n\n## Introduction\n\nSfPlayer is a simple SoundFont player that has the following functionality:\n\n* Loading MIDI files and SoundFont files, play MIDI files with the loaded SoundFont files\n* Drag and drop support of MIDI files and SoundFont files\n* Support Standard MIDI File (SMF) and RIFF MIDI file for MIDI files, sf2 / sf3 / dls for SoundFont files\n* MIDI playback bar with full time control and pause / unpause / stop functionality\n* Volume and BPM control widgets\n* MIDI CC and pitch bend control widgets\n* Tempo changes in MIDI file reflect directly on the BPM control bar\n* Reverb and chorus parameters control widgets\n* Change the instruments of MIDI channels to what you like when playing\n* Program changes in MIDI file reflect directly on the instrument box\n* Export rendered audio of MIDI file with the SoundFont file it plays with to mp3 / wav / ogg files and so on\n* Detect the most possible main key of the MIDI file using music theory algorithm\n* Perform an entire modulation from a mode to another mode on the MIDI file and play\n* Play the MIDI file in reverse\n* Play the MIDI file as if it is played on a 88-key piano but the piano keys are reversed\n* Play the MIDI file in negative harmony of a given key\n* More functionality is on the way!\n\n\n## Usage\n\n### Platform\n\nSfPlayer currently only supports Windows, you can open `SfPlayer.exe` to use the software. On Linux and macOS, you can install python \u003e= 3.7 and install the required packages (refer to building from source section)  to run the program.\n\n### Switching pages\n\nGo to different pages by selecting on tabs at the top to use functionality related to the page's name.\n\n### Playback\n\nClick on `Choose MIDI File` button to select a MIDI file, click on `Choose SoundFont File` button to select a SoundFont file, and then click on `Play` button to start the playing of the MIDI file using the SoundFont file. \n\nYou can also drag and drop the MIDI file and SoundFont file to the window, it will automatically detect the file extension and load as MIDI file or SoundFont file.\n\nClick on the `Play` button to start playing the MIDI file with the loaded SoundFont file, the other playing related button are used in the way they name.\n\nClick on the playback bar or mouse drag to change the current playing position of the MIDI file.\n\n### Synth Settings\n\nThis part is straightforward, for the control parameters like `MIDI CC` or `pitch bend`, when you select a new MIDI CC value or new channel number, the values will be updated as the current control value of the channel.\n\nThe `Volume` control widget is the general volume of the synth used to play the MIDI file with the loaded SoundFont file.\n\nThe `BPM` control widget will be automatically updated as the real-time BPM of the MIDI file when playing.\n\n### Music Functions\n\nThe current instrument of each channel of the MIDI file when playing is shown in the `Instrument` box here, you can click on the `Channel` box to select a channel number, the current program and bank of the channel will be shown in the `Program` and `Bank` box.\n\nYou can change the current program and bank of the selected channel in the `Program` and `Bank` box.\n\nIn the `Instrument` box, the instrument names are the actual preset name of the corresponding program in the SoundFont file you use to play, while the instrument names in the `Instrument` box are the corresponding program names of the General MIDI standard.\n\nFor modulation of the MIDI file, you can enter modes like `C major` in the `From mode` and `to Mode` entry box, the note name supports both uppercase and lowercase, sharp and flat, but you need to make sure to have a space between the note name and the mode name. The supported modes are defined in `packages/musicpy/database.py` as the parameter `scaleTypes`, you can customize the supported modes by adding the new mode with the mode name and the intervals.\n\n### Playlist\n\nYou can choose a directory to play a random MIDI file from the directory.\n\n### Messages\n\nThe message at the bottom is used for showing errors when users are not doing correct.\n\n## Download\n\nClick [here](https://github.com/Rainbow-Dreamer/SfPlayer/archive/refs/heads/main.zip) to download the latest version of SfPlayer.\n\n**Note: If you want to use `Export As Audio` function to export non-wav audio files (such as mp3, ogg), you need to download ffmpeg,\nput the ffmpeg folder in C: on Windows, and then add `C:\\\\ffmpeg\\\\bin` to system environment variables, then restart the computer.\nYou can download ffmpeg from [here](https://github.com/Rainbow-Dreamer/musicpy/releases/latest)**\n\n\n## TODO\n\n* Adding more functionality related to music theory algorithm\n* Make the user interface more organized and straightforward\n\n\n## Previews\n\n![image](previews/1.jpg)\n\n![image](previews/2.jpg)\n\n![image](previews/3.jpg)\n\n![image](previews/4.jpg)\n\n## Building from source\n\nIf you cannot open `SfPlayer.exe` on your current pc and system, you can try to compile from source. Here are the steps.\n\n1. install python \u003e= 3.7\n2. open cmd, run `pip install pyqt5, sf2_loader, dataclasses, pyinstaller`\n3. copy and paste the file `player start program.pyw` from `SfPlayer-main/packages` folder to `SfPlayer-main` folder, change the line `abs_path = os.path.dirname(os.path.abspath(__file__))` to `abs_path = os.path.dirname(sys.executable)`\n4. under `SfPlayer-main` folder, open cmd, run `pyinstaller -w -F \"player start program.pyw\" --hidden-import dataclasses` to start creating executable\n5. when the compiling is finished, go to `SfPlayer-main/dist` folder, you will see an executable file there, rename it to `SfPlayer.exe`, copy and paste the exe file to SfPlayer-main folder, replacing the old exe file\n6. now you can open the new exe file to open the software\n\n## Donation\n\nThis project is developed by Rainbow Dreamer on his spare time. If you feel this project is useful to you and want to support it and it's future development, please consider sponsor this project by clicking the sponsor button, it would help me out a lot.\n\n[![GitHub Sponsor](https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026color=%23fe8e86)](https://patreon.com/rainbow_dreamer)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frainbow-dreamer%2Fsfplayer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frainbow-dreamer%2Fsfplayer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frainbow-dreamer%2Fsfplayer/lists"}