Skip to content

jxmorris12/synthviz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

synthviz

synthviz is a library for creating visualizations of piano-playing from MIDI files. The videos look like this:

entertainer.mp4

Right now, synthviz just provides a Python API. Command-line API is hopefully coming soon!

Requirements

system requirements

You'll need to install a couple of tools that make rendering this video possible:

  1. ffmpeg (creates video from audio and image video frames) - on Ubuntu, sudo apt-get install ffmpeg
  2. timidity (synthesizes piano audio from MIDI) - on Ubuntu, sudo apt-get install timidity

python package requirements

Install this package via pypi:

pip install synthviz

Usage

You can use synthviz through the Python API:

from synthviz import create_video

create_video('river.midi') # provide str path of MIDI file

Options

The create_video function provides a lot of of options:

def create_video(input_midi: str, 
		video_filename = "output.mp4",
		image_width	= 1280,
		image_height = 720,
		black_key_height = 2/3,
		falling_note_color = [75, 105, 177], # default: darker blue
		pressed_key_color = [197, 208, 231], # default: lighter blue
		vertical_speed = 1/4,
		fps = 20
	) 
  • input_midi (str): path to MIDI file
  • video_filename (str): path to output video, synthviz will write the video here
  • image_width (int): width of output video in px
  • image_height (int): height of output video in px
  • black_key_height (float): height of black keys as a percentage of piano height
  • falling_note_color (Tuple[int]): color of falling keys in video, list of three RGB integers
  • pressed_key_color (Tuple[int]): color of pressed-down keys in video, list of three RGB integers
  • vertical_speed (float): the speed of the falling keys, fraction measured as main-image-heights per second
  • fps (int): frames-per-second of output video

Creating video from raw audio

With the help of the piano_transcription_inference library, you can make a cool video directly from raw audio!

First, install that library via pip install piano_transcription_inference. Then run the following code:

import librosa
import os
import pathlib

from piano_transcription_inference import PianoTranscription, sample_rate, load_audio
from synthviz import create_video

audio_input = 'my_audio.mp3'
midi_intermediate_filename = 'transcription.mid'
video_filename = 'output.mp4'

transcriptor = PianoTranscription(device='cuda', checkpoint_path='./model.pth')
audio, _ = librosa.core.load(str(audio_input), sr=sample_rate)
transcribed_dict = transcriptor.transcribe(audio, midi_intermediate_filename)
create_video(input_midi=midi_intermediate_filename, video_filename=video_filename)

Credits

The synthviz library was originall adapted from this blog post, "Making Synthesia-style videos in Ubuntu", written by David Barry. Thanks David!

About

visualize MIDI files from piano MIDI or audio

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published