diff --git a/js/actionCreators.js b/js/actionCreators.js index 678e6493..2edbe737 100644 --- a/js/actionCreators.js +++ b/js/actionCreators.js @@ -1,3 +1,4 @@ +import parser from "winamp-eqf"; import MyFile from "./myFile"; import skinParser from "./skinParser"; import { BANDS } from "./constants"; @@ -94,13 +95,32 @@ export function toggleShuffle() { return { type: TOGGLE_SHUFFLE }; } +const normalize = hrz => hrz / 63 * 100; +function setEqFromFile(file) { + return dispatch => { + file.processBuffer(arrayBuffer => { + const eqf = parser(arrayBuffer); + const preset = eqf.presets[0]; + + // TODO: Fix normalize. Currently these numbers are kinda wrong. + dispatch(setPreamp(normalize(preset.preamp))); + BANDS.forEach(band => { + dispatch(setEqBand(band, normalize(preset[`hz${band}`]))); + }); + }); + }; +} + const SKIN_FILENAME_MATCHER = new RegExp("(wsz|zip)$", "i"); +const EQF_FILENAME_MATCHER = new RegExp("eqf$", "i"); export function loadFileFromReference(fileReference) { return dispatch => { const file = new MyFile(); file.setFileReference(fileReference); if (SKIN_FILENAME_MATCHER.test(fileReference.name)) { dispatch(setSkinFromFile(file)); + } else if (EQF_FILENAME_MATCHER.test(fileReference.name)) { + dispatch(setEqFromFile(file)); } else { dispatch({ type: LOAD_AUDIO_FILE, file }); } diff --git a/package.json b/package.json index 028a9090..e053d6cb 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,8 @@ "react-redux": "^5.0.2", "redux": "^3.5.2", "redux-thunk": "^2.1.0", - "webpack": "^2.2.0" + "webpack": "^2.2.0", + "winamp-eqf": "^0.1.0" }, "jest": { "testRegex": "\\.test\\.js$", diff --git a/yarn.lock b/yarn.lock index 0609b826..fa9faf79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -209,13 +209,9 @@ assert@^1.1.1: dependencies: util "0.10.3" -ast-types@0.8.18: - version "0.8.18" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.18.tgz#c8b98574898e8914e9d8de74b947564a9fe929af" - -ast-types@0.9.4: - version "0.9.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.4.tgz#410d1f81890aeb8e0a38621558ba5869ae53c91b" +ast-types@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.8.tgz#6cb6a40beba31f49f20928e28439fc14a3dab078" async-each@^1.0.0: version "1.0.1" @@ -412,14 +408,13 @@ babel-jest@^19.0.0: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^19.0.0" -babel-loader@^6.2.9: - version "6.4.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" +babel-loader@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" dependencies: find-cache-dir "^0.1.1" - loader-utils "^0.2.16" + loader-utils "^1.0.2" mkdirp "^0.5.1" - object-assign "^4.0.1" babel-messages@^6.23.0: version "6.23.0" @@ -792,9 +787,9 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" +babylon@7.0.0-beta.8: + version "7.0.0-beta.8" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.8.tgz#2bdc5ae366041442c27e068cce6f0d7c06ea9949" babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.16.1" @@ -1155,7 +1150,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@>=0.6.2, colors@~1.1.2: +colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1322,9 +1317,9 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-loader@^0.27.3: - version "0.27.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.27.3.tgz#69ab6f47b69bfb1b5acee61bac2aab14302ff0dc" +css-loader@^0.28.0: + version "0.28.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.2.tgz#0ff48e1d6013afcdb585d46c1e61a5fcd036404e" dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" @@ -1337,6 +1332,7 @@ css-loader@^0.27.3: postcss-modules-local-by-default "^1.0.1" postcss-modules-scope "^1.0.0" postcss-modules-values "^1.1.0" + postcss-value-parser "^3.3.0" source-list-map "^0.1.7" css-selector-tokenizer@^0.6.0: @@ -1735,9 +1731,9 @@ eslint-plugin-react@6.10.3: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint@3.18.0: - version "3.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" +eslint@3.19.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -1977,9 +1973,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" +file-loader@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.1.tgz#6b328ee1234a729e4e47d36375dd6d35c0e1db84" dependencies: loader-utils "^1.0.2" @@ -2050,13 +2046,9 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-parser@0.40.0: - version "0.40.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.40.0.tgz#b3444742189093323c4319c4fe9d35391f46bcbc" - dependencies: - ast-types "0.8.18" - colors ">=0.6.2" - minimist ">=0.2.0" +flow-parser@0.45.0: + version "0.45.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.45.0.tgz#aa29d4ae27f06aa02817772bba0fcbefef7e62f0" for-in@^1.0.1: version "1.0.2" @@ -3303,7 +3295,7 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@1.2.0, minimist@>=0.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3949,16 +3941,16 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-0.22.0.tgz#7b37c4480d0858180407e5a8e13f0f47da7385d2" +prettier@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.3.1.tgz#fa0ea84b45ac0ba6de6a1e4cecdcff900d563151" dependencies: - ast-types "0.9.4" + ast-types "0.9.8" babel-code-frame "6.22.0" - babylon "6.15.0" + babylon "7.0.0-beta.8" chalk "1.1.3" esutils "2.0.2" - flow-parser "0.40.0" + flow-parser "0.45.0" get-stdin "5.0.1" glob "7.1.1" jest-validate "19.0.0" @@ -4714,9 +4706,9 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.14.1.tgz#27b9b6c9822adf8c4748e02a1efae229405d79a5" +style-loader@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.16.1.tgz#50e325258d4e78421dd9680636b41e8661595d10" dependencies: loader-utils "^1.0.2" @@ -5162,6 +5154,10 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.1" +winamp-eqf@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/winamp-eqf/-/winamp-eqf-0.1.0.tgz#f8a60aee30591343df60e72c0c290a203d1c9615" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"