diff --git a/.travis.yml b/.travis.yml index 18cc3f7..76d14c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: required dist: trusty node_js: stable install: - - npm install -g purescript@0.13.8 pulp@15.0.0 bower + - npm install -g purescript@0.15.4 pulp@16.0.0 bower script: - bower install - npm run -s build diff --git a/bower.json b/bower.json index 7735050..503ecc7 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "purescript-webaudio", - "version": "0.1.0", + "version": "0.1.2", "description": "A PureScript wrapper for the WebAudio API.", "repository": { "type": "git", @@ -22,17 +22,17 @@ "tests" ], "dependencies": { - "purescript-arrays": "^6.0.1", - "purescript-foldable-traversable": "^5.0.1", - "purescript-lists": "^6.0.1", - "purescript-math": "^3.0.0", - "purescript-maybe": "^5.0.0", - "purescript-tuples": "^6.0.1", - "purescript-strings": "^5.0.0", - "purescript-effect": "^3.0.0", - "purescript-aff": "^6.0.0", - "purescript-arraybuffer-types": "^3.0.0", - "purescript-arraybuffer": "^11.0.1", - "purescript-web-events": "^3.0.0" + "purescript-arrays": "^7.1.0", + "purescript-foldable-traversable": "^6.0.0", + "purescript-lists": "^7.0.0", + "purescript-math": "^4.0.0", + "purescript-maybe": "^6.0.0", + "purescript-tuples": "^7.0.0", + "purescript-strings": "^6.0.0", + "purescript-effect": "^4.0.0", + "purescript-aff": "^7.1.0", + "purescript-arraybuffer-types": "^3.0.2", + "purescript-arraybuffer": "^13.0.0", + "purescript-web-events": "^4.0.0" } } diff --git a/build-examples.sh b/build-examples.sh index 67d6fca..3c8d7d5 100755 --- a/build-examples.sh +++ b/build-examples.sh @@ -1,5 +1,10 @@ +echo "*** Building decode ***" npm run -s spago:build:example:decode +echo "*** Building decodeAsync ***" npm run -s spago:build:example:decodeAsync +echo "*** Building gain ***" npm run -s spago:build:example:gain +echo "*** Building square-wave ***" npm run -s spago:build:example:squareWave +echo "*** Building props ***" npm run -s spago:build:test:props diff --git a/decodeAsync.dhall b/decodeAsync.dhall index e31d2fd..e968f28 100644 --- a/decodeAsync.dhall +++ b/decodeAsync.dhall @@ -4,11 +4,17 @@ in conf // { sources = conf.sources # [ "examples/decodeAsync/**/*.purs" ], dependencies = conf.dependencies # [ "affjax" + , "affjax-web" , "arraybuffer" , "arrays" , "either" + , "exceptions" , "foldable-traversable" , "http-methods" + , "newtype" , "parallel" + , "unsafe-coerce" + , "web-dom" + , "web-html" ] } diff --git a/examples/decode/SimpleDom.js b/examples/decode/SimpleDom.js index dbfbad7..1564964 100644 --- a/examples/decode/SimpleDom.js +++ b/examples/decode/SimpleDom.js @@ -1,54 +1,54 @@ "use strict"; -exports.maybeFn = function (nothing, just, a) { +export function maybeFn(nothing, just, a) { return a == null ? nothing : just(a); -}; +} -exports.makeXMLHttpRequest = function () { +export function makeXMLHttpRequest() { return new XMLHttpRequest(); -}; +} -exports.unsafeOpen = function (obj, method, url) { +export function unsafeOpen(obj, method, url) { return function () { obj.open(method, url); return {}; }; -}; +} -exports.unsafeResponseType = function (obj) { +export function unsafeResponseType(obj) { return function () { return obj.responseType; }; -}; +} -exports.unsafeSetResponseType = function (obj, rt) { +export function unsafeSetResponseType(obj, rt) { return function () { obj.responseType = rt; return {}; }; -}; +} -exports.unsafeResponse = function (obj) { +export function unsafeResponse(obj) { return function () { return obj.response; }; -}; +} -exports.unsafeSend = function (obj) { +export function unsafeSend(obj) { return function () { obj.send(); return {}; }; -}; +} -exports.unsafeSendWithPayload = function (obj, payload) { +export function unsafeSendWithPayload(obj, payload) { return function () { obj.send(payload); return {}; }; -}; +} -exports.unsafeAddEventListener = function (targ) { +export function unsafeAddEventListener(targ) { return function (cb) { return function (src) { return function () { @@ -58,18 +58,18 @@ exports.unsafeAddEventListener = function (targ) { }; }; }; -}; +} -exports.unsafeEventTarget = function (event) { +export function unsafeEventTarget(event) { return function () { return event.target; }; -}; +} -exports.unsafeEventProp = function (prop) { +export function unsafeEventProp(prop) { return function (event) { return function () { return event[prop]; }; }; -}; +} diff --git a/examples/decodeAsync/Main.purs b/examples/decodeAsync/Main.purs index 53f1452..ae4a779 100644 --- a/examples/decodeAsync/Main.purs +++ b/examples/decodeAsync/Main.purs @@ -2,7 +2,7 @@ module DecodeAsync where import Prelude -import Affjax (defaultRequest, request) +import Affjax.Web (defaultRequest, request) import Affjax.ResponseFormat as ResponseFormat import Audio.WebAudio.AudioBufferSourceNode (StartOptions, setBuffer, startBufferSource) import Audio.WebAudio.BaseAudioContext (createBufferSource, currentTime, decodeAudioDataAsync, destination, newAudioContext) @@ -13,10 +13,18 @@ import Data.ArrayBuffer.ArrayBuffer (empty) import Data.Either (Either(..)) import Data.HTTP.Method (Method(..)) import Data.Maybe (Maybe(..)) +import Data.Newtype (wrap) import Data.Traversable (traverse) import Effect (Effect) import Effect.Aff (Aff, Fiber, launchAff) import Effect.Class (liftEffect) +import Effect.Exception (throw) +import Unsafe.Coerce (unsafeCoerce) +import Web.DOM.ParentNode (querySelector) +import Web.Event.EventTarget (EventTarget, addEventListener, eventListener) +import Web.HTML (window) +import Web.HTML.HTMLDocument (toParentNode) +import Web.HTML.Window (document) type ElapsedTime = Number @@ -67,8 +75,8 @@ playSoundAt ctx mbuffer elapsedTime = _ -> pure unit -main :: Effect (Fiber Unit) -main = launchAff $ do +loadPlayBuffers :: Effect (Fiber Unit) +loadPlayBuffers = launchAff $ do ctx <- liftEffect newAudioContext buffers <- loadSoundBuffers ctx ["hihat.wav", "kick.wav", "snare.wav"] _ <- liftEffect $ playSoundAt ctx (buffers !! 0) 0.0 @@ -78,3 +86,13 @@ main = launchAff $ do _ <- liftEffect $ playSoundAt ctx (buffers !! 1) 2.0 _ <- liftEffect $ playSoundAt ctx (buffers !! 2) 2.5 pure unit + +main :: Effect Unit +main = do + doc <- map toParentNode (window >>= document) + playButton <- querySelector (wrap "#play") doc + case playButton of + Just e -> do + el <- eventListener \_ -> loadPlayBuffers + addEventListener (wrap "click") el false (unsafeCoerce e :: EventTarget) + Nothing -> throw "no play button" diff --git a/examples/decodeAsync/index.html b/examples/decodeAsync/index.html index 332414c..f0ef0b9 100644 --- a/examples/decodeAsync/index.html +++ b/examples/decodeAsync/index.html @@ -2,7 +2,22 @@
-