Thanks for the info, I certainly will read it.
I am already testing, but the results aren't encouraging. after learning the system seems to accept most chords as "nice", which isn't the intention. So I am trying other parameters and other settings.

greetings: Jos Theelen

On 2015-10-16 21:38, CHARLES GILLINGHAM wrote:
Dear Jos —

I missed some of this chain. You and I are working on similar things.

Here are several things that I think might help you:

1) There is a good training setting on the Bach chorales at
https://archive.ics.uci.edu/ml/datasets/Bach+Choral+Harmony. They’ve got
the chord and the notes, which I think was mostly what you seem to be
after at the moment. The way they represent temporal information is a
little confused. It can be sorted out with some work or it may not be a
problem for you.   (BTW, if you download their zip, the “.data” file is
a “.csv” file and the “.names” file is a “.txt” file.)

2) You spoke below about “distance” between two notes: how C4 and C5 are
“close” but C4 B4 are “far”, how C4 and G5 are closer than C4 and F#4.
  I think you are reaching for the concept of “consonance” which has a
long history and a lot of different approaches.

The simplest approach is "classical consonance", which is something they
teach to first semester music theory students. Here is a short
presentation of it: http://rsif.royalsocietypublishing.org/content/5/29/1429

The most accurate approach (in my opinion) is based on  neural
synchronization. See
http://rsif.royalsocietypublishing.org/content/5/29/1429.

On 2015-10-08 15:14, Marek Otahal wrote:



On Oct 11, 2015, at 1:18 PM, Jos Theelen <[email protected]
<mailto:[email protected]>> wrote:

Putting a chord as a sequence of notes is a possibility, but I will
first try to see a chord as one object. In that case the system
hopefully learns, which sequence of chords sounds good and which
sounds bad.

If I understand it correctly, setting learning false means that the TM
will not change. So I could do the following, when I want to find the
chords for a given melody:

1) Put a lot of Bach's note-chord combinations in the TM for learning;
2) set learning false and try a note-chord combination, with a fixed
note (the note from the melody) and a random chord;
3) look at the anomaly-value of that combination;
4) is that value low (no anomaly), accept that note-chord combination,
add it to the TM with learning true and restart (2) with the next note
of the melody;
5) is that value high (an anomaly), try a new note-chord combination
with learning false;

greetings: Jos Theelen

On 2015-10-10 14:26, cogmission (David Ray) wrote:
Hi Jos,

   I can fill the Temporal Memory with a lot of nice sounding
   note-chord combinations from Bachs chorals. But then I have to find
   a new chord with a given note. How do I do that?


What about entering each chord as a sequence of notes. Then "resetting"
after each chord - entering each note of the chord; resetting then
entering in the next chord in a song? That way, it will predict a series
of subsequent notes for each note entered.

But remember, the HTM is not a "creative" entity, it predicts or
generalizes. A "generalization" can be composed of elements not
previously combined in a given way, but those individual elements (not
the combination of them), will always be what it has seen before... AFAIK

   And what happens with the Temporal Memory when I do that? Does that
   trying somehow change the Temporal Memory?


Once you enter the notes, turn off learning.

On Sat, Oct 10, 2015 at 6:28 AM, Jos Theelen <[email protected]
<mailto:[email protected]>
<mailto:[email protected]>> wrote:

   Yes, I have seen that video.

   I hope I can solve the problem before the enddate of the
   HTM-challenge. What I still don't understand is how to get a
   prediction of a chord, when the note is known. I can fill the
   Temporal Memory with a lot of nice sounding note-chord combinations
   from Bachs chorals. But then I have to find a new chord with a given
   note. How do I do that?

   Should I just try to put the combination of that note with a random
   chord in the Temporal Memory and look if it is an anomaly? And try
   that for all the possible chords? And pick the chord with the lowest
   anomaly-value? That could be a very slow solution. And what happens
   with the Temporal Memory when I do that? Does that trying somehow
   change the Temporal Memory?

   greetings: Jos Theelen


   On 2015-10-09 20:27, Matthew Taylor wrote:

       That is a very interesting problem. I hope you've seen this video
       about music theory with Charlie Gillingham?

https://www.youtube.com/watch?v=tGfDjwSORaw
       ---------
       Matt Taylor
       OS Community Flag-Bearer
       Numenta


       On Fri, Oct 9, 2015 at 11:21 AM, Jos Theelen <[email protected]
