/Automatic-Music-Composer

This program creates music according to different human feelings. It uses a Hidden Markove Model to learn the patterns in musics and uses them to create a new music.

Primary LanguageC#

Automatic-Music-Composer

Our vision of a creative artist or a music composer is usually very romantic. A person standing on a roof with the wind blowing in his hair and suddenly he gets an idea of a full opera and sits down and starts to write it. It has been vision of the music for decades now. In fact if you ask people no one will believe that a machine can create music which gives different feelings to human. Everyone believes that such a music should be created by something that has actual feelings and the only thing that has these feelings is human. But the truth is music is a sequence of numbers so it can be calculated and created by a machine. The aim of our program is to develop a software that can create music according to different feelings . We used a customized Hidden Markov Model to create this program. The composing process works in this way : first, according to the user’s choices of feeling, instruments and genre the program chooses the right music from it's database. The program then goes through them and learns the parameters (unigram, bigram,..) of these music pieces. Then it starts the composition of music and uses these parameters along with some other computations like Golden ratio between notes and the notes which makes music closer to the selected feeling (for example minor notes are used more in sad music) to create notes for the main instrument. Then the program gives weight (the duration of every note) to these notes by taking the learnt parameters into consideration. The program then creates notes for other instruments using the same steps and taking into account the created notes for the base instrument. Of course this is the main cycle of the program but there are other methods which helping the creation of the music for example there is an Artificial Neural Network which determines the tempo of the music according to user selections and a method to calculate similarity between the instruments. Also there is another program which stores music in database.