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 
<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 
<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 
<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]> 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] <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 
>> <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] <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] <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] <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/ <http://cortical.io/>>*
>> Sponsor of: HTM.java <https://github.com/numenta/htm.java 
>> <https://github.com/numenta/htm.java>>
>> [email protected] <mailto:[email protected]> <mailto:[email protected] 
>> <mailto:[email protected]>>
>> http://cortical.io <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

Reply via email to