hmt-0.3: Help/hmt.help.lhs
This file illustrates equivalent expressions in pct and hmt terms.
The file imports modules as required and so must be traversed in order.
$ sro T4 156
59A
> import Music.Theory.PitchClass
> tn 4 [1,5,6]
> import Music.Theory.Parse
> sro (rnrtnmi "T4") (pco "156")
$ sro T4I 156
3BA
> tni 4 [1,5,6]
> sro (rnrtnmi "T4I") (pco "156")
$ echo 156 | sro T4 | sro T0I
732
> let f n = invert 0 . tn n
> in f 4 [1,5,6]
> (sro (rnrtnmi "T0I") . sro (rnrtnmi "T4")) (pco "156")
$ pcom pcseg iseg 01549 | pcom iseg icseg | pcom icseg icset
145
> import Music.Theory.Set
> (set . map ic . int) [0,1,5,4,9]
$ pcom pcseg pcset 01549 | pcom pcset sc | pcom sc icv | pcom icv icset
1345
> import Data.Maybe
> import Music.Theory.Prime
> let icv_icset x = let f x y = if x > 0 then Just y else Nothing
> in catMaybes (zipWith f x [1..6])
> in (icv_icset . icv . forte_prime) [0,1,5,4,9]
Allen Forte "The Basic Interval Patterns" JMT 17/2 (1973):234-272
$ function bip { pcom pcseg iseg $ | pcom iseg icseg | nrm -r }
$ bip 0t95728e3416
11223344556
$
> import Music.Theory.Pct
> bip [0,10,9,5,7,2,8,11,3,4,1,6]
> bip (pco "0t95728e3416")
$ pg 5-Z17 | bip | sort -u > 5-Z17.bip ; \
pg 5-Z37 | bip | sort -u > 5-Z37.bip ; \
comm 5-Z17.bip 5-Z37.bip -1 -2 | wc -l
16
$
> import Data.List
> let f g = sort (g [1..4])
> in f Music.Theory.Permutations.permutations == f permutations
> import Music.Theory.Table
> let f = nub . map bip . permutations . sc
> in f "5-Z17" `intersect` f "5-Z37"
$ cat ../db.sh
for sc in $(fl -c $1)
do
pg $sc | bip | sort -u > $sc
done
$ sh ../db.sh 4
$ ls
4-1 4-12 4-16 4-19 4-21 4-24 4-27 4-4 4-7 4-Z15
4-10 4-13 4-17 4-2 4-22 4-25 4-28 4-5 4-8 4-Z29
4-11 4-14 4-18 4-20 4-23 4-26 4-3 4-6 4-9
$
> let { s = filter ((== 4) . length) scs
> ; x = map permutations s }
> in zip (map sc_name s) (map (set . (map bip)) x)
$ cat view.sh
for i in $(fl -c $1 | pg | bip | sort -u)
do
echo $i":" $(grep -l $i * | sort -t '-' +1 -n | tr "\n" " ")
done
$ sh view.sh 4
111: 4-1
112: 4-1 4-2 4-3
113: 4-1 4-3 4-4 4-7
...
$
> import Data.Maybe
> let { n = 4
> ; s = filter ((== n) . length) scs
> ; x = map permutations s
> ; z = zip (map sc_name s) (map (set . (map bip)) x)
> ; f b (s, bs) = if b `elem` bs then Just s else Nothing
> ; g b = catMaybes (map (f b) z)
> ; a = set (map bip (concat x)) }
> in zip a (map g a)
$ cyc < ~/src/pct/lib/scs | epmq \
> "in cset 89" "is icset 12" "hasnt icseg 11" | scdb
7-34 ascending melodic minor collection
7-35 diatonic collection (d)
8-28 octotonic collection (Messiaen Mode II)
$
> let { cyc xs = xs ++ [head xs]
> ; a = filter (\p -> length p `elem` [8,9]) (map cyc scs)
> ; b = filter (\p -> set (int p) == [1,2]) a
> ; c = filter (\p -> not ([1,1] `isInfixOf` int p)) b }
> in map sc_name c
$ epmq < ~/src/pct/lib/univ "in cset 6" "in pcset 579t024" \
> "has sc 5-35" "hasnt sc 2-6" "notin pcset 024579e"
02579A
$
> let { a = cf [6] (powerset [0..11])
> ; b = filter (is_superset [0,2,4,5,7,9,10]) a
> ; c = filter (`has_sc` (sc "5-35")) b
> ; d = filter (not . (`has_sc` (sc "2-6"))) c }
> in filter (not . is_superset [0,2,4,5,7,9,11]) d
$ echo 024579 | sro RT4I
79B024
> sro (SRO 0 True 4 False True) [0,2,4,5,7,9]
$ sro T4I 156
3BA
> sro (SRO 0 False 4 False True) [1,5,6]
$ echo 156 | sro T0I | sro T4
3BA
> import Control.Arrow
> let { i = SRO 0 False 0 False True
> ; t4 = SRO 0 False 4 False False }
> in (sro i >>> sro t4) [1,5,6]
$ echo 156 | sro T4 | sro T0I
732
> let { i = SRO 0 False 0 False True
> ; t4 = SRO 0 False 4 False False }
> in (sro i . sro t4) [1,5,6]
$ rsg 156 3BA
T4I
> rsg [1,5,6] [3,11,10]
$ rsg 0123 05t3
T0M
> rsg [0,1,2,3] [0,5,10,3]
$ rsg 0123 4e61
RT1M
> rsg [0,1,2,3] [4,11,6,1]
$ echo e614 | rsg 0123
r3RT1M
note: pct uses right rotation rotation.
> rsg [0,1,2,3] [11,6,1,4]
> sro (SRO 1 True 1 True False) [0,1,2,3]
> sro (SRO 1 False 4 True True) [0,1,2,3]
T0 = T0M1; Tn = TnM1
I = MB; TnI = TnMB,
M = M5; TnM = TnM5,
MI = IM = M7 = MBM5; TnMI = TnM7
> mn 11 [0,1,4,9] == tni 0 [0,1,4,9]
$ se -c5 123
12333
12233
12223
11233
11223
11123
$
> se 5 [1,2,3]
$ ici -c 123
123
129
1A3
1A9
$
> ici_c [1,2,3]
> ici [1,2,3]
> cgg [[0],[1,11],[2,10],[3,9],[4,8],[5,7],[6]]
$ se -c5 1245 | pg | ici | pcom iseg sc | \
sort -u | epmq "in cset 6" | wc -l
42
$
> let { a = se 5 [1,2,4,5]
> ; b = concatMap permutations a
> ; c = concatMap ici b
> ; d = map (forte_prime . dx_d 0) c
> ; e = nub d
> ; f = cf [6] e }
> in length f
$ cg -r3 0159
015
019
059
159
$
> cg_r 3 [0,1,5,9]
$ cmpl 02468t
13579B
$
> cmpl [0,2,4,6,8,10]
$ cyc 056
0560
$
> cyc [0,5,6]
$ dim 016
T1d
T1m
T0o
$
> dim [0,1,6]
$ dis 24
1256
$
> dis [2,4]
$ echo 024579e | doi 6 | sort -u
024579A
024679B
$ echo 01234 | doi 2 7-35 | sort -u
13568AB
$
> let p = [0,2,4,5,7,9,11] in doi 6 p p
> doi 2 (sc "7-35") [0,1,2,3,4]
$ spsc 4-11 4-12
5-26[02458]
$ spsc 3-11 3-8
4-27[0258]
4-Z29[0137]
$ spsc `fl 3`
6-Z17[012478]
$
> spsc [sc "4-11", sc "4-12"]
> spsc [sc "3-11", sc "3-8"]
> spsc (cf [3] scs)
$ echo 23a | ess 0164325
2B013A9
923507A
$
> ess [2,3,10] [0,1,6,4,3,2,5]
$ echo 22341 | icf
22341
$
> icf [[2,2,3,4,1]]
$ icseg 013265e497t8
12141655232
$
> icseg [0,1,3,2,6,5,11,4,9,7,10,8]
$ imb -c34 024579 | pfmt
024 245 457 579
0245 2457 4579
$
> imb [3,4] [0,2,4,5,7,9]
$ issb 3-7 6-32
3-7
3-2
3-11
$
> issb (sc "3-7") (sc "6-32")
$ mxs 024579 642 | sort -u
6421B9
B97642
$
> set (mxs [0,2,4,5,7,9] [6,4,2])
$ nrm 0123456543210
0123456
$
> nrm [0,1,2,3,4,5,6,5,4,3,2,1,0]
$ pi 0236 12
0236
6320
532B
B235
$
> pci [0,2,3,6] [1,2]
$ rs 0123 e614
T1M
$ rs 0123 641e
T1M
$ rs 0123 641e416
T1M
$
> rs [0,1,2,3] [6,4,1,11]
$ sb 6-32 6-8 | fn | pfmt
1-1
2-1 2-2 2-3 2-4 2-5
3-2 3-4 3-6 3-7 3-9 3-11
4-10 4-11 4-14 4-22 4-23
5-23
$ for i in `cat ~/src/pct/lib/scs | cf 6 | fn` ; \
do echo $i >> LIST ; sb $i | cf 3 | wc -l >> LIST ; done
$
> map sc_name (sb [sc "6-32", sc "6-8"])
> let f p = let xs = cf [3] (sb [p])
> in (sc_name p, length xs)
> in map f (cf [6] scs)
$ echo 024579 | sro RT4I
79B024
> sro (rnrtnmi "RT4I") (pco "024579")