This is a python package that turns any images into MIDI files that views the same as them

Overview

image_to_midi

This is a python package that turns any images into MIDI files that views the same as them.

This package firstly convert the image to ASCII characters by pixels in terms of gray scale, and then convert each pixel of the image to a note with a MIDI channel (0 - 15) based on the color depth of the pixel, which is corresponding to the index of the converted ASCII character of that pixel at the ASCII character set defined by the user. By default, the ASCII character set is sorted from highest to lowest density, in this standard, the deeper the color depth of a pixel is, the smaller the MIDI channel number of the note is. For example, the pixel with the lightest color of the image will map to MIDI channel 15, while the deepest color will map to MIDI channel 0.

The default ASCII character set is

[email protected]%W$E#RK&FXYI*l]}1/+i>"!~\';,`:.

For the direction of the note transformation through the images, there are basically 2 directions, one is for viewing in a DAW, and the another one is for viewing in a piano roll software with a waterfall effect (dropping from the top). You can also customize the rotation angle of the image to transform, together with whether to flip the image or not.

Note: Each pixel of the image will convert to a note with a MIDI channel based on its color depth, the deeper the pixel's color depth is, the smaller the MIDI channel number of the note it corresponds to is, you should customize the colors corresponding to MIDI channels 0 - 15 from deepest to lightest in order to get the best viewing result when you put the resulted MIDI files in DAW or piano roll software.

Installation

You can use pip to install this package, run this line in cmd/terminal to install.

pip install image_to_midi

Importing

import image_to_midi as im

Usage

Firstly we will talk about the conversion parameters of this pacakge.

This package uses a dictionary called config_dict to store the image conversion parameters, which are

  • ascii_character_set: The ASCII character set that ranges from deepest to lightest color depth. The default value is [email protected]%W$E#RK&FXYI*l]}1/+i>"!~\';,`:.

  • resize_ratio: The resize ratio of the image to convert, could be an integer or a float, the smaller it is, the larger the image will be resized to, for example, 1 is for no resizing, 0.5 is for resize as 2 times large, 2 is for resize as 2 times small. The default value is 1

  • bit_number: The bit number the image will be converted as gray scales. The default value is 8

  • image_width_ratio: the width resize ratio of the image. The default value is 1

  • image_height_ratio: the height resize ratio of the image. The default value is 1

You can change these parameters by updating the values of the corresponding keys of config_dict. For example,

im.config_dict['resize_ratio'] = 2

Then we will talk about how to convert images to MIDI files using this package. You can use image_to_midi function to convert an image to a MIDI file.

Note: the return value of this function is a musicpy's chord instance, you can use musicpy's write function to write the return value to a MIDI file.

image_to_midi(path,
              direction=0,
              max_keys=100,
              line_interval=1 / 16,
              remapping_colors=None,
              filter_value=None,
              extra_interval=0,
              adjust_scale=None,
              rotate=None,
              whole_reverse=False,
              each_line_reverse=False,
              start='C0')
  • path: the file path of the image

  • direction: there are 3 direction modes: 0, 1, other values
    0: from left to right, used in daw representation
    1: from buttom to top, used in piano roll representation
    other values: you can custom the rotation angle of the images and whether reverse the image ascii list and each line or not

  • max_keys: the maximum key number the MIDI file has, when converting the image, if the line has more pixels than this parameter, then the excess part will be cut off

  • line_interval: the duration of notes of each line of pixels of the image, the unit is bar of 4/4 time signature

  • remapping_colors: you can pass in a dictionary to remap the MIDI channel numbers to a new order of MIDI channel numbers

  • filter_value: you can set a tuple (or a list) (a, b) to filter the ASCII characters to convert which index at the ASCII character set satisfies a <= index < b

  • extra_interval: you can set this value if you want to have extra spaces between each 2 adjacent lines of notes

  • adjust_scale: adjust the notes of each line of pixels to a scale like C major, D mixolydian, it will filter out the notes that does not belong to the scale of each line of notes, this value must be a musicpy's scale instance

  • rotate: when the parameter direction is set to a value that is not 0 or 1, you can set this value to specify the rotation angle of the image to convert, the rotation angle is clockwise for positive number, counterclockwise for negative number

  • whole_reverse: when the parameter direction is set to a value that is not 0 or 1, you can set this value to specify whether to reverse the lines of pixels of the image

  • each_line_reverse: when the parameter direction is set to a value that is not 0 or 1, you can set this value to specify whetehr to reverse each line of pixels of the image

  • start: the starting note pitch of the conversion, which is the lowest note pitch of the resulted chord type, could be a string that represents a note pitch like A0, C1, or an integer for MIDI note number

