Hi Charlie,

The paper you linked on musical consonance and neural synchronization was 
fascinating. It's an elegant theory that fits empirical observations well. 
Thanks for sharing.

- Chetan

> On Oct 16, 2015, at 12:38 PM, CHARLES GILLINGHAM <[email protected]> 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 
> <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] <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] <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]> 
>>> <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