하스켈 학교 세미나
Haskell >>>
Euterpea
2016년 7월 5일
김국현
Euterpea :
Computer Music in Haskell
Computer Music?
이미 많잖아?
다릅니다
Yale Haskell Group
Functional Programming
FRP
Fran Frob FruitFVision Euterpea
Yampa(Arrowized FRP)
Euterpea
❖ Computer Music을 위한 하스켈 라이브러리
❖ Note level 과 Signal level 을 지원
❖ The Haskell School of Music(aka HSoM)에 설명
❖ FP와...
무슨 도움이 될까?
중요한것은
Abstraction
Abstraction
Abstraction
High order function, lazy evaluation, etc..
but High order type, monads, arrows, etc..
Haskell World
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...
(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 :+...
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 :...
Self-Similar Music
❖ 컴퓨터 음악의 Approach
❖ n개의 간단한 melody 이용
❖ 각각의 melody를 복제, 승계하고 첫번째 melody에서 무한히
변화
❖ Algorithmic Composi...
Self-Similar Music in Euterpea
❖ Fractals
❖ Context-free grammars
❖ L-Systems
Other Approaches
• Signal is time-varying quantites
ex) Signal a = Time-> a
Example :
• silder (time-varying number)
• mouse position (cart...
• “arrow” 문법 사용
• 사용하기 위해선 proc를 선언
sigfun xy
y <- sigfun -< x
proc x -> do
y <- sf1 <- x
z <- sf2 <- y1
return z*2
x ->
l...
Four Useful Functions
❖ arr :: (a -> b) -> SF a b
❖ ex) arr (+1)
❖ constA :: b -> SF () b
❖ ex) constA 440
❖ (>>>) :: SF a...
Example : Sine Wave
❖ Basic trigonometry
sin(nωh) = 2 cos(ωh) sin((n-1) ωh) ‒ sin((n-2) ωh)
where ω = 2πf
❖ trigonometry 을...
yz^-1 z^-1 -
*c
d1 d2
init: sin ωh init: 0
Rendered in FRP
Events
❖ Signal을 재정의 해보면?
❖ data Maybe a = Nothing | Just a
❖ type SEvent a = Maybe a
❖ ex) SEvent [MidiMessage]
❖ Signal ...
Functional Reactive Programming
❖ 1973년 The Future of Programming에서 예측한 프로그래밍 패러다임
❖ Control flow 대신 독립적인 여러 개의 작업 단위 + Da...
Functional Reactive Programming
엑셀
Functional Reactive Programming
게이트 사이로 전기 신호가 흐르는 회로
Functional Reactive Programming
오디오 믹서
• 동적/변화하는 값이 1급 계층 값이고, 정의하거나 조합하고, 함수에 넣거나 출
력할 수 있는 것. 이를 Behavior(행동)로 부른다
• 행동은 여러 기본 요소를 가지고 만들어진다. 시간과 같은 정적 행동이 있고 ...
❖ High order Function
❖ Lazy evaluation
❖ Types
❖ Type Class
❖ High order type
❖ Polymorphic types
❖ Qualified types
❖ Com...
❖ Note-level Representations of Music
❖ Signal-level Representations of Sound
❖ Spectrum Analysis
❖ Additive and Subtracti...
감사합니다
Q & A
1. Haskell School of Music
❖ http://haskell.cs.yale.edu/?post_type=publication&p=112
2. John Hughes, Generalising monads t...
Upcoming SlideShare
Loading in …5
×

하스켈 Euterpea

376 views

Published on

하스켈 Euterpea

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
376
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

하스켈 Euterpea

  1. 1. 하스켈 학교 세미나 Haskell >>> Euterpea 2016년 7월 5일 김국현
  2. 2. Euterpea : Computer Music in Haskell
  3. 3. Computer Music?
  4. 4. 이미 많잖아?
  5. 5. 다릅니다
  6. 6. Yale Haskell Group
  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/오디오_믹서 참고 자료

×