You can use musicpy's write function to write the return value of this function to a MIDI file.

result = im.image_to_midi('1.jpg')
im.write(result, name='1.mid')

Some extra notes

The default starting note pitch of the conversion is C0, which corresponds to MIDI note number 12. (If it starts from 0 then we will have some notes has pitch like B-1, which cannot be shown in most DAW and piano roll softwares)

If you would like to fit the resulted MIDI files into a standard 88-key piano which has pitch range A0 to C8, it is easy to set the max_keys parameter to 88 and the start parameter to A0 when you are using image_to_midi function to get the desired result.

You can also concatenate multiple resulted chord types converted from different images to output MIDI files with multiple viewable images. The syntax of concatenating 2 chord types is chord_c = chord_a | chord_b, to concatenate a list of chord types, you can write chord_c = im.concat(list_of_chord_types, mode='|')

You might also like...
A lightweight yet powerful audio-to-MIDI converter with pitch bend detection
A lightweight yet powerful audio-to-MIDI converter with pitch bend detection

Basic Pitch is a Python library for Automatic Music Transcription (AMT), using lightweight neural network developed by Spotify's Audio Intelligence La

Automatically move or copy files based on metadata associated with the files. For example, file your photos based on EXIF metadata or use MP3 tags to file your music files.

Automatically move or copy files based on metadata associated with the files. For example, file your photos based on EXIF metadata or use MP3 tags to file your music files.

Play any song directly into your group voice chat.
Play any song directly into your group voice chat.

Telegram VCPlayer Bot Play any song directly into your group voice chat. Official Bot : VCPlayerBot | Discussion Group : VoiceChat Music Player Suppor

A python program to cut longer MP3 files (i.e. recordings of several songs) into the individual tracks.

I'm writing a python script to cut longer MP3 files (i.e. recordings of several songs) into the individual tracks called ReCut. So far there are two

Scrap electronic music charts into CSV files
Scrap electronic music charts into CSV files

musiccharts A small python script to scrap (electronic) music charts into directories with csv files. Installation Download MusicCharts.exe Run MusicC

Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline
Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline

upai-gst-dl-plugins Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline Introduction Thanks to the work done by @j

Hide Your Secret Message in any Wave Audio File.
Hide Your Secret Message in any Wave Audio File.

HiddenWave Embedding secret messages in wave audio file What is HiddenWave Hiddenwave is a python based program for simple audio steganography. You ca

This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks

This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks ...

Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art!
Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art!

osu-Extract Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art! Requirements python3 mutagen pillow Us

Releases(0.19)
Owner
Rainbow Dreamer
Hello everyone, I am a programmer enjoy desigining useful mathematics, statistics and music related packages. qq: 2180502841
Rainbow Dreamer
User-friendly Voice Cloning Application

Multi-Language-RTVC stands for Multi-Language Real Time Voice Cloning and is a Voice Cloning Tool capable of transfering speaker-specific audio featur

Sven Eschlbeck 19 Dec 30, 2022
DCL - An easy to use diacritic library used for diacritic and accent manipulation.

Diacritics Library This library is used for adding, and removing diacritics from strings. Getting started Start by importing the module: import dcl DC

Kreus Amredes 6 Jun 03, 2022
Stevan KZ 1 Oct 27, 2021
Python wrapper around sox.

