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]>> 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]>> 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]>> 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]>>> 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>
                        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>
                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>
        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]>
http://cortical.io <http://cortical.io/>

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



Reply via email to