Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zac-dot/pianotoy
A small application called Piano Toy that plays notes and uses GTK for the UI
https://github.com/zac-dot/pianotoy
cplusplus-11 gtk gui
Last synced: about 2 months ago
JSON representation
A small application called Piano Toy that plays notes and uses GTK for the UI
- Host: GitHub
- URL: https://github.com/zac-dot/pianotoy
- Owner: Zac-dot
- Created: 2022-12-03T03:30:48.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-02-20T05:57:43.000Z (almost 2 years ago)
- Last Synced: 2024-11-19T14:07:00.900Z (about 2 months ago)
- Topics: cplusplus-11, gtk, gui
- Language: C++
- Homepage:
- Size: 20.6 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Pianotoy in C++ using GTK
![Pianotoy Example](pianotoyexample.gif)
---
# Prerequisites
1. About the Program
2. Running the Application
1. via building the source files
2. via running the .exe file
3. Parts of the application
4. Oddities---
## 1. About the ProgramThis is meant to be a simple program to demonstrate my abilities to use
C++ and the GTK UI framework to display a UI. It is a simple small keyboard that displays 7 buttons,
each of which plays a *.wav audio file when pressed. Each key has a letter on it corresponding to the note to play.
The pitch of the notes that are played can be altered through the ```Note``` button in the menubar.The program was also used as a final project for my C++ class, specifically CS 361.
As such, some additional features were added in order to hit what was required, such as the ```Shapes``` button in the menubar.
While these do not have much to do with a keyboard, they were added for that reason, and can be removed if desired.---
## 2. Running the ApplicationIn order to run the application, it requires a Windows installation with
```MSYS2 MINGW64```installed. For either 2.1 or 2.2, the following
must be downloaded and prepped in the ```MSYS2 MINGW64``` environment.To prep you must open the ```MSYS2 MINGW64```terminal and run the following commands:
```bash
pacman -S mingw-w64-x86_64-gtk4
pacman -S mingw-w64-x86_64-toolchain base-devel
``````
### 2.1 via building the source files
- Download the source files from where ever you got them from
- Unzip the source files
- The files must be set as follows
```
src
├── main.cpp
├── shapes.h
├── audio.h
└── pianokeys
└── *Holds audio files in .wav*
```
- Then the main.cpp file can be ran from IDE of choice
- **You must set up the environment to use the ```MSYS2 MINGW64``` environment**
- In CLion you can do this by
- Changing the environment in the settings by going to
```File > Settings > Build, Execution, Deployment > Toolchains```
- Then you can add a new toolchain by clicking the ```+``` button
- Then you can select the ```MSYS2 MINGW64``` by changing Toolset to point to ```C:\msys64\mingw64```
- CLion will automatically detect the build tool, C compiler, and C++ compiler at this point
- Then you can click ```OK``` and then ```Apply```
- Make sure the toolchain is at the top of the list!
### 2.2 via running the .exe file
- Download the files and extract them to a folder.
- Open the ```MSYS2 MINGW64``` terminal and navigate to the folder.
- ex: ```cd C:\Users\user\MyCppProgram```
- Run the program from the directory by doing:
```bash
{path to the folder}/cppproject.exe
``````
---## 3. Parts of the application
The main application uses GTK4 to create the GUI. The GUI is made up of 3 main parts.
- The main window
- The piano keys
- A series of buttons that play a note when clicked
- The menubar
- A menu bar that has a few options
- ```Note``` - Displays a menu that lets you change note pitches
- ```Note > * Pitch``` - Changes the note pitch to the number (*) selected
- ```Shapes``` - Displays a menu that will draw a shape in console
- ```Shapes > Diamond``` - Draws a Diamond in console using * as the character
- ```Shapes > Triangle``` - Draws a right triangle using a recursive function, using * as the character
---## 4. Oddities
#### Why shapes in console?
- This is mainly to hit a pre-requisite for the class, as it requires shapes in console drawn, using recursive
or nested functions.#### Why is the audio not working?
- Make sure the audio files are in the structure as shown in 2.1. **It is also required that you are running
Windows**, if you do not, then there is a chance audio will not play without changing the source code.#### Why does ```Gtk-CRITICAL **: xx:xx:xx.xxx: gtk_main_quit: assertion 'main_loops != NULL' failed``` show up in the console?
- This is because clicking the ```X``` button is undefined in the program. GTK will try to insinuate its to close
the program, and thus will throw the error. This is not a problem, and can be ignored.#### Must the program be ran in the ```MSYS2 MINGW64``` environment?
- At this point in time, the program must be ran in the environment. While it is possible to generate a exe file
that will not require the environment, it is not currently set up to do so. This would require alot more time
out of my schedule that I do not have at this time. This can, however, be done later or by a user if wanted.