Nächste SlideShare
×

# 하스켈 Euterpea

449 Aufrufe

Veröffentlicht am

하스켈 Euterpea

Veröffentlicht in: Technologie
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Als Erste(r) kommentieren

### 하스켈 Euterpea

1. 1. 하스켈 학교 세미나 Haskell >>> Euterpea 2016년 7월 5일 김국현
2. 2. Euterpea : Computer Music in Haskell
3. 3. Computer Music?
4. 4. 이미 많잖아?
5. 5. 다릅니다
7. 7. Functional Programming FRP Fran Frob FruitFVision Euterpea Yampa(Arrowized FRP)
8. 8. Euterpea ❖ Computer Music을 위한 하스켈 라이브러리 ❖ Note level 과 Signal level 을 지원 ❖ The Haskell School of Music(aka HSoM)에 설명 ❖ FP와 Computer Music의 공존 ❖ 실제로 CS431/CS531 수업에 활용 ❖ haskell.cs.yale.edu 에서 무료로 다운로드
9. 9. 무슨 도움이 될까?
10. 10. 중요한것은
11. 11. Abstraction Abstraction Abstraction
12. 12. High order function, lazy evaluation, etc.. but High order type, monads, arrows, etc.. Haskell World
13. 13. Euterpea Example (e 4 qn :+: f 4 qn :+: g 4 qn :+: a 4 qn :+: b 4 qn :+: a 4 qn :+: g 4 qn :+: f 4 qn) :=: (c 4 qn :+: d 4 qn :+: e 4 qn :+: f 4 qn :+: g 4 qn :+: f 4 qn :+: e 4 qn :+: d 4 qn)
14. 14. (c 4 qn :+: d 4 qn :+: e 4 qn :+: f 4 qn :+: g 4 qn :+: f 4 qn :+: e 4 qn :+: d 4 qn) :=: (e 4 qn :+: f 4 qn :+: g 4 qn :+: a 4 qn :+: b 4 qn :+: a 4 qn :+: g 4 qn :+: f 4 qn) ❖ Data Abstraction: line[c 4 qn, d 4 qn, e 4 qn, f 4 qn, g 4 qn, f 4 qn, e 4 qn, d 4 qn] :=: line[e 4 qn, f 4 qn, g 4 qn, a 4 qn, b 4 qn, a 4 qn, g 4 qn, f 4 qn] ❖ High-order functional Abstraction: line (map fn [c, d, e, f, g, f, e, d] :=: line (map fn[e, f ,g, a, b, a, g, f] where fn pc = pc 4 qn ❖ Function composition gn [c, d, e, f, g, f, e, d] :=: gn [e, f, g, a, b, a, g, f] where gn = line . map fn; fn pc = pc 4 qn Abstraction 101
15. 15. Example Revisited (c 4 qn :=: e 4 qn) :+: (d 4 qn := f 4 qn) :+: (e 4 qn :=: g 4 qn) :+: (f 4 qn :=: a 4 qn) :+: (g 4 qn :=: b 4 qn) :+: (f 4 qn :=: a 4 qn) :+: (e 4 qn :=: g 4 qn) :+: (d 4 qn :=: f 4 qn) line [c 4 qn :=: e 4 qn, d 4 qn := f 4 qn, e 4 qn :=: g 4 qn, f 4 qn :=: a 4 qn, g 4 qn :=: b 4 qn, f 4 qn :=: a 4 qn,e 4 qn :=: g 4 qn ,d 4 qn :=: f 4 qn] gn [c, d, e, f, g, f, e, d] :=: gn [e, f, g, a, b ,a, g, f] where gn = line . map fn fn pc = pc 4 qn
16. 16. Self-Similar Music ❖ 컴퓨터 음악의 Approach ❖ n개의 간단한 melody 이용 ❖ 각각의 melody를 복제, 승계하고 첫번째 melody에서 무한히 변화 ❖ Algorithmic Composition!
17. 17. Self-Similar Music in Euterpea
18. 18. ❖ Fractals ❖ Context-free grammars ❖ L-Systems Other Approaches
19. 19. • Signal is time-varying quantites ex) Signal a = Time-> a Example : • silder (time-varying number) • mouse position (cartesian coordinate) • Signal을 효과적으로 다루기 위해선 추상화가 필요! ex) SigFun a b = Signal a -> Signal b Signal and SF
20. 20. • “arrow” 문법 사용 • 사용하기 위해선 proc를 선언 sigfun xy y <- sigfun -< x proc x -> do y <- sf1 <- x z <- sf2 <- y1 return z*2 x -> let y = f1 x z = f2 (y +1) in z*2 Arrow
21. 21. Four Useful Functions ❖ arr :: (a -> b) -> SF a b ❖ ex) arr (+1) ❖ constA :: b -> SF () b ❖ ex) constA 440 ❖ (>>>) :: SF a b -> SF b c -> SF a c ❖ (<<<) :: SF b c -> SF a b -> SF a c ❖ ex) constA 440 >>> arr (+1) 는 constA 441
22. 22. Example : Sine Wave ❖ Basic trigonometry sin(nωh) = 2 cos(ωh) sin((n-1) ωh) ‒ sin((n-2) ωh) where ω = 2πf ❖ trigonometry 을 이용하면? y(0) = 0 y(1) = sin ωh y(n) = c · y(n-1) - y(n-2) where c = 2 (cos ωh)
23. 23. yz^-1 z^-1 - *c d1 d2 init: sin ωh init: 0 Rendered in FRP
24. 24. Events ❖ Signal을 재정의 해보면? ❖ data Maybe a = Nothing | Just a ❖ type SEvent a = Maybe a ❖ ex) SEvent [MidiMessage] ❖ Signal Function의 경우 ❖ SF (SEvent T1) (SEvent T2) Functional Reactive Programming (FRP)
25. 25. Functional Reactive Programming ❖ 1973년 The Future of Programming에서 예측한 프로그래밍 패러다임 ❖ Control flow 대신 독립적인 여러 개의 작업 단위 + Data flow ❖ 1997년 Fran으로 처음 FRP를 구현한 사람이 Conal Elliott ❖ 이후에 Rx 시리즈들에 영향
26. 26. Functional Reactive Programming 엑셀
27. 27. Functional Reactive Programming 게이트 사이로 전기 신호가 흐르는 회로
28. 28. Functional Reactive Programming 오디오 믹서
29. 29. • 동적/변화하는 값이 1급 계층 값이고, 정의하거나 조합하고, 함수에 넣거나 출 력할 수 있는 것. 이를 Behavior(행동)로 부른다 • 행동은 여러 기본 요소를 가지고 만들어진다. 시간과 같은 정적 행동이 있고 이 에 대한 순차적인 조합과 병렬적인 조합이 있다. • discrete phenomena를 다루기 위해 다른 유형의 이벤트가 있다. 각 발생에 대한 스트림(무한 or 유한)을 가진다. 각 발생은 시간과 값으로 이루어져 있다. by Conal Elliott Functional Reactive Programming
30. 30. ❖ High order Function ❖ Lazy evaluation ❖ Types ❖ Type Class ❖ High order type ❖ Polymorphic types ❖ Qualified types ❖ Computational Abstractions ❖ Functors ❖ Arrows ❖ Monads PL Concept That You Will Learn
31. 31. ❖ Note-level Representations of Music ❖ Signal-level Representations of Sound ❖ Spectrum Analysis ❖ Additive and Subtractive Synthesis ❖ Physical Modeling (waveguides, non-linear models) ❖ Amplitude and Frequency Modulation ❖ Filters Computer Music Concept That You Will Learn
32. 32. 감사합니다
33. 33. Q & A
34. 34. 1. Haskell School of Music ❖ http://haskell.cs.yale.edu/?post_type=publication&p=112 2. John Hughes, Generalising monads to arrows(1998) ❖ http://www.cse.chalmers.se/~rjmh/Papers/arrows.pdf 3. C. Elliott and P. Hudak , Functional reactive animation (1997) 4. What is (functional) reactive programming? ❖ (http://stackoverflow.com/questions/1028250/what-is-functional-reactive- programming/1030631#1030631) 5. https://ko.wikipedia.org/wiki/가산기 6. https://ko.wikipedia.org/wiki/오디오_믹서 참고 자료