/src/movertone/ragams.clj

https://github.com/ssrihari/ragavardhini · Clojure · 79 lines · 63 code · 16 blank · 0 comment · 1 complexity · bcca04a074cc8fea21df24b7b3057543 MD5 · raw file

  1. (ns ^{:doc "Reads, parses ragams from file, and makes them accessible"}
  2. movertone.ragams
  3. (:require [clojure.edn :as edn]
  4. [clojure.java.io :as io]
  5. [clojure.pprint :as pp]
  6. [medley.core :as m]
  7. [movertone.db :as db]))
  8. (defn read-file [filename]
  9. (-> filename io/resource slurp edn/read-string))
  10. (defn write-file [filename data]
  11. (spit (-> filename io/resource)
  12. (-> data pp/pprint with-out-str)))
  13. (defn deduplicate-by-priority [old-val new-val]
  14. (if (< (:alt-priority old-val 0)
  15. (:alt-priority new-val 1))
  16. old-val
  17. new-val))
  18. (defn name->melakartha [{:keys [name] :as melakartha}]
  19. [name melakartha])
  20. (def ragas-file
  21. "ragas.edn")
  22. (def janyams-by-melakarthas
  23. (read-file ragas-file))
  24. (defn assoc-mela-number [mela [janyam-name janyam-info]]
  25. [janyam-name (assoc janyam-info
  26. :name janyam-name
  27. :parent-mela-name (:name mela)
  28. :parent-mela-num (:num mela))])
  29. (defn assoc-mela-numbers [[mela janyams]]
  30. [mela (into {} (map (partial assoc-mela-number mela)
  31. janyams))])
  32. (def melakarthas
  33. (->> janyams-by-melakarthas
  34. keys
  35. (map name->melakartha)
  36. (into {})))
  37. (def janyams
  38. (->> janyams-by-melakarthas
  39. (map assoc-mela-numbers)
  40. (into {})
  41. vals
  42. (apply merge-with deduplicate-by-priority)))
  43. (def ragams
  44. (merge janyams melakarthas))
  45. (def raga-to-kritis
  46. (read-file "raga-to-kritis.edn"))
  47. (def raga-to-kritis-more
  48. (read-file "raga-to-kritis-more.edn"))
  49. (def all-kritis
  50. (concat
  51. (mapcat (fn [[r ks]] (map #(assoc % :ragam r) ks)) raga-to-kritis)
  52. (mapcat (fn [[r ks]] (map #(assoc % :ragam r) ks)) raga-to-kritis-more)))
  53. (def all-kritis-by-name
  54. (zipmap (map :kriti all-kritis)
  55. all-kritis))
  56. (defn ragams-with-duplicates []
  57. (->> janyams-by-melakarthas
  58. vals
  59. (apply concat)
  60. (group-by first)
  61. (m/map-vals count)
  62. (filter #(> (second %) 1))
  63. (sort-by second )))