<mailto:[email protected]>
       <mailto:[email protected]>> wrote:

           That probably means, they used a scalarencoder. But their
           problem was
           different than mine. They had to remember the notes and to
           learn which note
           came after which other note. For me the combination of
           melody and chords
           have to sound "nice". Somehow a system has too learn or
           remember that.

           greetings: Jos Theelen


           On 2015-10-09 17:19, Matthew Taylor wrote:


               They actually didn't create a NoteEncoder (the codebase
               was much less
               extensible 2.5 years ago). They wrote a preprocessing
               script that
               turned the MIDI song file into a scalar input stream. I
               don't remember the
               details, and their codebase is lost now. But I do
               remember that they
               needed to remove the "rests" from the input.

               ---------
               Matt Taylor
               OS Community Flag-Bearer
               Numenta


               On Fri, Oct 9, 2015 at 3:15 AM, Jos Theelen
<[email protected] <mailto:[email protected]>
               <mailto:[email protected]>> wrote:


                   Yes, I know it and looked at it. I wondered how they
                   made a NoteEncoder,
                   I
                   am still struggling with that. Nupic says that notes
                   that are "close" to
                   each other should have the most overlapping bits.
                   But what is "close" in
                   music?

                   1) a scalarencoder, where the number of the note is
                   encoded. In this case
                   "close" means almost the same frequency.
                   2) 2 scalarencoders, one for the note and a
                   different one for the octave.
                   This because a note sounds almost the same as that
                   same note an octave
                   lower
                   or an octave higher.
                   3) a typical noteencoder and a scalarencoder for the
                   octave. The
                   noteencoder
                   should take the notes in the following cyclical order:
                   C,G,D,A,E,.....Es,Bes,F,C, each a quint apart. In
                   this case notes that
                   are
                   close together sound better together. C-G sounds
                   better together than
                   C-Cis

                   Probably I should make all 3 encoders, just to test.

                   greetings: Jos Theelen

                   On 2015-10-08 15:14, Marek Otahal wrote:



                       Hi Jos,

                       On Thu, Oct 8, 2015 at 3:06 PM, Jos Theelen
                       <[email protected] <mailto:[email protected]>
<mailto:[email protected]>
                       <mailto:[email protected]<mailto:[email protected]>>> wrote:

                              I am working on a model, that reads
                       melodies and chords from
                              midifiles, mainly chorales from JS Bach.
                       When the model is given a
                              new melody without chords, it should find
                       the chords, that sound
                              correct, conform what it learned from the
                       midifiles.

                       Nice, I love classical music and music related
                       examples :)
                       You probably know, but just in case: check out
                       nupic.audio project and a
                       former hackathon submission that composed song
                       on trained MIDI music.


                              greetings: Jos Theelen

                       No virus found in this message.
                       Checked by AVG -www.avg.com <http://www.avg.com/>
                       <http://www.avg.com <http://www.avg.com/>>
<http://www.avg.com <http://www.avg.com/>>
                       Version: 2015.0.6140 / Virus Database:
                       4435/10780 - Release Date:
                       10/08/15






               -----
               No virus found in this message.
               Checked by AVG -www.avg.com
<http://www.avg.com/><http://www.avg.com <http://www.avg.com/>>
               Version: 2015.0.6140 / Virus Database: 4435/10783 -
               Release Date: 10/08/15







       -----
       No virus found in this message.
       Checked by AVG -www.avg.com
<http://www.avg.com/><http://www.avg.com <http://www.avg.com/>>
       Version: 2015.0.6140 / Virus Database: 4435/10790 - Release
       Date: 10/10/15







--
/With kind regards,/
David Ray
Java Solutions Architect
*Cortical.io <http://cortical.io/>*
Sponsor of: HTM.java <https://github.com/numenta/htm.java>
[email protected] <mailto:[email protected]><mailto:[email protected]>
http://cortical.io <http://cortical.io/><http://cortical.io/>

No virus found in this message.
Checked by AVG -www.avg.com <http://www.avg.com/><http://www.avg.com
<http://www.avg.com/>>
Version: 2015.0.6140 / Virus Database: 4435/10790 - Release Date:
10/10/15

No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2015.0.6172 / Virus Database: 4447/10829 - Release Date: 10/16/15



Reply via email to