Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zephkek/midiplusplus

A High Performance piano auto player for Roblox, with advanced transposition capabilities and advanced set of features.
https://github.com/zephkek/midiplusplus

auto-player cpp roblox virtual-piano windows-10 windows-11

Last synced: 6 days ago
JSON representation

A High Performance piano auto player for Roblox, with advanced transposition capabilities and advanced set of features.

Awesome Lists containing this project

README

        

[//]: # (
SEO Metadata:

)

# MIDI++ for Roblox

*Advanced MIDI Playback for Roblox Pianos*

[![Release](https://img.shields.io/github/v/release/Zephkek/MIDIPlusPlus?style=for-the-badge&logo=github&color=blue)](https://github.com/Zephkek/MIDIPlusPlus/releases)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=for-the-badge)](https://www.gnu.org/licenses/gpl-3.0)
[![Stars](https://img.shields.io/github/stars/Zephkek/MIDIPlusPlus?style=for-the-badge&logo=github)](https://github.com/Zephkek/MIDIPlusPlus/stargazers)
[![Issues](https://img.shields.io/github/issues/Zephkek/MIDIPlusPlus?style=for-the-badge&logo=github)](https://github.com/Zephkek/MIDIPlusPlus/issues)
[![Download Now](https://img.shields.io/badge/Download%20Now-▼-brightgreen?style=for-the-badge&logo=github&logoColor=white)](https://github.com/Zephkek/MIDIPlusPlus/releases/latest)

---

## Overview

MIDI++ is a high-performance C++ application designed for playing MIDI files on Roblox pianos with exceptional accuracy and speed. It offers unparalleled precision and advanced features for music enthusiasts and Roblox players.

## Key Features
- **Powerful MIDI Parser**: Rapidly processes MIDI files, handling complex structures and corrupted data with ease for reliable playback.
- **Transpose Engine**: Intelligent key detection, genre-specific transposition, and advanced harmonic analysis
- **Performance Optimization**: C++ architecture, high-capacity data handling, nanosecond precision timing
- **MIDI-to-QWERTY Conversion**: Seamless Roblox piano integration with customizable key mappings
- **Tempo Management**: Real-time adjustments with smooth transition handling
- **Volume Control**: Velocity-sensitive playback and dynamic volume modulation
- **Authenticity Mode**: Simulated human-like performance with adjustable realism settings
- **Extended Functionality**: Sustain pedal support, 88-key mode, automatic MIDI file error correction
- **Advanced Analysis**: Chord and rhythm pattern recognition, harmonic structure analysis
- **System Optimization**: Efficient event handling, custom memory pools, lock-free queues, SIMD acceleration using manual vectorization in critical parts of the code to ensure these parts are always optimized.
- **Customization**: Flexible configuration options

## Technical Superiority

- Utilizes advanced data structures and algorithms for optimal performance
- Features custom memory management for reduced overhead
- Employs lock-free programming techniques for enhanced concurrency
- Optimizied to the max with branch prediction and PGO

## Showcase:
| [![Stress Test N°1 7m Notes](https://img.youtube.com/vi/aAmGCW7o55c/0.jpg)](https://www.youtube.com/watch?v=aAmGCW7o55c) | [![Features Showcase](https://img.youtube.com/vi/ajsBSaO1icQ/0.jpg)](https://www.youtube.com/watch?v=ajsBSaO1icQ) |
|---|---|
| Stress Test N°1 7m Notes (Loud) | Transposition Engine Test |

## Installation

1. Install Microsoft Visual C++ Redistributable (x64) from [here](https://aka.ms/vs/17/release/vc_redist.x64.exe)
2. Download MIDI++ from the [Release Page](https://github.com/Zephkek/MIDIPlusPlus/releases/tag/v1.0.2)
3. Extract the package and place MIDI files in the "midi" folder
4. Launch MIDI++ to begin

## System Requirements

- Windows 10 or later (64-bit)
- AVX2 supported CPU (Generally any CPU that's not older than 2013)
- Microsoft Visual C++ Redistributable 2022 (x64)
- 100MB free disk space

## Features Usage Guide:

The following table explains the settings used in the `LEGIT_MODE_SETTINGS` JSON object:

| Setting | Type | Description |
|---------|------|-------------|
| ENABLED | Boolean | • Activates/deactivates Authenticity Mode
• When true, all other settings become active, and will load the MIDI file in legit mode |
| TIMING_VARIATION | Float
(0.0 to 1.0) | • Introduces timing deviations to each note
• 0.1 means ±10% variation in note timing
• Example: A note at 1.000s might play between 0.900s and 1.100s |
| NOTE_SKIP_CHANCE | Float
(0.0 to 1.0) | • Sets probability of missing a note
• 0.02 means 2% chance to skip any given note
• Simulates human errors in fast or complex passages |
| EXTRA_DELAY_CHANCE | Float
(0.0 to 1.0) | • Likelihood of inserting a pause between notes
• 0.05 means 5% chance of adding delay after a note
• Mimics human hesitation or breaths |
| EXTRA_DELAY_MIN | Float
(seconds) | • Minimum duration for random delays
• Should be ≤ EXTRA_DELAY_MAX |
| EXTRA_DELAY_MAX | Float
(seconds) | • Maximum duration for random delays
• Defines upper limit for added pauses |

## Example Configuration

```json
{
"LEGIT_MODE_SETTINGS": {
"ENABLED": true,
"TIMING_VARIATION": 0.1,
"NOTE_SKIP_CHANCE": 0.02,
"EXTRA_DELAY_CHANCE": 0.05,
"EXTRA_DELAY_MIN": 0.05,
"EXTRA_DELAY_MAX": 0.2
}
}
```
# Volume Settings

| Setting | Value | Description |
|---------|-------|-------------|
| MIN_VOLUME | 10 | • Minimum allowed volume level
• Represents 10% of maximum volume |
| MAX_VOLUME | 200 | • Maximum allowed volume level in your game
• Represents 200% of normal volume by default |
| INITIAL_VOLUME | 100 | • Starting volume level on initialization
• Represents 100% or "normal" volume |
| VOLUME_STEP | 10 | • Increment/decrement step for volume adjustments
• Each adjustment changes volume by 10 units by default |
| ADJUSTMENT_INTERVAL_MS | 50 | • Minimum time between volume adjustments
• Prevents changes more frequent than every 50 milliseconds by default|

## JSON Configuration

```json
{
"VOLUME_SETTINGS": {
"MIN_VOLUME": 10,
"MAX_VOLUME": 200,
"INITIAL_VOLUME": 100,
"VOLUME_STEP": 10,
"ADJUSTMENT_INTERVAL_MS": 50
}
}
```
## Acknowledgements

### Special Thanks

Special thanks to these cool individuals for their invaluable contributions and support:
- **Raven**
- **Anger**
- **Gene**

Your dedication and expertise have been crucial to the development of MIDI++.

### External Libraries

MIDI++ leverages the power of these outstanding open-source libraries:


Library
Description



moodycamel Concurrent Queue


A fast multi-producer, multi-consumer lock-free concurrent queue for C++11




nlohmann's JSON for Modern C++


A JSON library for Modern C++

These high-quality libraries have significantly enhanced MIDI++'s functionality and performance, Kudos to their creators.

## License

This project is licensed under the GNU General Public License v3.0 (GPLv3).

This license allows you to:
- Use the software for any purpose
- Change the software to suit your needs
- Share the software with your friends and neighbors

This license requires you to:
- Share the source code when you distribute the software
- License any modifications under GPLv3
- Keep intact all copyright, license, and disclaimer notices

This license explicitly forbids:
- Distributing the software without the source code
- Using the software as part of a proprietary product

For more details, see the [LICENSE](LICENSE) file in this repository or visit [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html).
---