pysox Python wrapper around sox. Read the Docs here. This library was presented in the following paper: R. M. Bittner, E. J. Humphrey and J. P. Bello,

Rachel Bittner 446 Dec 07, 2022
Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline

upai-gst-dl-plugins Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline Introduction Thanks to the work done by @j

UPAI.IO 11 Dec 11, 2022
Simple, hackable offline speech to text - using the VOSK-API.

Nerd Dictation Offline Speech to Text for Desktop Linux. This is a utility that provides simple access speech to text for using in Linux without being

Campbell Barton 844 Jan 07, 2023
Some utils for auto speech recognition

About Some utils for auto speech recognition. Utils Util Description Script Reset audio Reset sample rate, sample width, etc of audios.

1 Jan 24, 2022
Official implementation of A cappella: Audio-visual Singing VoiceSeparation, from BMVC21

Y-Net Official implementation of A cappella: Audio-visual Singing VoiceSeparation, British Machine Vision Conference 2021 Project page: ipcv.github.io

Juan F. Montesinos 12 Oct 22, 2022
A tool for retrieving audio in the past

Rewinder A tool for retrieving audio in the past. Ever felt like, I need to remember that discussion which happened 10 min back. Now you can! Rewind a

Bharat 1 Jan 24, 2022
SinGlow: Generative Flow for SVS tasks in Tensorflow 2

SinGlow is a part of my Singing voice synthesis system. It can extract features of sound, particularly songs and musics. Then we can use these features (or perfect encoding) for feature migrating tas

Haobo Yang 8 Aug 22, 2022
Manipulate audio with a simple and easy high level interface

Pydub Pydub lets you do stuff to audio in a way that isn't stupid. Stuff you might be looking for: Installing Pydub API Documentation Dependencies Pla

James Robert 6.6k Jan 01, 2023
Okaeri-Music is a telegram music bot project, allow you to play music on voice chat group telegram.

Okaeri-Music is a telegram bot project that's allow you to play music on telegram voice chat group

Wahyusaputra 1 Dec 22, 2021
Gammatone-based spectrograms, using gammatone filterbanks or Fourier transform weightings.

Gammatone Filterbank Toolkit Utilities for analysing sound using perceptual models of human hearing. Jason Heeris, 2013 Summary This is a port of Malc

Jason Heeris 188 Dec 14, 2022
Python Audio Analysis Library: Feature Extraction, Classification, Segmentation and Applications

A Python library for audio feature extraction, classification, segmentation and applications This doc contains general info. Click here for the comple

Theodoros Giannakopoulos 5.1k Jan 02, 2023
Audio pitch-shifting & re-sampling utility, based on the EMU SP-1200

Pitcher.py Free & OS emulation of the SP-12 & SP-1200 signal chain (now with GUI) Pitch shift / bitcrush / resample audio files Written and tested in

morgan 13 Oct 03, 2022
Python I/O for STEM audio files

stempeg = stems + ffmpeg Python package to read and write STEM audio files. Technically, stems are audio containers that combine multiple audio stream

Fabian-Robert Stöter 72 Dec 23, 2022
Library for working with sound files of the format: .ogg, .mp3, .wav

Library for working with sound files of the format: .ogg, .mp3, .wav. By work is meant - playing sound files in a straight line and in the background, obtaining information about the sound file (auth

Romanin 2 Dec 15, 2022
Desktop music recognition application for windows

MusicRecognizer Music recognition application for windows You can choose from which of the devices the recording will be made. If you choose speakers,

Nikita Merzlyakov 28 Dec 13, 2022
Music generation using ml / dl

Data analysis Document here the project: deep_music Description: Project Description Data Source: Type of analysis: Please document the project the be

0 Jul 03, 2022
[Singing Log] Let your program learn to sing!

[Singing Log] Let your program learn to sing! You must have thought this was changelog when you saw the English title, but it's not, it's chànggēlog. What it does is allow your program to print logs

黄巍 22 Sep 03, 2022