CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
y33-j3T

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: y33-j3T/Coursera-Deep-Learning
Path: blob/master/Sequence Models/Week 1/Jazz improvisation with LSTM/__pycache__/grammar.cpython-36.pyc
Views: 13383
3

�SoZ�;�@s�dZddlmZmZddlmZddlTddlZddlZddl	Z	dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)z�
Author:     Ji-Sung Kim, Evan Chow
Project:    jazzml / (used in) deepjazz
Purpose:    Extract, manipulate, process musical grammar

Directly taken then cleaned up from Evan Chow's jazzml, 
https://github.com/evancchow/jazzml,with permission.
�)�OrderedDict�defaultdict)�groupby)�*NcCsZtj�}|jdkrtj�}|j|�}ttdd�|j�D���}dd�|D�}|j}||kS)N�majorcSsg|]}|�qS�r)�.0�pitchrr�@/home/jovyan/work/Week 1/Jazz improvisation with LSTM/grammar.py�
<listcomp>sz#__is_scale_tone.<locals>.<listcomp>cSsg|]
}|j�qSr)�name)r�irrr
rs)	�scale�DorianScale�quality�
MajorScale�derive�list�set�
getPitchesr)�chord�note�	scaleType�scales�
allPitches�allNoteNames�noteNamerrr
�__is_scale_tones

rcCsdx^|jD]T}|jd�}|jd�}|j|jksX|j|j�jksX|j|jksX|j|j�jkrdSqWdS)N�TF�����)�pitches�	transposer�
getEnharmonic)rrZ
chordPitchZstepUpZstepDownrrr
�__is_approach_tone&s

r#cCs|jdd�|jD�kS)Ncss|]}|jVqdS)N)r)r�prrr
�	<genexpr>5sz"__is_chord_tone.<locals>.<genexpr>)rr )�	lastChordrrrr
�__is_chord_tone4sr'cCs dd�|jD�}tjtj|��S)NcSsg|]
}|j�qSr)�nameWithOctave)rr$rrr
r9sz)__generate_chord_tone.<locals>.<listcomp>)r r�Note�random�choice)r&ZlastChordNoteNamesrrr
�__generate_chord_tone8sr,c	Cs�tj�}|jdkrtj�}|j|�}ttdd�|j�D���}dd�|D�}tj	|�}|j
�}tj	dd�|jD��}tj
d||f�}|S)NrcSsg|]}|�qSrr)rr	rrr
rFsz)__generate_scale_tone.<locals>.<listcomp>cSsg|]
}|j�qSr)r)rr
rrr
rGscSsg|]
}|j�qSr)�octave)rr
rrr
rLsz%s%s)r�WeightedHexatonicBluesrrrrrrr*r+�
sortAscendingr rr))	r&rrrrZ	sNoteNameZ
lastChordSortZsNoteOctave�sNoterrr
�__generate_scale_tone=s


r1cCs t|�}|jtjddg��}|S)Nrr)r1r!r*r+)r&r0ZaNoterrr
�__generate_approach_toneQsr2cCst|�S)N)r1)r&rrr
�__generate_arbitrary_toneWsr3c
s�tj|�}tj|�}|jtjtjg�|jtjg�|dj|djd}|dj|}d}d}d}�x�t	|�D�]v\}	�y�fdd�|D�d}
Wn4t
k
r�||d_�fdd�|D�d}
YnXd}t�tj�r�d	}nH�j|
j
kp�t�tj��rd
}n(t|
���rd}nt|
���r&d}nd
}|	t|�dk�rL|d�j}n||	dj�j}d|�jf}
d}t�tj��r�|d7}|dk�r��}n>tj|�d�}tj|dg�}tj|dg�}d|j|jf}�}|
|}||d7}qrW|j�S)Nr��csg|]}|j�jkr|�qSr)�offset)r�n)�nrrr
r�sz parse_melody.<locals>.<listcomp>rcsg|]}|j�jkr|�qSr)r6)rr7)r8rr
r�s� �R�C�S�A�Xg@z%s,%.3f)�	noteStart�noteEnd�m3z,<%s,%s>rr)�copy�deepcopy�removeByNotOfClassrr)�Restr�Chordr6�	enumerate�
IndexError�
isinstancer�
pitchNamesrr#�len�
quarterLength�interval�Interval�add�subtract�directedName�rstrip)ZfullMeasureNotesZfullMeasureChords�measure�chordsZmeasureStartTime�measureStartOffsetZfullGrammar�prevNoteZnumNonRests�ixr&ZelementType�diffZnoteInfoZintervalInfoZnoteDistZ
noteDistUpperZ
noteDistLowerZgrammarTermr)r8r
�parse_melody�sV




rYc
s<tj�}d�d��x$t|jd��D�]\}}|jd�}�t|d�7�|ddkrttjt|d�d�}|j�|�q"y�fdd	�|D�d}Wn4tk
r�d|d_	�fd
d	�|D�d}YnXt
|�dk�rBtj�}|ddkr�t|�}n |dd
k�rt
|�}nt|�}t|d�|_|jdk�r0d|_|j�|�|�q"tj|djdd��}	tj|djdd��}
|	j|
jk�r�|	|
}}n
|
|	}}tj�j|�}
tj�j|�}t|j|
jd�}|ddk�r�g}x>td|�D]0}tj|
j|�j��}t||��r�|j|��q�Wt
|�dk�r<tj�fdd	�|D��}n,t
|�dk�rT|d}n�jtjddg��}|jdk�rzd|_t|d�|_|j�|��n�|dd
k�rlg}x>td|�D]0}tj|
j|�j��}t ||��r�|j|��q�Wt
|�dk�rtj�fdd	�|D��}n,t
|�dk�r*|d}n�jtjddg��}|jdk�rPd|_t|d�|_|j�|�n�g}x>td|�D]0}tj|
j|�j��}t!||��r||j|��q|Wt
|�dk�r�tj�fdd	�|D��}n,t
|�dk�r�|d}n�jtjddg��}|jdk�rd|_t|d�|_|j�|�|�q"W|S)Ngr9�,rrr:)rLcsg|]}|j�kr|�qSr)r6)rr7)�
currOffsetrr
r�sz#unparse_grammar.<locals>.<listcomp>csg|]}|j�kr|�qSr)r6)rr7)r[rr
r�s�r;r<r4�<r5��>csg|]}|j�jkr|�qSr)r()rr
)�prevElementrr
r"scsg|]}|j�jkr|�qSr)r()rr
)r`rr
r5scsg|]}|j�jkr|�qSr)r()rr
)r`rr
rIsrr�����rara)"�stream�VoicerG�split�floatrrE�insertrHr6rKr)r,r1r2rLr-rMrN�replace�cents�transposePitchr	�int�ps�ranger!�simplifyEnharmonicr'�appendr*r+rr#)Z
m1_grammarZ	m1_chordsZm1_elementsrWZgrammarElement�termsZrNoter&Z
insertNote�	interval1�	interval2Z
upperIntervalZ
lowerIntervalZlowPitchZ	highPitch�numNotesZrelevantChordTonesr
ZcurrNoteZrelevantScaleTonesZrelevantApproachTonesr)r[r`r
�unparse_grammar�s�







rs)�__doc__�collectionsrr�	itertoolsr�music21rBr*�pdbrr#r'r,r1r2r3rYrsrrrr
�<module>s)W