initial
This commit is contained in:
49
Assets/web/.eslintrc.js
Normal file
49
Assets/web/.eslintrc.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2021: true,
|
||||||
|
},
|
||||||
|
extends: ["eslint:recommended", "plugin:react/recommended"],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
env: {
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
files: [".eslintrc.{js,cjs}"],
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: "script",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: "latest",
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
plugins: ["react"],
|
||||||
|
rules: {
|
||||||
|
"no-extra-semi": "error",
|
||||||
|
},
|
||||||
|
};
|
||||||
23
Assets/web/.gitignore
vendored
Normal file
23
Assets/web/.gitignore
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
/.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
70
Assets/web/README.md
Normal file
70
Assets/web/README.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Getting Started with Create React App
|
||||||
|
|
||||||
|
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||||
|
|
||||||
|
## Available Scripts
|
||||||
|
|
||||||
|
In the project directory, you can run:
|
||||||
|
|
||||||
|
### `npm start`
|
||||||
|
|
||||||
|
Runs the app in the development mode.\
|
||||||
|
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
|
||||||
|
|
||||||
|
The page will reload when you make changes.\
|
||||||
|
You may also see any lint errors in the console.
|
||||||
|
|
||||||
|
### `npm test`
|
||||||
|
|
||||||
|
Launches the test runner in the interactive watch mode.\
|
||||||
|
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||||
|
|
||||||
|
### `npm run build`
|
||||||
|
|
||||||
|
Builds the app for production to the `build` folder.\
|
||||||
|
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||||
|
|
||||||
|
The build is minified and the filenames include the hashes.\
|
||||||
|
Your app is ready to be deployed!
|
||||||
|
|
||||||
|
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||||
|
|
||||||
|
### `npm run eject`
|
||||||
|
|
||||||
|
**Note: this is a one-way operation. Once you `eject`, you can't go back!**
|
||||||
|
|
||||||
|
If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||||
|
|
||||||
|
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
|
||||||
|
|
||||||
|
You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
|
||||||
|
|
||||||
|
## Learn More
|
||||||
|
|
||||||
|
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||||
|
|
||||||
|
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||||
|
|
||||||
|
### Code Splitting
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
|
||||||
|
|
||||||
|
### Analyzing the Bundle Size
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
|
||||||
|
|
||||||
|
### Making a Progressive Web App
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
|
||||||
|
|
||||||
|
### Advanced Configuration
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
|
||||||
|
|
||||||
|
### `npm run build` fails to minify
|
||||||
|
|
||||||
|
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
|
||||||
18961
Assets/web/package-lock.json
generated
Normal file
18961
Assets/web/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
51
Assets/web/package.json
Normal file
51
Assets/web/package.json
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"name": "webviewplugin-gui",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@emotion/react": "^11.11.1",
|
||||||
|
"@emotion/styled": "^11.11.0",
|
||||||
|
"@fontsource/roboto": "^5.0.3",
|
||||||
|
"@mui/icons-material": "^5.13.7",
|
||||||
|
"@mui/material": "^5.13.7",
|
||||||
|
"@testing-library/jest-dom": "^5.16.5",
|
||||||
|
"@testing-library/react": "^13.4.0",
|
||||||
|
"@testing-library/user-event": "^13.5.0",
|
||||||
|
"juce-framework-frontend": "file:C:/Users/mickl/Downloads/JUCE/modules/juce_gui_extra/native/javascript",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0",
|
||||||
|
"react-knob-headless": "0.4.0",
|
||||||
|
"react-scripts": "5.0.1",
|
||||||
|
"web-vitals": "^2.1.4"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "react-scripts start",
|
||||||
|
"build": "react-scripts build",
|
||||||
|
"test": "react-scripts test",
|
||||||
|
"eject": "react-scripts eject",
|
||||||
|
"zip": "npm-build-zip --destination=../"
|
||||||
|
},
|
||||||
|
"eslintConfig": {
|
||||||
|
"extends": [
|
||||||
|
"react-app",
|
||||||
|
"react-app/jest"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"browserslist": {
|
||||||
|
"production": [
|
||||||
|
">0.2%",
|
||||||
|
"not dead",
|
||||||
|
"not op_mini all"
|
||||||
|
],
|
||||||
|
"development": [
|
||||||
|
"last 1 chrome version",
|
||||||
|
"last 1 firefox version",
|
||||||
|
"last 1 safari version"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "^8.43.0",
|
||||||
|
"eslint-plugin-react": "^7.32.2",
|
||||||
|
"npm-build-zip": "^1.0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Assets/web/public/favicon.ico
Normal file
BIN
Assets/web/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
43
Assets/web/public/index.html
Normal file
43
Assets/web/public/index.html
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="theme-color" content="#000000" />
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="Web site created using create-react-app"
|
||||||
|
/>
|
||||||
|
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||||
|
<!--
|
||||||
|
manifest.json provides metadata used when your web app is installed on a
|
||||||
|
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||||
|
-->
|
||||||
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||||
|
<!--
|
||||||
|
Notice the use of %PUBLIC_URL% in the tags above.
|
||||||
|
It will be replaced with the URL of the `public` folder during the build.
|
||||||
|
Only files inside the `public` folder can be referenced from the HTML.
|
||||||
|
|
||||||
|
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||||
|
work correctly both with client-side routing and a non-root public URL.
|
||||||
|
Learn how to configure a non-root public URL by running `npm run build`.
|
||||||
|
-->
|
||||||
|
<title>Ladder Filter</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
<div id="root"></div>
|
||||||
|
<!--
|
||||||
|
This HTML file is a template.
|
||||||
|
If you open it directly in the browser, you will see an empty page.
|
||||||
|
|
||||||
|
You can add webfonts, meta tags, or analytics to this file.
|
||||||
|
The build step will place the bundled scripts into the <body> tag.
|
||||||
|
|
||||||
|
To begin the development, run `npm start` or `yarn start`.
|
||||||
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
|
-->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
25
Assets/web/public/manifest.json
Normal file
25
Assets/web/public/manifest.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"short_name": "Ladder Filter",
|
||||||
|
"name": "Ladder Filter",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
|
"type": "image/x-icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": ".",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
||||||
3
Assets/web/public/robots.txt
Normal file
3
Assets/web/public/robots.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# https://www.robotstxt.org/robotstxt.html
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
0
Assets/web/src/App.css
Normal file
0
Assets/web/src/App.css
Normal file
473
Assets/web/src/App.js
Normal file
473
Assets/web/src/App.js
Normal file
@ -0,0 +1,473 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
import "@fontsource/roboto/300.css";
|
||||||
|
import "@fontsource/roboto/400.css";
|
||||||
|
import "@fontsource/roboto/500.css";
|
||||||
|
import "@fontsource/roboto/700.css";
|
||||||
|
|
||||||
|
import Box from "@mui/material/Container";
|
||||||
|
import Checkbox from "@mui/material/Checkbox";
|
||||||
|
import Typography from "@mui/material/Typography";
|
||||||
|
import Container from "@mui/material/Container";
|
||||||
|
import Slider from "@mui/material/Slider";
|
||||||
|
import Button from "@mui/material/Button";
|
||||||
|
import CardActions from "@mui/material/CardActions";
|
||||||
|
import Snackbar from "@mui/material/Snackbar";
|
||||||
|
import IconButton from "@mui/material/IconButton";
|
||||||
|
import CloseIcon from "@mui/icons-material/Close";
|
||||||
|
import InputLabel from "@mui/material/InputLabel";
|
||||||
|
import MenuItem from "@mui/material/MenuItem";
|
||||||
|
import FormControl from "@mui/material/FormControl";
|
||||||
|
import Select from "@mui/material/Select";
|
||||||
|
import FormGroup from "@mui/material/FormGroup";
|
||||||
|
import FormControlLabel from "@mui/material/FormControlLabel";
|
||||||
|
|
||||||
|
import { React, useState, useEffect, useRef } from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
|
import * as Juce from "juce-framework-frontend";
|
||||||
|
|
||||||
|
import "./App.css";
|
||||||
|
import { KnobPercentage } from "./Components/KnobPercentage";
|
||||||
|
|
||||||
|
// Custom attributes in React must be in all lower case
|
||||||
|
const controlParameterIndexAnnotation = "controlparameterindex";
|
||||||
|
|
||||||
|
function JuceSlider({ identifier, title }) {
|
||||||
|
JuceSlider.propTypes = {
|
||||||
|
identifier: PropTypes.string,
|
||||||
|
title: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
const sliderState = Juce.getSliderState(identifier);
|
||||||
|
|
||||||
|
const [value, setValue] = useState(sliderState.getNormalisedValue());
|
||||||
|
const [properties, setProperties] = useState(sliderState.properties);
|
||||||
|
|
||||||
|
const handleChange = (event, newValue) => {
|
||||||
|
sliderState.setNormalisedValue(newValue);
|
||||||
|
setValue(newValue);
|
||||||
|
};
|
||||||
|
|
||||||
|
const mouseDown = () => {
|
||||||
|
sliderState.sliderDragStarted();
|
||||||
|
};
|
||||||
|
|
||||||
|
const changeCommitted = (event, newValue) => {
|
||||||
|
sliderState.setNormalisedValue(newValue);
|
||||||
|
sliderState.sliderDragEnded();
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const valueListenerId = sliderState.valueChangedEvent.addListener(() => {
|
||||||
|
setValue(sliderState.getNormalisedValue());
|
||||||
|
});
|
||||||
|
const propertiesListenerId = sliderState.propertiesChangedEvent.addListener(
|
||||||
|
() => setProperties(sliderState.properties)
|
||||||
|
);
|
||||||
|
|
||||||
|
return function cleanup() {
|
||||||
|
sliderState.valueChangedEvent.removeListener(valueListenerId);
|
||||||
|
sliderState.propertiesChangedEvent.removeListener(propertiesListenerId);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
function calculateValue() {
|
||||||
|
return sliderState.getScaledValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
{...{
|
||||||
|
[controlParameterIndexAnnotation]:
|
||||||
|
sliderState.properties.parameterIndex,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography sx={{ mt: 1.5 }}>
|
||||||
|
{properties.name}: {sliderState.getScaledValue()} {properties.label}
|
||||||
|
</Typography>
|
||||||
|
<KnobPercentage theme="stone" label={properties.name} />
|
||||||
|
<p>
|
||||||
|
{sliderState.getScaledValue()} {properties.label}
|
||||||
|
</p>
|
||||||
|
<Slider
|
||||||
|
aria-label={title}
|
||||||
|
value={value}
|
||||||
|
scale={calculateValue}
|
||||||
|
onChange={handleChange}
|
||||||
|
min={0}
|
||||||
|
max={1}
|
||||||
|
step={1 / (properties.numSteps - 1)}
|
||||||
|
onChangeCommitted={changeCommitted}
|
||||||
|
onMouseDown={mouseDown}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function JuceCheckbox({ identifier }) {
|
||||||
|
JuceCheckbox.propTypes = {
|
||||||
|
identifier: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
const checkboxState = Juce.getToggleState(identifier);
|
||||||
|
|
||||||
|
const [value, setValue] = useState(checkboxState.getValue());
|
||||||
|
const [properties, setProperties] = useState(checkboxState.properties);
|
||||||
|
|
||||||
|
const handleChange = (event) => {
|
||||||
|
checkboxState.setValue(event.target.checked);
|
||||||
|
setValue(event.target.checked);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const valueListenerId = checkboxState.valueChangedEvent.addListener(() => {
|
||||||
|
setValue(checkboxState.getValue());
|
||||||
|
});
|
||||||
|
const propertiesListenerId =
|
||||||
|
checkboxState.propertiesChangedEvent.addListener(() =>
|
||||||
|
setProperties(checkboxState.properties)
|
||||||
|
);
|
||||||
|
|
||||||
|
return function cleanup() {
|
||||||
|
checkboxState.valueChangedEvent.removeListener(valueListenerId);
|
||||||
|
checkboxState.propertiesChangedEvent.removeListener(propertiesListenerId);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const cb = <Checkbox checked={value} onChange={handleChange} />;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
{...{
|
||||||
|
[controlParameterIndexAnnotation]:
|
||||||
|
checkboxState.properties.parameterIndex,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<FormGroup>
|
||||||
|
<FormControlLabel control={cb} label={properties.name} />
|
||||||
|
</FormGroup>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function JuceComboBox({ identifier }) {
|
||||||
|
JuceComboBox.propTypes = {
|
||||||
|
identifier: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
const comboBoxState = Juce.getComboBoxState(identifier);
|
||||||
|
|
||||||
|
const [value, setValue] = useState(comboBoxState.getChoiceIndex());
|
||||||
|
const [properties, setProperties] = useState(comboBoxState.properties);
|
||||||
|
|
||||||
|
const handleChange = (event) => {
|
||||||
|
comboBoxState.setChoiceIndex(event.target.value);
|
||||||
|
setValue(event.target.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const valueListenerId = comboBoxState.valueChangedEvent.addListener(() => {
|
||||||
|
setValue(comboBoxState.getChoiceIndex());
|
||||||
|
});
|
||||||
|
const propertiesListenerId =
|
||||||
|
comboBoxState.propertiesChangedEvent.addListener(() => {
|
||||||
|
setProperties(comboBoxState.properties);
|
||||||
|
});
|
||||||
|
|
||||||
|
return function cleanup() {
|
||||||
|
comboBoxState.valueChangedEvent.removeListener(valueListenerId);
|
||||||
|
comboBoxState.propertiesChangedEvent.removeListener(propertiesListenerId);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
{...{
|
||||||
|
[controlParameterIndexAnnotation]:
|
||||||
|
comboBoxState.properties.parameterIndex,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<FormControl fullWidth>
|
||||||
|
<InputLabel id={identifier}>{properties.name}</InputLabel>
|
||||||
|
<Select
|
||||||
|
labelId={identifier}
|
||||||
|
value={value}
|
||||||
|
label={properties.name}
|
||||||
|
onChange={handleChange}
|
||||||
|
>
|
||||||
|
{properties.choices.map((choice, i) => (
|
||||||
|
<MenuItem value={i} key={i}>
|
||||||
|
{choice}
|
||||||
|
</MenuItem>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sayHello = Juce.getNativeFunction("sayHello");
|
||||||
|
|
||||||
|
const SpectrumDataReceiver_eventId = "spectrumData";
|
||||||
|
|
||||||
|
function interpolate(a, b, s) {
|
||||||
|
let result = new Array(a.length).fill(0);
|
||||||
|
|
||||||
|
for (const [i, val] of a.entries()) result[i] += (1 - s) * val;
|
||||||
|
|
||||||
|
for (const [i, val] of b.entries()) result[i] += s * val;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mod(dividend, divisor) {
|
||||||
|
const quotient = Math.floor(dividend / divisor);
|
||||||
|
return dividend - divisor * quotient;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SpectrumDataReceiver {
|
||||||
|
constructor(bufferLength) {
|
||||||
|
this.bufferLength = bufferLength;
|
||||||
|
this.buffer = new Array(this.bufferLength);
|
||||||
|
this.readIndex = 0;
|
||||||
|
this.writeIndex = 0;
|
||||||
|
this.lastTimeStampMs = 0;
|
||||||
|
this.timeResolutionMs = 0;
|
||||||
|
|
||||||
|
let self = this;
|
||||||
|
this.spectrumDataRegistrationId = window.__JUCE__.backend.addEventListener(
|
||||||
|
SpectrumDataReceiver_eventId,
|
||||||
|
() => {
|
||||||
|
fetch(Juce.getBackendResourceAddress("spectrumData.json"))
|
||||||
|
.then((response) => response.text())
|
||||||
|
.then((text) => {
|
||||||
|
const data = JSON.parse(text);
|
||||||
|
|
||||||
|
if (self.timeResolutionMs == 0) {
|
||||||
|
self.timeResolutionMs = data.timeResolutionMs;
|
||||||
|
|
||||||
|
// We want to stay behind the write index by a full batch plus one
|
||||||
|
// so that we can keep reading buffered frames until we receive the
|
||||||
|
// new batch
|
||||||
|
self.readIndex = -data.frames.length - 1;
|
||||||
|
|
||||||
|
self.buffer.fill(new Array(data.frames[0].length).fill(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const f of data.frames)
|
||||||
|
self.buffer[mod(self.writeIndex++, self.bufferLength)] = f;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getBufferItem(index) {
|
||||||
|
return this.buffer[mod(index, this.buffer.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
getLevels(timeStampMs) {
|
||||||
|
if (this.timeResolutionMs == 0) return null;
|
||||||
|
|
||||||
|
const previousTimeStampMs = this.lastTimeStampMs;
|
||||||
|
this.lastTimeStampMs = timeStampMs;
|
||||||
|
|
||||||
|
if (previousTimeStampMs == 0) return this.buffer[0];
|
||||||
|
|
||||||
|
const timeAdvance =
|
||||||
|
(timeStampMs - previousTimeStampMs) / this.timeResolutionMs;
|
||||||
|
this.readIndex += timeAdvance;
|
||||||
|
|
||||||
|
const integralPart = Math.floor(this.readIndex);
|
||||||
|
const fractionalPart = this.readIndex - integralPart;
|
||||||
|
|
||||||
|
return interpolate(
|
||||||
|
this.getBufferItem(integralPart),
|
||||||
|
this.getBufferItem(integralPart + 1),
|
||||||
|
fractionalPart
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
unregister() {
|
||||||
|
window.__JUCE__.backend.removeEventListener(
|
||||||
|
this.spectrumDataRegistrationId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function FreqBandInfo() {
|
||||||
|
const canvasRef = useRef(null);
|
||||||
|
let dataReceiver = null;
|
||||||
|
let isActive = true;
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
const render = (timeStampMs) => {
|
||||||
|
const canvas = canvasRef.current;
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
|
||||||
|
var grd = ctx.createLinearGradient(0, 0, 0, canvas.height);
|
||||||
|
grd.addColorStop(0, "#1976d2");
|
||||||
|
grd.addColorStop(1, "#dae9f8");
|
||||||
|
ctx.fillStyle = grd;
|
||||||
|
|
||||||
|
if (dataReceiver != null) {
|
||||||
|
const levels = dataReceiver.getLevels(timeStampMs);
|
||||||
|
|
||||||
|
if (levels != null) {
|
||||||
|
const numBars = levels.length;
|
||||||
|
const barWidth = canvas.width / numBars;
|
||||||
|
const barHeight = canvas.height;
|
||||||
|
|
||||||
|
for (const [i, l] of levels.entries()) {
|
||||||
|
ctx.fillRect(
|
||||||
|
i * barWidth,
|
||||||
|
barHeight - l * barHeight,
|
||||||
|
barWidth,
|
||||||
|
l * barHeight
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isActive) window.requestAnimationFrame(render);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
dataReceiver = new SpectrumDataReceiver(10);
|
||||||
|
isActive = true;
|
||||||
|
window.requestAnimationFrame(render);
|
||||||
|
|
||||||
|
return function cleanup() {
|
||||||
|
isActive = false;
|
||||||
|
dataReceiver.unregister();
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const canvasStyle = {
|
||||||
|
marginLeft: "0",
|
||||||
|
marginRight: "0",
|
||||||
|
marginTop: "1em",
|
||||||
|
display: "block",
|
||||||
|
width: "94%",
|
||||||
|
bottom: "0",
|
||||||
|
position: "absolute",
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box>
|
||||||
|
<canvas height={90} style={canvasStyle} ref={canvasRef}></canvas>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
const controlParameterIndexUpdater = new Juce.ControlParameterIndexUpdater(
|
||||||
|
controlParameterIndexAnnotation
|
||||||
|
);
|
||||||
|
|
||||||
|
document.addEventListener("mousemove", (event) => {
|
||||||
|
controlParameterIndexUpdater.handleMouseMove(event);
|
||||||
|
});
|
||||||
|
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
const [snackbarMessage, setMessage] = useState("No message received yet");
|
||||||
|
|
||||||
|
const openSnackbar = () => {
|
||||||
|
setOpen(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleClose = (event, reason) => {
|
||||||
|
if (reason === "clickaway") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
const action = (
|
||||||
|
<>
|
||||||
|
<IconButton
|
||||||
|
size="small"
|
||||||
|
aria-label="close"
|
||||||
|
color="inherit"
|
||||||
|
onClick={handleClose}
|
||||||
|
>
|
||||||
|
<CloseIcon fontSize="small" />
|
||||||
|
</IconButton>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Container>
|
||||||
|
<JuceSlider identifier="formantSlider" title="Formant" />
|
||||||
|
<JuceSlider identifier="cutoffSlider" title="Cutoff" />
|
||||||
|
</Container>
|
||||||
|
<CardActions style={{ justifyContent: "center" }}>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
sx={{ marginTop: 2 }}
|
||||||
|
onClick={() => {
|
||||||
|
sayHello("JUCE").then((result) => {
|
||||||
|
setMessage(result);
|
||||||
|
openSnackbar();
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Call backend function
|
||||||
|
</Button>
|
||||||
|
</CardActions>
|
||||||
|
<CardActions style={{ justifyContent: "center" }}>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
sx={{ marginTop: 2 }}
|
||||||
|
onClick={() => {
|
||||||
|
fetch(Juce.getBackendResourceAddress("data.txt"))
|
||||||
|
.then((response) => response.text())
|
||||||
|
.then((text) => {
|
||||||
|
setMessage("Data fetched: " + text);
|
||||||
|
openSnackbar();
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Fetch data from backend
|
||||||
|
</Button>
|
||||||
|
</CardActions>
|
||||||
|
<JuceCheckbox identifier="muteToggle" />
|
||||||
|
<br></br>
|
||||||
|
<JuceComboBox identifier="filterTypeCombo" />
|
||||||
|
<FreqBandInfo></FreqBandInfo>
|
||||||
|
<Snackbar
|
||||||
|
open={open}
|
||||||
|
autoHideDuration={6000}
|
||||||
|
onClose={handleClose}
|
||||||
|
message={snackbarMessage}
|
||||||
|
action={action}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
||||||
31
Assets/web/src/App.test.js
Normal file
31
Assets/web/src/App.test.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import App from './App';
|
||||||
|
|
||||||
|
test('renders learn react link', () => {
|
||||||
|
render(<App />);
|
||||||
|
const linkElement = screen.getByText(/learn react/i);
|
||||||
|
expect(linkElement).toBeInTheDocument();
|
||||||
|
});
|
||||||
88
Assets/web/src/Components/KnobBase.js
Normal file
88
Assets/web/src/Components/KnobBase.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import clsx from "clsx";
|
||||||
|
import { useId, useState, React } from "react";
|
||||||
|
import {
|
||||||
|
KnobHeadless,
|
||||||
|
KnobHeadlessLabel,
|
||||||
|
KnobHeadlessOutput,
|
||||||
|
useKnobKeyboardControls,
|
||||||
|
} from "react-knob-headless";
|
||||||
|
import { mapFrom01Linear, mapTo01Linear } from "@dsp-ts/math";
|
||||||
|
import { KnobBaseThumb } from "./KnobBaseThumb";
|
||||||
|
|
||||||
|
export function KnobBase({
|
||||||
|
theme,
|
||||||
|
label,
|
||||||
|
valueDefault,
|
||||||
|
valueMin,
|
||||||
|
valueMax,
|
||||||
|
valueRawRoundFn,
|
||||||
|
valueRawDisplayFn,
|
||||||
|
axis,
|
||||||
|
stepFn,
|
||||||
|
stepLargerFn,
|
||||||
|
mapTo01 = mapTo01Linear,
|
||||||
|
mapFrom01 = mapFrom01Linear,
|
||||||
|
}) {
|
||||||
|
KnobBase.propTypes = {
|
||||||
|
theme: KnobBase.string,
|
||||||
|
label: KnobBase.string,
|
||||||
|
valueDefault: KnobBase.number,
|
||||||
|
valueMin: KnobBase.number,
|
||||||
|
valueMax: KnobBase.number,
|
||||||
|
valueRawRoundFn: KnobBase.func,
|
||||||
|
valueRawDisplayFn: KnobBase.func,
|
||||||
|
axis: KnobBase.string,
|
||||||
|
stepFn: KnobBase.func,
|
||||||
|
stepLargerFn: KnobBase.func,
|
||||||
|
mapTo01: KnobBase.func,
|
||||||
|
mapFrom01: KnobBase.func,
|
||||||
|
};
|
||||||
|
const knobId = useId();
|
||||||
|
const labelId = useId();
|
||||||
|
const [valueRaw, setValueRaw] = useState(valueDefault);
|
||||||
|
const value01 = mapTo01(valueRaw, valueMin, valueMax);
|
||||||
|
const step = stepFn(valueRaw);
|
||||||
|
const stepLarger = stepLargerFn(valueRaw);
|
||||||
|
const dragSensitivity = 0.006;
|
||||||
|
|
||||||
|
const keyboardControlHandlers = useKnobKeyboardControls({
|
||||||
|
valueRaw,
|
||||||
|
valueMin,
|
||||||
|
valueMax,
|
||||||
|
step,
|
||||||
|
stepLarger,
|
||||||
|
onValueRawChange: setValueRaw,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={clsx(
|
||||||
|
"w-16 flex flex-col gap-0.5 justify-center items-center text-xs select-none",
|
||||||
|
"outline-none focus-within:outline-1 focus-within:outline-offset-4 focus-within:outline-stone-300"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<KnobHeadlessLabel id={labelId}>{label}</KnobHeadlessLabel>
|
||||||
|
<KnobHeadless
|
||||||
|
id={knobId}
|
||||||
|
aria-labelledby={labelId}
|
||||||
|
className="relative w-16 h-16 outline-none"
|
||||||
|
valueMin={valueMin}
|
||||||
|
valueMax={valueMax}
|
||||||
|
valueRaw={valueRaw}
|
||||||
|
valueRawRoundFn={valueRawRoundFn}
|
||||||
|
valueRawDisplayFn={valueRawDisplayFn}
|
||||||
|
dragSensitivity={dragSensitivity}
|
||||||
|
axis={axis}
|
||||||
|
mapTo01={mapTo01}
|
||||||
|
mapFrom01={mapFrom01}
|
||||||
|
onValueRawChange={setValueRaw}
|
||||||
|
{...keyboardControlHandlers}
|
||||||
|
>
|
||||||
|
<KnobBaseThumb theme={theme} value01={value01} />
|
||||||
|
</KnobHeadless>
|
||||||
|
<KnobHeadlessOutput htmlFor={knobId}>
|
||||||
|
{valueRawDisplayFn(valueRaw)}
|
||||||
|
</KnobHeadlessOutput>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
28
Assets/web/src/Components/KnobBaseThumb.js
Normal file
28
Assets/web/src/Components/KnobBaseThumb.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import clsx from "clsx";
|
||||||
|
import { mapFrom01Linear } from "@dsp-ts/math";
|
||||||
|
import { React } from "react";
|
||||||
|
|
||||||
|
export function KnobBaseThumb({ theme, value01 }) {
|
||||||
|
KnobBaseThumb.propTypes = {
|
||||||
|
theme: KnobBaseThumb.string,
|
||||||
|
value01: KnobBaseThumb.number,
|
||||||
|
};
|
||||||
|
const angleMin = -145;
|
||||||
|
const angleMax = 145;
|
||||||
|
const angle = mapFrom01Linear(value01, angleMin, angleMax);
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={clsx(
|
||||||
|
"absolute h-full w-full rounded-full",
|
||||||
|
theme === "stone" && "bg-stone-300",
|
||||||
|
theme === "pink" && "bg-pink-300",
|
||||||
|
theme === "green" && "bg-green-300",
|
||||||
|
theme === "sky" && "bg-sky-300"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<div className="absolute h-full w-full" style={{ rotate: `${angle}deg` }}>
|
||||||
|
<div className="absolute left-1/2 top-0 h-1/2 w-[2px] -translate-x-1/2 rounded-sm bg-stone-950" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
33
Assets/web/src/Components/KnobPercentage.js
Normal file
33
Assets/web/src/Components/KnobPercentage.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
"use client";
|
||||||
|
import { KnobBase } from "./KnobBase";
|
||||||
|
import { React } from "react";
|
||||||
|
|
||||||
|
export function KnobPercentage({ theme, label, axis }) {
|
||||||
|
KnobPercentage.propTypes = {
|
||||||
|
theme: KnobPercentage.string,
|
||||||
|
label: KnobPercentage.string,
|
||||||
|
axis: KnobPercentage.string,
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<KnobBase
|
||||||
|
valueDefault={valueDefault}
|
||||||
|
valueMin={valueMin}
|
||||||
|
valueMax={valueMax}
|
||||||
|
stepFn={stepFn}
|
||||||
|
stepLargerFn={stepLargerFn}
|
||||||
|
valueRawRoundFn={valueRawRoundFn}
|
||||||
|
valueRawDisplayFn={valueRawDisplayFn}
|
||||||
|
theme={theme}
|
||||||
|
label={label}
|
||||||
|
axis={axis}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const valueMin = 0;
|
||||||
|
const valueMax = 100;
|
||||||
|
const valueDefault = 50;
|
||||||
|
const stepFn = (valueRaw) => 1;
|
||||||
|
const stepLargerFn = (valueRaw) => 10;
|
||||||
|
const valueRawRoundFn = Math.round;
|
||||||
|
const valueRawDisplayFn = (valueRaw) => `${valueRawRoundFn(valueRaw)}%`;
|
||||||
14
Assets/web/src/index.css
Normal file
14
Assets/web/src/index.css
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||||
|
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||||
|
sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||||
|
monospace;
|
||||||
|
}
|
||||||
40
Assets/web/src/index.js
Normal file
40
Assets/web/src/index.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import ReactDOM from "react-dom/client";
|
||||||
|
import "./index.css";
|
||||||
|
import App from "./App";
|
||||||
|
import reportWebVitals from "./reportWebVitals";
|
||||||
|
|
||||||
|
const root = ReactDOM.createRoot(document.getElementById("root"));
|
||||||
|
root.render(
|
||||||
|
<React.StrictMode>
|
||||||
|
<App />
|
||||||
|
</React.StrictMode>
|
||||||
|
);
|
||||||
|
|
||||||
|
// If you want to start measuring performance in your app, pass a function
|
||||||
|
// to log results (for example: reportWebVitals(console.log))
|
||||||
|
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||||
|
reportWebVitals();
|
||||||
36
Assets/web/src/reportWebVitals.js
Normal file
36
Assets/web/src/reportWebVitals.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const reportWebVitals = onPerfEntry => {
|
||||||
|
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||||
|
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||||
|
getCLS(onPerfEntry);
|
||||||
|
getFID(onPerfEntry);
|
||||||
|
getFCP(onPerfEntry);
|
||||||
|
getLCP(onPerfEntry);
|
||||||
|
getTTFB(onPerfEntry);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default reportWebVitals;
|
||||||
28
Assets/web/src/setupTests.js
Normal file
28
Assets/web/src/setupTests.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||||
|
// allows you to do things like:
|
||||||
|
// expect(element).toHaveTextContent(/react/i)
|
||||||
|
// learn more: https://github.com/testing-library/jest-dom
|
||||||
|
import '@testing-library/jest-dom';
|
||||||
39
Assets/webviewplugin-gui-fallback.html
Normal file
39
Assets/webviewplugin-gui-fallback.html
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>WebViewPluginDemo</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>WebViewPluginDemo</h1>
|
||||||
|
<p>
|
||||||
|
This document is a placeholder for the GUI component of the
|
||||||
|
WebViewPluginDemo.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
To build the fully fledged user interface you need to install
|
||||||
|
<a href="https://nodejs.org">node.js</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Then navigate into the
|
||||||
|
<code>examples/Plugins/WebViewPluginDemoGUI</code> directory inside your JUCE
|
||||||
|
directory, and issue the following commands.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
npm run zip
|
||||||
|
</pre
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
This will build the full GUI package and place it in the
|
||||||
|
<code>Assets</code> directory.
|
||||||
|
</p>
|
||||||
|
<p>After this, rebuild and restart this demo.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
Assets/webviewplugin-gui_1.0.0.zip
Normal file
BIN
Assets/webviewplugin-gui_1.0.0.zip
Normal file
Binary file not shown.
63
Builds/VisualStudio2022/.gitattributes
vendored
Normal file
63
Builds/VisualStudio2022/.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
||||||
363
Builds/VisualStudio2022/.gitignore
vendored
Normal file
363
Builds/VisualStudio2022/.gitignore
vendored
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Oo]ut/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
46
Builds/VisualStudio2022/Harmonizer.sln
Normal file
46
Builds/VisualStudio2022/Harmonizer.sln
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Harmonizer - Standalone Plugin", "Harmonizer_StandalonePlugin.vcxproj", "{8783E3D7-E14D-FD2A-DBED-84B608A53965}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC} = {13753206-F62C-286C-51BE-24A788A74DCC}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Harmonizer - VST3", "Harmonizer_VST3.vcxproj", "{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC} = {13753206-F62C-286C-51BE-24A788A74DCC}
|
||||||
|
{D9575CDC-90C9-0628-790B-9EE0267491EE} = {D9575CDC-90C9-0628-790B-9EE0267491EE}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Harmonizer - Shared Code", "Harmonizer_SharedCode.vcxproj", "{13753206-F62C-286C-51BE-24A788A74DCC}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Harmonizer - VST3 Manifest Helper", "Harmonizer_VST3ManifestHelper.vcxproj", "{D9575CDC-90C9-0628-790B-9EE0267491EE}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}.Release|x64.Build.0 = Release|x64
|
||||||
|
{8783E3D7-E14D-FD2A-DBED-84B608A53965}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{8783E3D7-E14D-FD2A-DBED-84B608A53965}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{8783E3D7-E14D-FD2A-DBED-84B608A53965}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{8783E3D7-E14D-FD2A-DBED-84B608A53965}.Release|x64.Build.0 = Release|x64
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{13753206-F62C-286C-51BE-24A788A74DCC}.Release|x64.Build.0 = Release|x64
|
||||||
|
{D9575CDC-90C9-0628-790B-9EE0267491EE}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{D9575CDC-90C9-0628-790B-9EE0267491EE}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{D9575CDC-90C9-0628-790B-9EE0267491EE}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{D9575CDC-90C9-0628-790B-9EE0267491EE}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
4344
Builds/VisualStudio2022/Harmonizer_SharedCode.vcxproj
Normal file
4344
Builds/VisualStudio2022/Harmonizer_SharedCode.vcxproj
Normal file
File diff suppressed because it is too large
Load Diff
7686
Builds/VisualStudio2022/Harmonizer_SharedCode.vcxproj.filters
Normal file
7686
Builds/VisualStudio2022/Harmonizer_SharedCode.vcxproj.filters
Normal file
File diff suppressed because it is too large
Load Diff
179
Builds/VisualStudio2022/Harmonizer_StandalonePlugin.vcxproj
Normal file
179
Builds/VisualStudio2022/Harmonizer_StandalonePlugin.vcxproj
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project DefaultTargets="Build"
|
||||||
|
ToolsVersion="17.0"
|
||||||
|
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{8783E3D7-E14D-FD2A-DBED-84B608A53965}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
|
||||||
|
<ImportGroup Label="ExtensionSettings"/>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
|
||||||
|
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
|
||||||
|
Label="LocalAppDataPlatform"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<TargetExt>.exe</TargetExt>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\Standalone Plugin\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\Standalone Plugin\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Harmonizer</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>
|
||||||
|
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LibraryPath);$(SolutionDir)$(Platform)\$(Configuration)\Shared Code</LibraryPath>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\Standalone Plugin\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\Standalone Plugin\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Harmonizer</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>
|
||||||
|
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LibraryPath);$(SolutionDir)$(Platform)\$(Configuration)\Shared Code</LibraryPath>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=1;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\Harmonizer.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=1;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\Harmonizer.exe</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\Harmonizer.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\Harmonizer.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Full</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=1;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\Harmonizer.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=1;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\Harmonizer.exe</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\Harmonizer.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\Harmonizer.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp">
|
||||||
|
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_plugin_client_Standalone.cpp"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets"
|
||||||
|
Condition="Exists('packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets')"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebView2LoaderPreference>Static</WebView2LoaderPreference>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="JUCE Modules\juce_audio_plugin_client\Standalone">
|
||||||
|
<UniqueIdentifier>{725C0EA8-9736-764D-81E6-01695B6B00B3}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Modules\juce_audio_plugin_client">
|
||||||
|
<UniqueIdentifier>{BA0A76FA-458F-0B1C-02E9-ECFBF81140EC}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Modules">
|
||||||
|
<UniqueIdentifier>{FE955B6B-68AC-AA07-70D8-2413F6DB65C8}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Library Code">
|
||||||
|
<UniqueIdentifier>{7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_plugin_client_Standalone.cpp">
|
||||||
|
<Filter>JUCE Library Code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client\Standalone</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc">
|
||||||
|
<Filter>JUCE Library Code</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
288
Builds/VisualStudio2022/Harmonizer_VST3.vcxproj
Normal file
288
Builds/VisualStudio2022/Harmonizer_VST3.vcxproj
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project DefaultTargets="Build"
|
||||||
|
ToolsVersion="17.0"
|
||||||
|
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{9BA8E2D5-D6E4-047E-AD92-5F27FE6D3A6D}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
|
||||||
|
<ImportGroup Label="ExtensionSettings"/>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
|
||||||
|
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
|
||||||
|
Label="LocalAppDataPlatform"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<TargetExt>.dll</TargetExt>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\VST3\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\VST3\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Harmonizer</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>
|
||||||
|
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LibraryPath);$(SolutionDir)$(Platform)\$(Configuration)\Shared Code</LibraryPath>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\VST3\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\VST3\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Harmonizer</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>
|
||||||
|
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LibraryPath);$(SolutionDir)$(Platform)\$(Configuration)\Shared Code</LibraryPath>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=1;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\Harmonizer.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=1;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\Harmonizer.dll</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\Harmonizer.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\Harmonizer.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Lib>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>if "$(PROCESSOR_ARCHITECTURE)" == "x86" if defined PROCESSOR_ARCHITEW6432 (
|
||||||
|
echo : Warning: Toolchain configuration issue! You are using a 32-bit toolchain to compile a 64-bit target on a 64-bit system. This may cause problems with the build system. To resolve this, use the x64 version of MSBuild. You can invoke it directly at: "<VisualStudioPathHere>/MSBuild/Current/Bin/amd64/MSBuild.exe" Or, use the "x64 Native Tools Command Prompt" script.
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\Contents\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3\Contents"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3\Contents"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win"
|
||||||
|
)
|
||||||
|
</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /Y "$(OutDir)\Harmonizer.dll" "$(OutDir)\Harmonizer.vst3\Contents\x86_64-win\Harmonizer.vst3"
|
||||||
|
set manifest_generated=0
|
||||||
|
if "$(PROCESSOR_ARCHITECTURE)" == "ARM64" if "$(Platform)" == "x64" (
|
||||||
|
call :_generate_manifest
|
||||||
|
set manifest_generated=1
|
||||||
|
)
|
||||||
|
if "$(PROCESSOR_ARCHITECTURE)" == "AMD64" if "$(Platform)" == "x64" (
|
||||||
|
call :_generate_manifest
|
||||||
|
set manifest_generated=1
|
||||||
|
)
|
||||||
|
if %manifest_generated% equ 0 (
|
||||||
|
goto :_arch_mismatch
|
||||||
|
)
|
||||||
|
goto :_continue
|
||||||
|
:_generate_manifest
|
||||||
|
if exist "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json" (
|
||||||
|
del /s /q "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\Harmonizer.vst3\Contents\Resources\" (
|
||||||
|
mkdir "$(OutDir)\Harmonizer.vst3\Contents\Resources\"
|
||||||
|
)
|
||||||
|
"$(SolutionDir)$(Platform)\$(Configuration)\VST3 Manifest Helper\juce_vst3_helper.exe" > "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json"
|
||||||
|
if %ERRORLEVEL% equ 0 (
|
||||||
|
echo : Info: Successfully generated a manifest for Harmonizer
|
||||||
|
goto :_continue
|
||||||
|
) else (
|
||||||
|
echo : Info: The manifest helper failed
|
||||||
|
goto :_continue
|
||||||
|
)
|
||||||
|
:_arch_mismatch
|
||||||
|
echo : Info: VST3 manifest generation is disabled for Harmonizer because a AMD64 manifest helper cannot run on a host system processor detected to be $(PROCESSOR_ARCHITECTURE).
|
||||||
|
:_continue
|
||||||
|
</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Full</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=1;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\Harmonizer.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=1;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\Harmonizer.dll</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\Harmonizer.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\Harmonizer.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalDependencies>Harmonizer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Lib>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>if "$(PROCESSOR_ARCHITECTURE)" == "x86" if defined PROCESSOR_ARCHITEW6432 (
|
||||||
|
echo : Warning: Toolchain configuration issue! You are using a 32-bit toolchain to compile a 64-bit target on a 64-bit system. This may cause problems with the build system. To resolve this, use the x64 version of MSBuild. You can invoke it directly at: "<VisualStudioPathHere>/MSBuild/Current/Bin/amd64/MSBuild.exe" Or, use the "x64 Native Tools Command Prompt" script.
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\Contents\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3\Contents"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3\Contents"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win\" (
|
||||||
|
del /s /q "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win"
|
||||||
|
mkdir "$(OutDir)\\Harmonizer.vst3\Contents\x86_64-win"
|
||||||
|
)
|
||||||
|
</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /Y "$(OutDir)\Harmonizer.dll" "$(OutDir)\Harmonizer.vst3\Contents\x86_64-win\Harmonizer.vst3"
|
||||||
|
set manifest_generated=0
|
||||||
|
if "$(PROCESSOR_ARCHITECTURE)" == "ARM64" if "$(Platform)" == "x64" (
|
||||||
|
call :_generate_manifest
|
||||||
|
set manifest_generated=1
|
||||||
|
)
|
||||||
|
if "$(PROCESSOR_ARCHITECTURE)" == "AMD64" if "$(Platform)" == "x64" (
|
||||||
|
call :_generate_manifest
|
||||||
|
set manifest_generated=1
|
||||||
|
)
|
||||||
|
if %manifest_generated% equ 0 (
|
||||||
|
goto :_arch_mismatch
|
||||||
|
)
|
||||||
|
goto :_continue
|
||||||
|
:_generate_manifest
|
||||||
|
if exist "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json" (
|
||||||
|
del /s /q "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json"
|
||||||
|
)
|
||||||
|
if not exist "$(OutDir)\Harmonizer.vst3\Contents\Resources\" (
|
||||||
|
mkdir "$(OutDir)\Harmonizer.vst3\Contents\Resources\"
|
||||||
|
)
|
||||||
|
"$(SolutionDir)$(Platform)\$(Configuration)\VST3 Manifest Helper\juce_vst3_helper.exe" > "$(OutDir)\Harmonizer.vst3\Contents\Resources\moduleinfo.json"
|
||||||
|
if %ERRORLEVEL% equ 0 (
|
||||||
|
echo : Info: Successfully generated a manifest for Harmonizer
|
||||||
|
goto :_continue
|
||||||
|
) else (
|
||||||
|
echo : Info: The manifest helper failed
|
||||||
|
goto :_continue
|
||||||
|
)
|
||||||
|
:_arch_mismatch
|
||||||
|
echo : Info: VST3 manifest generation is disabled for Harmonizer because a AMD64 manifest helper cannot run on a host system processor detected to be $(PROCESSOR_ARCHITECTURE).
|
||||||
|
:_continue
|
||||||
|
</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ManifestHelper.cpp">
|
||||||
|
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\juce_audio_plugin_client_VST3.cpp">
|
||||||
|
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_plugin_client_VST3.cpp"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ModuleInfo.h"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets"
|
||||||
|
Condition="Exists('packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets')"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebView2LoaderPreference>Static</WebView2LoaderPreference>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
48
Builds/VisualStudio2022/Harmonizer_VST3.vcxproj.filters
Normal file
48
Builds/VisualStudio2022/Harmonizer_VST3.vcxproj.filters
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="JUCE Modules\juce_audio_plugin_client\VST3">
|
||||||
|
<UniqueIdentifier>{68760A18-ED41-41C7-2560-F3A65E9AD133}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Modules\juce_audio_plugin_client">
|
||||||
|
<UniqueIdentifier>{BA0A76FA-458F-0B1C-02E9-ECFBF81140EC}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Modules">
|
||||||
|
<UniqueIdentifier>{FE955B6B-68AC-AA07-70D8-2413F6DB65C8}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="JUCE Library Code">
|
||||||
|
<UniqueIdentifier>{7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ManifestHelper.cpp">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client\VST3</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ManifestHelper.mm">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client\VST3</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\juce_audio_plugin_client_VST3.cpp">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\juce_audio_plugin_client_VST3.mm">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_plugin_client_VST3.cpp">
|
||||||
|
<Filter>JUCE Library Code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ModuleInfo.h">
|
||||||
|
<Filter>JUCE Modules\juce_audio_plugin_client\VST3</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc">
|
||||||
|
<Filter>JUCE Library Code</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
170
Builds/VisualStudio2022/Harmonizer_VST3ManifestHelper.vcxproj
Normal file
170
Builds/VisualStudio2022/Harmonizer_VST3ManifestHelper.vcxproj
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project DefaultTargets="Build"
|
||||||
|
ToolsVersion="17.0"
|
||||||
|
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{D9575CDC-90C9-0628-790B-9EE0267491EE}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"
|
||||||
|
Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
|
||||||
|
<ImportGroup Label="ExtensionSettings"/>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
|
||||||
|
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
|
||||||
|
Label="LocalAppDataPlatform"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<TargetExt>.exe</TargetExt>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\VST3 Manifest Helper\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\VST3 Manifest Helper\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">juce_vst3_helper</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\VST3 Manifest Helper\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\VST3 Manifest Helper\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">juce_vst3_helper</TargetName>
|
||||||
|
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>
|
||||||
|
<PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PreBuildEventUseInBuild>
|
||||||
|
<PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</PostBuildEventUseInBuild>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\juce_vst3_helper.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\juce_vst3_helper.exe</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\juce_vst3_helper.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\juce_vst3_helper.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Manifest>
|
||||||
|
<AdditionalManifestFiles/>
|
||||||
|
</Manifest>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<HeaderFileName/>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Full</Optimization>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name="Harmonizer";JucePlugin_Desc="Harmonizer";JucePlugin_Manufacturer="yourcompany";JucePlugin_ManufacturerWebsite="www.yourcompany.com";JucePlugin_ManufacturerEmail="";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString="1.0.0";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category="Fx";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted="HarmonizerAU";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName="yourcompany: Harmonizer";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID="com.yourcompany.Harmonizer.factory";JucePlugin_ARADocumentArchiveID="com.yourcompany.Harmonizer.aradocumentarchive.1.0.0";JucePlugin_ARACompatibleArchiveIDs="";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<AssemblerListingLocation>$(IntDir)\</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>$(IntDir)\</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>$(IntDir)\juce_vst3_helper.pdb</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\..\..\..\..\Downloads\JUCE\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\..\Downloads\JUCE\modules;C:\Users\mickl\Downloads\juce-8.0.4-windows\JUCE\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_PROJUCER_VERSION=0x8000a;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_plugin_client=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_VST3_CAN_REPLACE_VST2=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;JucePlugin_Enable_IAA=0;JucePlugin_Enable_ARA=0;JucePlugin_Name=\"Harmonizer\";JucePlugin_Desc=\"Harmonizer\";JucePlugin_Manufacturer=\"yourcompany\";JucePlugin_ManufacturerWebsite=\"www.yourcompany.com\";JucePlugin_ManufacturerEmail=\"\";JucePlugin_ManufacturerCode=0x4d616e75;JucePlugin_PluginCode=0x456d6377;JucePlugin_IsSynth=0;JucePlugin_WantsMidiInput=1;JucePlugin_ProducesMidiOutput=0;JucePlugin_IsMidiEffect=0;JucePlugin_EditorRequiresKeyboardFocus=0;JucePlugin_Version=1.0.0;JucePlugin_VersionCode=0x10000;JucePlugin_VersionString=\"1.0.0\";JucePlugin_VSTUniqueID=JucePlugin_PluginCode;JucePlugin_VSTCategory=kPlugCategEffect;JucePlugin_Vst3Category=\"Fx\";JucePlugin_AUMainType='aufx';JucePlugin_AUSubType=JucePlugin_PluginCode;JucePlugin_AUExportPrefix=HarmonizerAU;JucePlugin_AUExportPrefixQuoted=\"HarmonizerAU\";JucePlugin_AUManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_CFBundleIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXIdentifier=com.yourcompany.Harmonizer;JucePlugin_AAXManufacturerCode=JucePlugin_ManufacturerCode;JucePlugin_AAXProductId=JucePlugin_PluginCode;JucePlugin_AAXCategory=0;JucePlugin_AAXDisableBypass=0;JucePlugin_AAXDisableMultiMono=0;JucePlugin_IAAType=0x6175726d;JucePlugin_IAASubType=JucePlugin_PluginCode;JucePlugin_IAAName=\"yourcompany: Harmonizer\";JucePlugin_VSTNumMidiInputs=16;JucePlugin_VSTNumMidiOutputs=16;JucePlugin_ARAContentTypes=0;JucePlugin_ARATransformationFlags=0;JucePlugin_ARAFactoryID=\"com.yourcompany.Harmonizer.factory\";JucePlugin_ARADocumentArchiveID=\"com.yourcompany.Harmonizer.aradocumentarchive.1.0.0\";JucePlugin_ARACompatibleArchiveIDs=\"\";JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone;PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)\juce_vst3_helper.exe</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(IntDir)\juce_vst3_helper.pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<LargeAddressAware>true</LargeAddressAware>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
|
</Link>
|
||||||
|
<Bscmake>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<OutputFile>$(IntDir)\juce_vst3_helper.bsc</OutputFile>
|
||||||
|
</Bscmake>
|
||||||
|
<Manifest>
|
||||||
|
<AdditionalManifestFiles/>
|
||||||
|
</Manifest>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\..\..\Downloads\JUCE\modules\juce_audio_plugin_client\VST3\juce_VST3ManifestHelper.cpp"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup/>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets"
|
||||||
|
Condition="Exists('packages\Microsoft.Web.WebView2.1.0.1901.177\build\native\Microsoft.Web.WebView2.targets')"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebView2LoaderPreference>Static</WebView2LoaderPreference>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup/>
|
||||||
|
<ItemGroup/>
|
||||||
|
<ItemGroup/>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include=".\resources.rc">
|
||||||
|
<Filter>JUCE Library Code</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
4
Builds/VisualStudio2022/packages.config
Normal file
4
Builds/VisualStudio2022/packages.config
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Web.WebView2" version="1.0.1901.177" />
|
||||||
|
</packages>
|
||||||
31
Builds/VisualStudio2022/resources.rc
Normal file
31
Builds/VisualStudio2022/resources.rc
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma code_page(65001)
|
||||||
|
|
||||||
|
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||||
|
#include JUCE_USER_DEFINED_RC_FILE
|
||||||
|
#else
|
||||||
|
|
||||||
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,0
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904E4"
|
||||||
|
BEGIN
|
||||||
|
VALUE "FileDescription", "Harmonizer\0"
|
||||||
|
VALUE "FileVersion", "1.0.0\0"
|
||||||
|
VALUE "ProductName", "Harmonizer\0"
|
||||||
|
VALUE "ProductVersion", "1.0.0\0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1252
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif
|
||||||
65
Harmonizer.jucer
Normal file
65
Harmonizer.jucer
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<JUCERPROJECT id="emcwmh" name="Harmonizer" projectType="audioplug" useAppConfig="0"
|
||||||
|
addUsingNamespaceToJuceHeader="1" jucerFormatVersion="1" pluginCharacteristicsValue="pluginWantsMidiIn"
|
||||||
|
pluginAUMainType="'aufx'" pluginAUIsSandboxSafe="1" defines="PIP_JUCE_EXAMPLES_DIRECTORY=QzpcVXNlcnNcbWlja2xcRG93bmxvYWRzXGp1Y2UtOC4wLjQtd2luZG93c1xKVUNFXGV4YW1wbGVz">
|
||||||
|
<MAINGROUP id="QFgxIz" name="Harmonizer">
|
||||||
|
<GROUP id="{D3F73BB0-6EED-9CDF-C038-2E6DABA05911}" name="Assets">
|
||||||
|
<FILE id="hjoPPx" name="DemoUtilities.h" compile="0" resource="0" file="Source/DemoUtilities.h"/>
|
||||||
|
<FILE id="AxyM2G" name="webviewplugin-gui-fallback.html" compile="0"
|
||||||
|
resource="1" file="Assets/webviewplugin-gui-fallback.html"/>
|
||||||
|
</GROUP>
|
||||||
|
<GROUP id="{BA45FF6A-23B2-0FFB-BB29-84A581170899}" name="Source">
|
||||||
|
<FILE id="L2cpEy" name="WebViewPluginDemo.h" compile="0" resource="0"
|
||||||
|
file="Source/WebViewPluginDemo.h"/>
|
||||||
|
<FILE id="VXzagW" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>
|
||||||
|
<FILE id="RapLBz" name="Shifter.cpp" compile="1" resource="0" file="Source/Shifter.cpp"/>
|
||||||
|
<FILE id="ueXlZA" name="Shifter.h" compile="0" resource="0" file="Source/Shifter.h"/>
|
||||||
|
<FILE id="UINOJ9" name="mayer_fft.h" compile="0" resource="0" file="Source/mayer_fft.h"/>
|
||||||
|
<FILE id="h62jlR" name="Helmholtz.h" compile="0" resource="0" file="Source/Helmholtz.h"/>
|
||||||
|
<FILE id="SMHewQ" name="Helmholtz.cpp" compile="1" resource="0" file="Source/Helmholtz.cpp"/>
|
||||||
|
<FILE id="AAZbqg" name="mayer_fft.cpp" compile="1" resource="0" file="Source/mayer_fft.cpp"/>
|
||||||
|
</GROUP>
|
||||||
|
</MAINGROUP>
|
||||||
|
<MODULES>
|
||||||
|
<MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_audio_plugin_client" showAllCode="1" useLocalCopy="0"
|
||||||
|
useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||||
|
<MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
|
||||||
|
</MODULES>
|
||||||
|
<JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_VST3_CAN_REPLACE_VST2="0"
|
||||||
|
JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING="1"/>
|
||||||
|
<EXPORTFORMATS>
|
||||||
|
<VS2022 targetFolder="Builds/VisualStudio2022">
|
||||||
|
<CONFIGURATIONS>
|
||||||
|
<CONFIGURATION isDebug="1" name="Debug" targetName="Harmonizer"/>
|
||||||
|
<CONFIGURATION isDebug="0" name="Release" targetName="Harmonizer"/>
|
||||||
|
</CONFIGURATIONS>
|
||||||
|
<MODULEPATHS>
|
||||||
|
<MODULEPATH id="juce_audio_basics" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_audio_devices" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_audio_formats" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_audio_plugin_client" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_audio_processors" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_audio_utils" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_core" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_data_structures" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_events" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_graphics" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_gui_basics" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_gui_extra" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
<MODULEPATH id="juce_dsp" path="../../../Downloads/JUCE/modules"/>
|
||||||
|
</MODULEPATHS>
|
||||||
|
</VS2022>
|
||||||
|
</EXPORTFORMATS>
|
||||||
|
</JUCERPROJECT>
|
||||||
96
JuceLibraryCode/BinaryData.cpp
Normal file
96
JuceLibraryCode/BinaryData.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/* ==================================== JUCER_BINARY_RESOURCE ====================================
|
||||||
|
|
||||||
|
This is an auto-generated file: Any edits you make may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace BinaryData
|
||||||
|
{
|
||||||
|
|
||||||
|
//================== webviewplugin-gui-fallback.html ==================
|
||||||
|
static const unsigned char temp_binary_data_0[] =
|
||||||
|
"<!DOCTYPE html>\r\n"
|
||||||
|
"<html>\r\n"
|
||||||
|
" <head>\r\n"
|
||||||
|
" <meta charset=\"UTF-8\" />\r\n"
|
||||||
|
" <title>WebViewPluginDemo</title>\r\n"
|
||||||
|
" <style type=\"text/css\">\r\n"
|
||||||
|
" body {\r\n"
|
||||||
|
" background-color: white;\r\n"
|
||||||
|
" }\r\n"
|
||||||
|
" </style>\r\n"
|
||||||
|
" </head>\r\n"
|
||||||
|
" <body>\r\n"
|
||||||
|
" <h1>WebViewPluginDemo</h1>\r\n"
|
||||||
|
" <p>\r\n"
|
||||||
|
" This document is a placeholder for the GUI component of the\r\n"
|
||||||
|
" WebViewPluginDemo.\r\n"
|
||||||
|
" </p>\r\n"
|
||||||
|
" <p>\r\n"
|
||||||
|
" To build the fully fledged user interface you need to install\r\n"
|
||||||
|
" <a href=\"https://nodejs.org\">node.js</a>\r\n"
|
||||||
|
" </p>\r\n"
|
||||||
|
" <p>\r\n"
|
||||||
|
" Then navigate into the\r\n"
|
||||||
|
" <code>examples/Plugins/WebViewPluginDemoGUI</code> directory inside your JUCE\r\n"
|
||||||
|
" directory, and issue the following commands.\r\n"
|
||||||
|
" </p>\r\n"
|
||||||
|
" <pre>\r\n"
|
||||||
|
" npm install\r\n"
|
||||||
|
" npm run build\r\n"
|
||||||
|
" npm run zip\r\n"
|
||||||
|
" </pre\r\n"
|
||||||
|
" >\r\n"
|
||||||
|
" <p>\r\n"
|
||||||
|
" This will build the full GUI package and place it in the\r\n"
|
||||||
|
" <code>Assets</code> directory.\r\n"
|
||||||
|
" </p>\r\n"
|
||||||
|
" <p>After this, rebuild and restart this demo.</p>\r\n"
|
||||||
|
" </body>\r\n"
|
||||||
|
"</html>\r\n";
|
||||||
|
|
||||||
|
const char* webviewpluginguifallback_html = (const char*) temp_binary_data_0;
|
||||||
|
|
||||||
|
|
||||||
|
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes);
|
||||||
|
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
|
||||||
|
{
|
||||||
|
unsigned int hash = 0;
|
||||||
|
|
||||||
|
if (resourceNameUTF8 != nullptr)
|
||||||
|
while (*resourceNameUTF8 != 0)
|
||||||
|
hash = 31 * hash + (unsigned int) *resourceNameUTF8++;
|
||||||
|
|
||||||
|
switch (hash)
|
||||||
|
{
|
||||||
|
case 0xcc2651f9: numBytes = 982; return webviewpluginguifallback_html;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
numBytes = 0;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* namedResourceList[] =
|
||||||
|
{
|
||||||
|
"webviewpluginguifallback_html"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* originalFilenames[] =
|
||||||
|
{
|
||||||
|
"webviewplugin-gui-fallback.html"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8);
|
||||||
|
const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < (sizeof (namedResourceList) / sizeof (namedResourceList[0])); ++i)
|
||||||
|
if (strcmp (namedResourceList[i], resourceNameUTF8) == 0)
|
||||||
|
return originalFilenames[i];
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
30
JuceLibraryCode/BinaryData.h
Normal file
30
JuceLibraryCode/BinaryData.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* =========================================================================================
|
||||||
|
|
||||||
|
This is an auto-generated file: Any edits you make may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace BinaryData
|
||||||
|
{
|
||||||
|
extern const char* webviewpluginguifallback_html;
|
||||||
|
const int webviewpluginguifallback_htmlSize = 982;
|
||||||
|
|
||||||
|
// Number of elements in the namedResourceList and originalFileNames arrays.
|
||||||
|
const int namedResourceListSize = 1;
|
||||||
|
|
||||||
|
// Points to the start of a list of resource names.
|
||||||
|
extern const char* namedResourceList[];
|
||||||
|
|
||||||
|
// Points to the start of a list of resource filenames.
|
||||||
|
extern const char* originalFilenames[];
|
||||||
|
|
||||||
|
// If you provide the name of one of the binary resource variables above, this function will
|
||||||
|
// return the corresponding data and its size (or a null pointer if the name isn't found).
|
||||||
|
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes);
|
||||||
|
|
||||||
|
// If you provide the name of one of the binary resource variables above, this function will
|
||||||
|
// return the corresponding original, non-mangled filename (or a null pointer if the name isn't found).
|
||||||
|
const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8);
|
||||||
|
}
|
||||||
55
JuceLibraryCode/JuceHeader.h
Normal file
55
JuceLibraryCode/JuceHeader.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
This is the header file that your files should include in order to get all the
|
||||||
|
JUCE library headers. You should avoid including the JUCE headers directly in
|
||||||
|
your own source files, because that wouldn't pick up the correct configuration
|
||||||
|
options for your app.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include <juce_audio_basics/juce_audio_basics.h>
|
||||||
|
#include <juce_audio_devices/juce_audio_devices.h>
|
||||||
|
#include <juce_audio_formats/juce_audio_formats.h>
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client.h>
|
||||||
|
#include <juce_audio_processors/juce_audio_processors.h>
|
||||||
|
#include <juce_audio_utils/juce_audio_utils.h>
|
||||||
|
#include <juce_core/juce_core.h>
|
||||||
|
#include <juce_data_structures/juce_data_structures.h>
|
||||||
|
#include <juce_dsp/juce_dsp.h>
|
||||||
|
#include <juce_events/juce_events.h>
|
||||||
|
#include <juce_graphics/juce_graphics.h>
|
||||||
|
#include <juce_gui_basics/juce_gui_basics.h>
|
||||||
|
#include <juce_gui_extra/juce_gui_extra.h>
|
||||||
|
|
||||||
|
#include "BinaryData.h"
|
||||||
|
|
||||||
|
#if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION
|
||||||
|
/** If you've hit this error then the version of the Projucer that was used to generate this project is
|
||||||
|
older than the version of the JUCE modules being included. To fix this error, re-save your project
|
||||||
|
using the latest version of the Projucer or, if you aren't using the Projucer to manage your project,
|
||||||
|
remove the JUCE_PROJUCER_VERSION define.
|
||||||
|
*/
|
||||||
|
#error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! DONT_SET_USING_JUCE_NAMESPACE
|
||||||
|
// If your code uses a lot of JUCE classes, then this will obviously save you
|
||||||
|
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
|
||||||
|
using namespace juce;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! JUCE_DONT_DECLARE_PROJECTINFO
|
||||||
|
namespace ProjectInfo
|
||||||
|
{
|
||||||
|
const char* const projectName = "Harmonizer";
|
||||||
|
const char* const companyName = "";
|
||||||
|
const char* const versionString = "1.0.0";
|
||||||
|
const int versionNumber = 0x10000;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
162
JuceLibraryCode/JucePluginDefines.h
Normal file
162
JuceLibraryCode/JucePluginDefines.h
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// Audio plugin settings..
|
||||||
|
|
||||||
|
#ifndef JucePlugin_Build_VST
|
||||||
|
#define JucePlugin_Build_VST 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_VST3
|
||||||
|
#define JucePlugin_Build_VST3 1
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_AU
|
||||||
|
#define JucePlugin_Build_AU 1
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_AUv3
|
||||||
|
#define JucePlugin_Build_AUv3 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_AAX
|
||||||
|
#define JucePlugin_Build_AAX 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_Standalone
|
||||||
|
#define JucePlugin_Build_Standalone 1
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_Unity
|
||||||
|
#define JucePlugin_Build_Unity 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Build_LV2
|
||||||
|
#define JucePlugin_Build_LV2 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Enable_IAA
|
||||||
|
#define JucePlugin_Enable_IAA 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Enable_ARA
|
||||||
|
#define JucePlugin_Enable_ARA 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Name
|
||||||
|
#define JucePlugin_Name "Harmonizer"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Desc
|
||||||
|
#define JucePlugin_Desc "Harmonizer"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Manufacturer
|
||||||
|
#define JucePlugin_Manufacturer "yourcompany"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ManufacturerWebsite
|
||||||
|
#define JucePlugin_ManufacturerWebsite "www.yourcompany.com"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ManufacturerEmail
|
||||||
|
#define JucePlugin_ManufacturerEmail ""
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ManufacturerCode
|
||||||
|
#define JucePlugin_ManufacturerCode 0x4d616e75
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_PluginCode
|
||||||
|
#define JucePlugin_PluginCode 0x456d6377
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_IsSynth
|
||||||
|
#define JucePlugin_IsSynth 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_WantsMidiInput
|
||||||
|
#define JucePlugin_WantsMidiInput 1
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ProducesMidiOutput
|
||||||
|
#define JucePlugin_ProducesMidiOutput 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_IsMidiEffect
|
||||||
|
#define JucePlugin_IsMidiEffect 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_EditorRequiresKeyboardFocus
|
||||||
|
#define JucePlugin_EditorRequiresKeyboardFocus 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Version
|
||||||
|
#define JucePlugin_Version 1.0.0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VersionCode
|
||||||
|
#define JucePlugin_VersionCode 0x10000
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VersionString
|
||||||
|
#define JucePlugin_VersionString "1.0.0"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VSTUniqueID
|
||||||
|
#define JucePlugin_VSTUniqueID JucePlugin_PluginCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VSTCategory
|
||||||
|
#define JucePlugin_VSTCategory kPlugCategEffect
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_Vst3Category
|
||||||
|
#define JucePlugin_Vst3Category "Fx"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AUMainType
|
||||||
|
#define JucePlugin_AUMainType 'aufx'
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AUSubType
|
||||||
|
#define JucePlugin_AUSubType JucePlugin_PluginCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AUExportPrefix
|
||||||
|
#define JucePlugin_AUExportPrefix HarmonizerAU
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AUExportPrefixQuoted
|
||||||
|
#define JucePlugin_AUExportPrefixQuoted "HarmonizerAU"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AUManufacturerCode
|
||||||
|
#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_CFBundleIdentifier
|
||||||
|
#define JucePlugin_CFBundleIdentifier com.yourcompany.Harmonizer
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXIdentifier
|
||||||
|
#define JucePlugin_AAXIdentifier com.yourcompany.Harmonizer
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXManufacturerCode
|
||||||
|
#define JucePlugin_AAXManufacturerCode JucePlugin_ManufacturerCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXProductId
|
||||||
|
#define JucePlugin_AAXProductId JucePlugin_PluginCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXCategory
|
||||||
|
#define JucePlugin_AAXCategory 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXDisableBypass
|
||||||
|
#define JucePlugin_AAXDisableBypass 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_AAXDisableMultiMono
|
||||||
|
#define JucePlugin_AAXDisableMultiMono 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_IAAType
|
||||||
|
#define JucePlugin_IAAType 0x6175726d
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_IAASubType
|
||||||
|
#define JucePlugin_IAASubType JucePlugin_PluginCode
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_IAAName
|
||||||
|
#define JucePlugin_IAAName "yourcompany: Harmonizer"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VSTNumMidiInputs
|
||||||
|
#define JucePlugin_VSTNumMidiInputs 16
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_VSTNumMidiOutputs
|
||||||
|
#define JucePlugin_VSTNumMidiOutputs 16
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ARAContentTypes
|
||||||
|
#define JucePlugin_ARAContentTypes 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ARATransformationFlags
|
||||||
|
#define JucePlugin_ARATransformationFlags 0
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ARAFactoryID
|
||||||
|
#define JucePlugin_ARAFactoryID "com.yourcompany.Harmonizer.factory"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ARADocumentArchiveID
|
||||||
|
#define JucePlugin_ARADocumentArchiveID "com.yourcompany.Harmonizer.aradocumentarchive.1.0.0"
|
||||||
|
#endif
|
||||||
|
#ifndef JucePlugin_ARACompatibleArchiveIDs
|
||||||
|
#define JucePlugin_ARACompatibleArchiveIDs ""
|
||||||
|
#endif
|
||||||
12
JuceLibraryCode/ReadMe.txt
Normal file
12
JuceLibraryCode/ReadMe.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
Important Note!!
|
||||||
|
================
|
||||||
|
|
||||||
|
The purpose of this folder is to contain files that are auto-generated by the Projucer,
|
||||||
|
and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
|
||||||
|
the Projucer saves your project.
|
||||||
|
|
||||||
|
Therefore, it's a bad idea to make any manual changes to the files in here, or to
|
||||||
|
put any of your own files in here if you don't want to lose them. (Of course you may choose
|
||||||
|
to add the folder's contents to your version-control system so that you can re-merge your own
|
||||||
|
modifications after the Projucer has saved its changes).
|
||||||
8
JuceLibraryCode/include_juce_audio_basics.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_basics.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_basics/juce_audio_basics.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_basics.mm
Normal file
8
JuceLibraryCode/include_juce_audio_basics.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_basics/juce_audio_basics.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_devices.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_devices.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_devices/juce_audio_devices.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_devices.mm
Normal file
8
JuceLibraryCode/include_juce_audio_devices.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_devices/juce_audio_devices.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_formats.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_formats.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_formats/juce_audio_formats.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_formats.mm
Normal file
8
JuceLibraryCode/include_juce_audio_formats.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_formats/juce_audio_formats.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX_utils.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_ARA.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_ARA.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_ARA.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_LV2.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_LV2.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_LV2.mm>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_VST2.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_VST2.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST2.mm>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_plugin_client_VST3.mm
Normal file
8
JuceLibraryCode/include_juce_audio_plugin_client_VST3.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST3.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_processors.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_processors.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_processors/juce_audio_processors.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_processors.mm
Normal file
8
JuceLibraryCode/include_juce_audio_processors.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_processors/juce_audio_processors.mm>
|
||||||
8
JuceLibraryCode/include_juce_audio_processors_ara.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_processors_ara.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_processors/juce_audio_processors_ara.cpp>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_processors/juce_audio_processors_lv2_libs.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_utils.cpp
Normal file
8
JuceLibraryCode/include_juce_audio_utils.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_utils/juce_audio_utils.cpp>
|
||||||
8
JuceLibraryCode/include_juce_audio_utils.mm
Normal file
8
JuceLibraryCode/include_juce_audio_utils.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_audio_utils/juce_audio_utils.mm>
|
||||||
8
JuceLibraryCode/include_juce_core.cpp
Normal file
8
JuceLibraryCode/include_juce_core.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_core/juce_core.cpp>
|
||||||
8
JuceLibraryCode/include_juce_core.mm
Normal file
8
JuceLibraryCode/include_juce_core.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_core/juce_core.mm>
|
||||||
8
JuceLibraryCode/include_juce_core_CompilationTime.cpp
Normal file
8
JuceLibraryCode/include_juce_core_CompilationTime.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_core/juce_core_CompilationTime.cpp>
|
||||||
8
JuceLibraryCode/include_juce_data_structures.cpp
Normal file
8
JuceLibraryCode/include_juce_data_structures.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_data_structures/juce_data_structures.cpp>
|
||||||
8
JuceLibraryCode/include_juce_data_structures.mm
Normal file
8
JuceLibraryCode/include_juce_data_structures.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_data_structures/juce_data_structures.mm>
|
||||||
8
JuceLibraryCode/include_juce_dsp.cpp
Normal file
8
JuceLibraryCode/include_juce_dsp.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_dsp/juce_dsp.cpp>
|
||||||
8
JuceLibraryCode/include_juce_dsp.mm
Normal file
8
JuceLibraryCode/include_juce_dsp.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_dsp/juce_dsp.mm>
|
||||||
8
JuceLibraryCode/include_juce_events.cpp
Normal file
8
JuceLibraryCode/include_juce_events.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_events/juce_events.cpp>
|
||||||
8
JuceLibraryCode/include_juce_events.mm
Normal file
8
JuceLibraryCode/include_juce_events.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_events/juce_events.mm>
|
||||||
8
JuceLibraryCode/include_juce_graphics.cpp
Normal file
8
JuceLibraryCode/include_juce_graphics.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_graphics/juce_graphics.cpp>
|
||||||
8
JuceLibraryCode/include_juce_graphics.mm
Normal file
8
JuceLibraryCode/include_juce_graphics.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_graphics/juce_graphics.mm>
|
||||||
8
JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
Normal file
8
JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_graphics/juce_graphics_Harfbuzz.cpp>
|
||||||
8
JuceLibraryCode/include_juce_graphics_Sheenbidi.c
Normal file
8
JuceLibraryCode/include_juce_graphics_Sheenbidi.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_graphics/juce_graphics_Sheenbidi.c>
|
||||||
8
JuceLibraryCode/include_juce_gui_basics.cpp
Normal file
8
JuceLibraryCode/include_juce_gui_basics.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_gui_basics/juce_gui_basics.cpp>
|
||||||
8
JuceLibraryCode/include_juce_gui_basics.mm
Normal file
8
JuceLibraryCode/include_juce_gui_basics.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_gui_basics/juce_gui_basics.mm>
|
||||||
8
JuceLibraryCode/include_juce_gui_extra.cpp
Normal file
8
JuceLibraryCode/include_juce_gui_extra.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_gui_extra/juce_gui_extra.cpp>
|
||||||
8
JuceLibraryCode/include_juce_gui_extra.mm
Normal file
8
JuceLibraryCode/include_juce_gui_extra.mm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
IMPORTANT! This file is auto-generated each time you save your
|
||||||
|
project - if you alter its contents, your changes may be overwritten!
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <juce_gui_extra/juce_gui_extra.mm>
|
||||||
232
Source/DemoUtilities.h
Normal file
232
Source/DemoUtilities.h
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PIP_DEMO_UTILITIES_INCLUDED
|
||||||
|
#define PIP_DEMO_UTILITIES_INCLUDED 1
|
||||||
|
|
||||||
|
#include <JuceHeader.h>
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
/*
|
||||||
|
This file contains a bunch of miscellaneous utilities that are
|
||||||
|
used by the various demos.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
inline Colour getRandomColour (float brightness) noexcept
|
||||||
|
{
|
||||||
|
return Colour::fromHSV (Random::getSystemRandom().nextFloat(), 0.5f, brightness, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Colour getRandomBrightColour() noexcept { return getRandomColour (0.8f); }
|
||||||
|
inline Colour getRandomDarkColour() noexcept { return getRandomColour (0.3f); }
|
||||||
|
|
||||||
|
inline Colour getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour uiColour, Colour fallback = Colour (0xff4d4d4d)) noexcept
|
||||||
|
{
|
||||||
|
if (auto* v4 = dynamic_cast<LookAndFeel_V4*> (&LookAndFeel::getDefaultLookAndFeel()))
|
||||||
|
return v4->getCurrentColourScheme().getUIColour (uiColour);
|
||||||
|
|
||||||
|
return fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class AssertAssetExists
|
||||||
|
{
|
||||||
|
no,
|
||||||
|
yes
|
||||||
|
};
|
||||||
|
|
||||||
|
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath,
|
||||||
|
[[maybe_unused]] AssertAssetExists assertExists = AssertAssetExists::yes)
|
||||||
|
{
|
||||||
|
|
||||||
|
auto assetsDir = File::getCurrentWorkingDirectory().getChildFile("..\\..\\Assets");
|
||||||
|
|
||||||
|
auto resourceFile = assetsDir.getChildFile (resourcePath);
|
||||||
|
|
||||||
|
if (! resourceFile.existsAsFile())
|
||||||
|
{
|
||||||
|
jassert (assertExists == AssertAssetExists::no);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return resourceFile.createInputStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Image getImageFromAssets (const char* assetName)
|
||||||
|
{
|
||||||
|
auto hashCode = (String (assetName) + "@juce_demo_assets").hashCode64();
|
||||||
|
auto img = ImageCache::getFromHashCode (hashCode);
|
||||||
|
|
||||||
|
if (img.isNull())
|
||||||
|
{
|
||||||
|
std::unique_ptr<InputStream> juceIconStream (createAssetInputStream (assetName));
|
||||||
|
|
||||||
|
if (juceIconStream == nullptr)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
img = ImageFileFormat::loadFrom (*juceIconStream);
|
||||||
|
|
||||||
|
ImageCache::addImageToCache (img, hashCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline String loadEntireAssetIntoString (const char* assetName)
|
||||||
|
{
|
||||||
|
std::unique_ptr<InputStream> input (createAssetInputStream (assetName));
|
||||||
|
|
||||||
|
if (input == nullptr)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
return input->readString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
inline Path getJUCELogoPath()
|
||||||
|
{
|
||||||
|
return Drawable::parseSVGPath (
|
||||||
|
"M72.87 84.28A42.36 42.36 0 0130.4 42.14a42.48 42.48 0 0184.95 0 42.36 42.36 0 01-42.48 42.14zm0-78.67A36.74 36.74 0 0036 42.14a36.88 36.88 0 0073.75 0A36.75 36.75 0 0072.87 5.61z"
|
||||||
|
"M77.62 49.59a177.77 177.77 0 008.74 18.93A4.38 4.38 0 0092.69 70a34.5 34.5 0 008.84-9 4.3 4.3 0 00-2.38-6.49A176.73 176.73 0 0180 47.32a1.78 1.78 0 00-2.38 2.27zM81.05 44.27a169.68 169.68 0 0020.13 7.41 4.39 4.39 0 005.52-3.41 34.42 34.42 0 00.55-6.13 33.81 33.81 0 00-.67-6.72 4.37 4.37 0 00-6.31-3A192.32 192.32 0 0181.1 41a1.76 1.76 0 00-.05 3.27zM74.47 50.44a1.78 1.78 0 00-3.29 0 165.54 165.54 0 00-7.46 19.89 4.33 4.33 0 003.47 5.48 35.49 35.49 0 005.68.46 34.44 34.44 0 007.13-.79 4.32 4.32 0 003-6.25 187.83 187.83 0 01-8.53-18.79zM71.59 34.12a1.78 1.78 0 003.29.05 163.9 163.9 0 007.52-20.11A4.34 4.34 0 0079 8.59a35.15 35.15 0 00-13.06.17 4.32 4.32 0 00-3 6.26 188.41 188.41 0 018.65 19.1zM46.32 30.3a176.2 176.2 0 0120 7.48 1.78 1.78 0 002.37-2.28 180.72 180.72 0 00-9.13-19.84 4.38 4.38 0 00-6.33-1.47 34.27 34.27 0 00-9.32 9.65 4.31 4.31 0 002.41 6.46zM68.17 49.18a1.77 1.77 0 00-2.29-2.34 181.71 181.71 0 00-19.51 8.82A4.3 4.3 0 0044.91 62a34.36 34.36 0 009.42 8.88 4.36 4.36 0 006.5-2.38 175.11 175.11 0 017.34-19.32zM77.79 35.59a1.78 1.78 0 002.3 2.35 182.51 182.51 0 0019.6-8.88 4.3 4.3 0 001.5-6.25 34.4 34.4 0 00-9.41-9.14A4.36 4.36 0 0085.24 16a174.51 174.51 0 01-7.45 19.59zM64.69 40.6a167.72 167.72 0 00-20.22-7.44A4.36 4.36 0 0039 36.6a33.68 33.68 0 00-.45 5.54 34 34 0 00.81 7.4 4.36 4.36 0 006.28 2.84 189.19 189.19 0 0119-8.52 1.76 1.76 0 00.05-3.26zM20 129.315c0 5-2.72 8.16-7.11 8.16-2.37 0-4.17-1-6.2-3.56l-.69-.78-6 5 .57.76c3.25 4.36 7.16 6.39 12.31 6.39 9 0 15.34-6.57 15.34-16v-28.1H20zM61.69 126.505c0 6.66-3.76 11-9.57 11-5.81 0-9.56-4.31-9.56-11v-25.32h-8.23v25.69c0 10.66 7.4 18.4 17.6 18.4 10 0 17.61-7.72 18-18.4v-25.69h-8.24zM106.83 134.095c-3.58 2.43-6.18 3.38-9.25 3.38a14.53 14.53 0 010-29c3.24 0 5.66.88 9.25 3.38l.76.53 4.78-6-.75-.62a22.18 22.18 0 00-14.22-5.1 22.33 22.33 0 100 44.65 21.53 21.53 0 0014.39-5.08l.81-.64-5-6zM145.75 137.285h-19.06v-10.72h18.3v-7.61h-18.3v-10.16h19.06v-7.61h-27.28v43.53h27.28z"
|
||||||
|
"M68.015 83.917c-7.723-.902-15.472-4.123-21.566-8.966-8.475-6.736-14.172-16.823-15.574-27.575C29.303 35.31 33.538 22.7 42.21 13.631 49.154 6.368 58.07 1.902 68.042.695c2.15-.26 7.524-.26 9.675 0 12.488 1.512 23.464 8.25 30.437 18.686 8.332 12.471 9.318 28.123 2.605 41.368-2.28 4.5-4.337 7.359-7.85 10.909A42.273 42.273 0 0177.613 83.92c-2.027.227-7.644.225-9.598-.003zm7.823-5.596c8.435-.415 17.446-4.678 23.683-11.205 5.976-6.254 9.35-13.723 10.181-22.537.632-6.705-1.346-14.948-5.065-21.108C98.88 13.935 89.397 7.602 78.34 5.906c-2.541-.39-8.398-.386-10.96.006C53.54 8.034 42.185 17.542 37.81 30.67c-2.807 8.426-2.421 17.267 1.11 25.444 4.877 11.297 14.959 19.41 26.977 21.709 2.136.408 6.1.755 7.377.645.325-.028 1.48-.094 2.564-.147z"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
#if JUCE_MODULE_AVAILABLE_juce_gui_extra
|
||||||
|
inline CodeEditorComponent::ColourScheme getDarkCodeEditorColourScheme()
|
||||||
|
{
|
||||||
|
struct Type
|
||||||
|
{
|
||||||
|
const char* name;
|
||||||
|
juce::uint32 colour;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Type types[] =
|
||||||
|
{
|
||||||
|
{ "Error", 0xffe60000 },
|
||||||
|
{ "Comment", 0xff72d20c },
|
||||||
|
{ "Keyword", 0xffee6f6f },
|
||||||
|
{ "Operator", 0xffc4eb19 },
|
||||||
|
{ "Identifier", 0xffcfcfcf },
|
||||||
|
{ "Integer", 0xff42c8c4 },
|
||||||
|
{ "Float", 0xff885500 },
|
||||||
|
{ "String", 0xffbc45dd },
|
||||||
|
{ "Bracket", 0xff058202 },
|
||||||
|
{ "Punctuation", 0xffcfbeff },
|
||||||
|
{ "Preprocessor Text", 0xfff8f631 }
|
||||||
|
};
|
||||||
|
|
||||||
|
CodeEditorComponent::ColourScheme cs;
|
||||||
|
|
||||||
|
for (auto& t : types)
|
||||||
|
cs.set (t.name, Colour (t.colour));
|
||||||
|
|
||||||
|
return cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline CodeEditorComponent::ColourScheme getLightCodeEditorColourScheme()
|
||||||
|
{
|
||||||
|
struct Type
|
||||||
|
{
|
||||||
|
const char* name;
|
||||||
|
juce::uint32 colour;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Type types[] =
|
||||||
|
{
|
||||||
|
{ "Error", 0xffcc0000 },
|
||||||
|
{ "Comment", 0xff00aa00 },
|
||||||
|
{ "Keyword", 0xff0000cc },
|
||||||
|
{ "Operator", 0xff225500 },
|
||||||
|
{ "Identifier", 0xff000000 },
|
||||||
|
{ "Integer", 0xff880000 },
|
||||||
|
{ "Float", 0xff885500 },
|
||||||
|
{ "String", 0xff990099 },
|
||||||
|
{ "Bracket", 0xff000055 },
|
||||||
|
{ "Punctuation", 0xff004400 },
|
||||||
|
{ "Preprocessor Text", 0xff660000 }
|
||||||
|
};
|
||||||
|
|
||||||
|
CodeEditorComponent::ColourScheme cs;
|
||||||
|
|
||||||
|
for (auto& t : types)
|
||||||
|
cs.set (t.name, Colour (t.colour));
|
||||||
|
|
||||||
|
return cs;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// This is basically a sawtooth wave generator - maps a value that bounces between
|
||||||
|
// 0.0 and 1.0 at a random speed
|
||||||
|
struct BouncingNumber
|
||||||
|
{
|
||||||
|
virtual ~BouncingNumber() = default;
|
||||||
|
|
||||||
|
float getValue() const
|
||||||
|
{
|
||||||
|
double v = fmod (phase + speed * Time::getMillisecondCounterHiRes(), 2.0);
|
||||||
|
return (float) (v >= 1.0 ? (2.0 - v) : v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
double speed = 0.0004 + 0.0007 * Random::getSystemRandom().nextDouble(),
|
||||||
|
phase = Random::getSystemRandom().nextDouble();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SlowerBouncingNumber final : public BouncingNumber
|
||||||
|
{
|
||||||
|
SlowerBouncingNumber()
|
||||||
|
{
|
||||||
|
speed *= 0.3;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline std::unique_ptr<InputSource> makeInputSource (const URL& url)
|
||||||
|
{
|
||||||
|
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||||
|
return std::make_unique<AndroidDocumentInputSource> (doc);
|
||||||
|
|
||||||
|
#if ! JUCE_IOS
|
||||||
|
if (url.isLocalFile())
|
||||||
|
return std::make_unique<FileInputSource> (url.getLocalFile());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return std::make_unique<URLInputSource> (url);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::unique_ptr<OutputStream> makeOutputStream (const URL& url)
|
||||||
|
{
|
||||||
|
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||||
|
return doc.createOutputStream();
|
||||||
|
|
||||||
|
#if ! JUCE_IOS
|
||||||
|
if (url.isLocalFile())
|
||||||
|
return url.getLocalFile().createOutputStream();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return url.createOutputStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // PIP_DEMO_UTILITIES_INCLUDED
|
||||||
271
Source/Helmholtz.cpp
Normal file
271
Source/Helmholtz.cpp
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
/*
|
||||||
|
Class Helmholtz implements a period-length detector using Philip McLeod's
|
||||||
|
Specially Normalized AutoCorrelation function (SNAC).
|
||||||
|
|
||||||
|
Licensed under three-clause BSD license.
|
||||||
|
|
||||||
|
Katja Vetter, Feb 2012.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "Helmholtz.h"
|
||||||
|
|
||||||
|
|
||||||
|
Helmholtz::Helmholtz(int framearg, int overlaparg, t_float biasarg)
|
||||||
|
{
|
||||||
|
|
||||||
|
setframesize(framearg);
|
||||||
|
setoverlap(overlaparg);
|
||||||
|
if (biasarg)setbias(biasarg);
|
||||||
|
else biasfactor = DEFBIAS;
|
||||||
|
|
||||||
|
|
||||||
|
timeindex = 0;
|
||||||
|
periodindex = 0;
|
||||||
|
periodlength = 0.;
|
||||||
|
fidelity = 0.;
|
||||||
|
minrms = DEFMINRMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Helmholtz::~Helmholtz()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************/
|
||||||
|
/******************************** public *****************************************/
|
||||||
|
/*********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::iosamples(const t_float* in, t_float* out, int size)
|
||||||
|
{
|
||||||
|
int mask = framesize - 1;
|
||||||
|
int outindex = 0;
|
||||||
|
|
||||||
|
// call analysis function when it is time
|
||||||
|
if (!(timeindex & (framesize / overlap - 1))) analyzeframe();
|
||||||
|
|
||||||
|
while (size--)
|
||||||
|
{
|
||||||
|
inputbuf[timeindex++] = *in++;
|
||||||
|
//out[outindex++] = processbuf[timeindex++];
|
||||||
|
timeindex &= mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::setframesize(int frame)
|
||||||
|
{
|
||||||
|
if (!((frame == 128) || (frame == 256) || (frame == 512) || (frame == 1024) || (frame == 2048)))
|
||||||
|
frame = DEFFRAMESIZE;
|
||||||
|
framesize = frame;
|
||||||
|
|
||||||
|
|
||||||
|
timeindex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::setoverlap(int lap)
|
||||||
|
{
|
||||||
|
if (!((lap == 1) || (lap == 2) || (lap == 4) || (lap == 8)))
|
||||||
|
lap = DEFOVERLAP;
|
||||||
|
overlap = lap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::setbias(t_float bias)
|
||||||
|
{
|
||||||
|
if (bias > 1.) bias = 1.;
|
||||||
|
if (bias < 0.) bias = 0.;
|
||||||
|
biasfactor = bias;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::setminRMS(t_float rms)
|
||||||
|
{
|
||||||
|
if (rms > 1.) rms = 1.;
|
||||||
|
if (rms < 0.) rms = 0.;
|
||||||
|
minrms = rms;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
t_float Helmholtz::getperiod() const
|
||||||
|
{
|
||||||
|
return(periodlength);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
t_float Helmholtz::getfidelity() const
|
||||||
|
{
|
||||||
|
return(fidelity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************************/
|
||||||
|
/***************************** private procedures ********************************/
|
||||||
|
/*********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// main analysis function
|
||||||
|
void Helmholtz::analyzeframe()
|
||||||
|
{
|
||||||
|
int n, tindex = timeindex;
|
||||||
|
int mask = framesize - 1;
|
||||||
|
int peak;
|
||||||
|
t_float norm = 1. / sqrt(t_float(framesize * 2));
|
||||||
|
|
||||||
|
// copy input to processing buffer
|
||||||
|
for (n = 0; n < framesize; n++) processbuf[n] = inputbuf[tindex++ & mask] * norm;
|
||||||
|
|
||||||
|
// copy for normalization function
|
||||||
|
for (n = 0; n < framesize; n++) inputbuf2[n] = inputbuf[tindex++ & mask];
|
||||||
|
|
||||||
|
// zeropadding
|
||||||
|
for (n = framesize; n < (framesize << 1); n++) processbuf[n] = 0.;
|
||||||
|
|
||||||
|
// call analysis procedures
|
||||||
|
autocorrelation();
|
||||||
|
normalize();
|
||||||
|
pickpeak();
|
||||||
|
periodandfidelity();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::autocorrelation()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
int fftsize = framesize * 2;
|
||||||
|
|
||||||
|
REALFFT(fftsize, processbuf);
|
||||||
|
|
||||||
|
// compute power spectrum
|
||||||
|
processbuf[0] *= processbuf[0]; // DC
|
||||||
|
processbuf[framesize] *= processbuf[framesize]; // Nyquist
|
||||||
|
|
||||||
|
for (n = 1; n < framesize; n++)
|
||||||
|
{
|
||||||
|
processbuf[n] = processbuf[n] * processbuf[n]
|
||||||
|
+ processbuf[fftsize - n] * processbuf[fftsize - n]; // imag coefficients appear reversed
|
||||||
|
processbuf[fftsize - n] = 0.;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
REALIFFT(fftsize, processbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::normalize()
|
||||||
|
{
|
||||||
|
int n, mask = framesize - 1;
|
||||||
|
int seek = framesize * SEEK;
|
||||||
|
t_float signal1, signal2;
|
||||||
|
|
||||||
|
// minimum RMS implemented as minimum autocorrelation at index 0
|
||||||
|
// effectively this means possible white noise addition
|
||||||
|
t_float rms = minrms / sqrt(1. / (t_float)framesize);
|
||||||
|
t_float minrzero = rms * rms;
|
||||||
|
t_float rzero = processbuf[0];
|
||||||
|
if (rzero < minrzero) rzero = minrzero;
|
||||||
|
double normintegral = rzero * 2.;
|
||||||
|
|
||||||
|
// normalize biased autocorrelation function
|
||||||
|
processbuf[0] = 1.;
|
||||||
|
for (n = 1; n < seek; n++)
|
||||||
|
{
|
||||||
|
signal1 = inputbuf2[n - 1];
|
||||||
|
signal2 = inputbuf2[framesize - n];
|
||||||
|
normintegral -= (double)(signal1 * signal1 + signal2 * signal2);
|
||||||
|
processbuf[n] /= (t_float)normintegral * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// flush instable function tail
|
||||||
|
for (n = seek; n < framesize; n++) processbuf[n] = 0.;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// select the peak which most probably represents period length
|
||||||
|
void Helmholtz::pickpeak()
|
||||||
|
{
|
||||||
|
int n, peakindex = 0;
|
||||||
|
int seek = framesize * SEEK;
|
||||||
|
t_float maxvalue = 0.;
|
||||||
|
t_float previous[2];
|
||||||
|
t_float bias = biasfactor / (t_float)framesize; // user-controlled bias
|
||||||
|
t_float realpeak;
|
||||||
|
|
||||||
|
// skip main lobe
|
||||||
|
for (n = 1; n < seek; n++)
|
||||||
|
{
|
||||||
|
if (processbuf[n] < 0.) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find interpolated / biased maximum in specially normalized autocorrelation function
|
||||||
|
// interpolation finds the 'real maximum'
|
||||||
|
// biasing favours the first candidate
|
||||||
|
for (; n < seek - 1; n++)
|
||||||
|
{
|
||||||
|
if (processbuf[n] > processbuf[n - 1])
|
||||||
|
{
|
||||||
|
if (processbuf[n] > processbuf[n + 1]) // we have a local peak
|
||||||
|
{
|
||||||
|
realpeak = interpolate3max(processbuf, n);
|
||||||
|
|
||||||
|
if ((realpeak * (1. - n * bias)) > maxvalue)
|
||||||
|
{
|
||||||
|
maxvalue = realpeak;
|
||||||
|
peakindex = n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
periodindex = peakindex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Helmholtz::periodandfidelity()
|
||||||
|
{
|
||||||
|
if (periodindex)
|
||||||
|
{
|
||||||
|
periodlength = periodindex + interpolate3phase(processbuf, periodindex);
|
||||||
|
fidelity = interpolate3max(processbuf, periodindex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************************/
|
||||||
|
/***************************** private functions *********************************/
|
||||||
|
/*********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
inline t_float Helmholtz::interpolate3max(t_float* buf, int peakindex)
|
||||||
|
{
|
||||||
|
t_float realpeak;
|
||||||
|
|
||||||
|
t_float a = buf[peakindex - 1];
|
||||||
|
t_float b = buf[peakindex];
|
||||||
|
t_float c = buf[peakindex + 1];
|
||||||
|
|
||||||
|
realpeak = b + 0.5 * (0.5 * ((c - a) * (c - a)))
|
||||||
|
/ (2 * b - a - c);
|
||||||
|
|
||||||
|
return(realpeak);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline t_float Helmholtz::interpolate3phase(t_float* buf, int peakindex)
|
||||||
|
{
|
||||||
|
t_float fraction;
|
||||||
|
|
||||||
|
t_float a = buf[peakindex - 1];
|
||||||
|
t_float b = buf[peakindex];
|
||||||
|
t_float c = buf[peakindex + 1];
|
||||||
|
|
||||||
|
fraction = (0.5 * (c - a)) / (2. * b - a - c);
|
||||||
|
|
||||||
|
return(fraction);
|
||||||
|
}
|
||||||
|
|
||||||
109
Source/Helmholtz.h
Normal file
109
Source/Helmholtz.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
#ifndef Helmholtz_H
|
||||||
|
#define Helmholtz_H
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
|
||||||
|
Class Helmholtz implements a period-length detector using Philip McLeod's
|
||||||
|
Specially Normalized AutoCorrelation function (SNAC).
|
||||||
|
|
||||||
|
Function iosamples() takes a pointer to a buffer with n signal input samples
|
||||||
|
and a pointer to a buffer where n output samples are stored,
|
||||||
|
representing the SNAC function.
|
||||||
|
|
||||||
|
Via function setframesize(), analysis frame size can be set to
|
||||||
|
128, 256, 512, 1024 or 2048 samples. Default is 1024.
|
||||||
|
|
||||||
|
With setoverlap(), analysis frames can be set to overlap each other
|
||||||
|
with factor 1, 2, 4 or 8. Default is 1.
|
||||||
|
|
||||||
|
Function setbias() sets a bias which favours small lags over large lags in
|
||||||
|
the period detection, thereby avoiding low-octave jumps. Default is 0.2
|
||||||
|
|
||||||
|
Function setminRMS() is used as a sensitivity setting. Default is RMS 0.003.
|
||||||
|
|
||||||
|
With function getperiod(), the last detected period length is returned
|
||||||
|
as number of samples with a possible fraction (floating point format).
|
||||||
|
|
||||||
|
Function getfidelity() returns a value between 0. and 1. indicating
|
||||||
|
to which extent the input signal is periodic. A fidelity of ~0.95 can
|
||||||
|
be considered to indicate a periodic signal.
|
||||||
|
|
||||||
|
Class Helmholtz needs mayer_realfft() and mayer_realifft() or similar
|
||||||
|
fft functions. Note that Ron Mayer's functions for real fft have a
|
||||||
|
peculiar organisation of imaginary coefficients (reversed order, sign flipped).
|
||||||
|
|
||||||
|
Class Helmholtz uses t_float for float or double. Depending on the context
|
||||||
|
where the class is used, you may need to define t_float. If used with
|
||||||
|
PD or MaxMsp, it is already defined.
|
||||||
|
|
||||||
|
***********************************************************************
|
||||||
|
|
||||||
|
Licensed under three-clause BSD license.
|
||||||
|
|
||||||
|
Katja Vetter, Feb 2012.
|
||||||
|
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
/* This section includes the Pure Data API header. If you build Helmholtz
|
||||||
|
against another DSP framework, you need to define t_float, and you need to
|
||||||
|
include Ron Mayer's fft or similar functionality. */
|
||||||
|
|
||||||
|
#include "mayer_fft.h"
|
||||||
|
#define REALFFT mayer_realfft
|
||||||
|
#define REALIFFT mayer_realifft
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
|
||||||
|
#define DEFFRAMESIZE 1024 // default analysis framesize
|
||||||
|
#define DEFOVERLAP 1 // default overlap
|
||||||
|
#define DEFBIAS 0.2 // default bias
|
||||||
|
#define DEFMINRMS 0.003 // default minimum RMS
|
||||||
|
#define SEEK 0.85 // seek-length as ratio of framesize
|
||||||
|
|
||||||
|
#define t_float float
|
||||||
|
|
||||||
|
class Helmholtz
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Helmholtz(int periodarg = DEFFRAMESIZE, int overlaparg = DEFOVERLAP, t_float biasarg = DEFBIAS);
|
||||||
|
|
||||||
|
~Helmholtz();
|
||||||
|
void iosamples(const t_float* in, t_float* out, int size);
|
||||||
|
void setframesize(int frame);
|
||||||
|
void setoverlap(int lap);
|
||||||
|
void setbias(t_float bias);
|
||||||
|
void setminRMS(t_float rms);
|
||||||
|
t_float getperiod() const;
|
||||||
|
t_float getfidelity() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// procedures
|
||||||
|
void analyzeframe();
|
||||||
|
void autocorrelation();
|
||||||
|
void normalize();
|
||||||
|
void pickpeak();
|
||||||
|
void periodandfidelity();
|
||||||
|
|
||||||
|
// functions
|
||||||
|
t_float interpolate3max(t_float* buf, int peakindex);
|
||||||
|
t_float interpolate3phase(t_float* buf, int peakindex);
|
||||||
|
|
||||||
|
// buffers
|
||||||
|
t_float inputbuf[2048];
|
||||||
|
t_float inputbuf2[2048];
|
||||||
|
t_float processbuf[4096];
|
||||||
|
|
||||||
|
// state variables
|
||||||
|
int timeindex;
|
||||||
|
int framesize;
|
||||||
|
int overlap;
|
||||||
|
int periodindex;
|
||||||
|
|
||||||
|
t_float periodlength;
|
||||||
|
t_float fidelity;
|
||||||
|
t_float biasfactor;
|
||||||
|
t_float minrms;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // #ifndef Helmholtz_H
|
||||||
16
Source/Main.cpp
Normal file
16
Source/Main.cpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file was auto-generated and contains the startup code for a PIP.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <JuceHeader.h>
|
||||||
|
#include "WebViewPluginDemo.h"
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
|
||||||
|
{
|
||||||
|
return new WebViewPluginAudioProcessorWrapper();
|
||||||
|
}
|
||||||
285
Source/Shifter.cpp
Normal file
285
Source/Shifter.cpp
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
#include "Shifter.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include <juce_core/juce_core.h>
|
||||||
|
// #define SAMPLE_BY_SAMPLE
|
||||||
|
#ifndef PI_F
|
||||||
|
#define PI_F 3.1415927410125732421875f
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline float mtof(float m)
|
||||||
|
{
|
||||||
|
return powf(2, (m - 69.0f) / 12.0f) * 440.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool float_equal(float one, float two) {
|
||||||
|
return abs(one - two) < 1e-5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shifter::Init()
|
||||||
|
{
|
||||||
|
volume = 1;
|
||||||
|
helm.setframesize(1024);
|
||||||
|
helm.setoverlap(1);
|
||||||
|
for (int i = 0; i < MAX_VOICES + 1; ++i)
|
||||||
|
{
|
||||||
|
out_midi[i] = -1;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < BUFFER_SIZE; ++i)
|
||||||
|
{
|
||||||
|
in_buffer[i] = 0;
|
||||||
|
out_buffer[0][i] = 0;
|
||||||
|
out_buffer[1][i] = 0;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 8192; ++i) {
|
||||||
|
cos_lookup[i] = cos(2 * PI_F * i / 8192.0);
|
||||||
|
}
|
||||||
|
out_panning[MAX_VOICES] = 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shifter::Process(const float* const* in,
|
||||||
|
float** out,
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
DetectPitch(in, out, size);
|
||||||
|
SetRates();
|
||||||
|
// for (size_t i = 0; i < size; ++i) {
|
||||||
|
// out[0][i] = 0;
|
||||||
|
// }
|
||||||
|
GetSamples(out, in[0], size);
|
||||||
|
//for (size_t i = 0; i < size; ++i)
|
||||||
|
//{
|
||||||
|
// // out[0][i] = osc.Process();
|
||||||
|
// // out[0][i] = in[0][i];
|
||||||
|
// //out[0][i] = out[0][i] + in[0][i];
|
||||||
|
// out[1][i] = out[0][i];
|
||||||
|
//}
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
float findMedian(float a, float b, float c) {
|
||||||
|
if ((a >= b && a <= c) || (a <= b && a >= c))
|
||||||
|
return a;
|
||||||
|
else if ((b >= a && b <= c) || (b <= a && b >= c))
|
||||||
|
return b;
|
||||||
|
else
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Shifter::DetectPitch(const float* const* in, float** out, size_t size)
|
||||||
|
{
|
||||||
|
// detect current pitch
|
||||||
|
// pitch_detect.update(in[0], size);
|
||||||
|
// if(pitch_detect.available())
|
||||||
|
// {
|
||||||
|
// float read = pitch_detect.read();
|
||||||
|
// if(read >= 35 && read <= 2000)
|
||||||
|
// {
|
||||||
|
// for(int i = 2; i > 0; --i){
|
||||||
|
// last_freqs[i] = last_freqs[i-1];
|
||||||
|
// }
|
||||||
|
// last_freqs[0] = read;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// current_pitch = findMedian(last_freqs[0], last_freqs[1], last_freqs[2]);
|
||||||
|
// in_period = 1.0 / current_pitch * 48000;
|
||||||
|
|
||||||
|
helm.iosamples(in[0], out[0], size);
|
||||||
|
float period = helm.getperiod();
|
||||||
|
float fidel = helm.getfidelity();
|
||||||
|
//DBG("frequency: " << 48000 / period << " fidel: " << fidel);
|
||||||
|
|
||||||
|
// Adjustable filter amount (0.0f = no filtering, 1.0f = max filtering)
|
||||||
|
static float in_period_filter_amount = 0.7f; // You can expose this as a parameter
|
||||||
|
|
||||||
|
if (fidel > 0.95) {
|
||||||
|
// Smoothly filter in_period changes
|
||||||
|
in_period = in_period * in_period_filter_amount + period * (1.0f - in_period_filter_amount);
|
||||||
|
}
|
||||||
|
float in_freq = 48000 / in_period;
|
||||||
|
|
||||||
|
int midi = (int)(12 * log2f(in_freq / 440) + 69.5f);
|
||||||
|
out_midi[MAX_VOICES] = midi;
|
||||||
|
|
||||||
|
static float out_period_filter_amount = 0.7f; // You can expose this as a parameter
|
||||||
|
float target_out_period = 48000.0f / mtof(midi);
|
||||||
|
out_periods[MAX_VOICES] = out_periods[MAX_VOICES] * out_period_filter_amount + target_out_period * (1.0f - out_period_filter_amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shifter::SetRates() {}
|
||||||
|
|
||||||
|
float Shifter::GetOutputEnvelopePeriod(int out_voice) {
|
||||||
|
//TODO add something so that low pitch ratios end up reducing formant_preservation
|
||||||
|
return in_period * formant_preserve + out_periods[out_voice] * (1.0 - formant_preserve);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Shifter::GetPeakIndex() {
|
||||||
|
int index = in_playhead - in_period * 2;
|
||||||
|
if (index < 0)
|
||||||
|
index += BUFFER_SIZE;
|
||||||
|
|
||||||
|
//search for max absolute value
|
||||||
|
int max_index = -1;
|
||||||
|
float max_value = -2;
|
||||||
|
for (int j = 0; j < in_period; ++j)
|
||||||
|
{
|
||||||
|
//float val = fabs(in_buffer[index]);
|
||||||
|
float val = in_buffer[index];
|
||||||
|
if (val > max_value)
|
||||||
|
{
|
||||||
|
max_index = index;
|
||||||
|
max_value = val;
|
||||||
|
}
|
||||||
|
if (++index >= BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
index -= BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
//void Shifter::AddInterpolatedFrame(int voice, int max_index, float resampling_period) {
|
||||||
|
// float period_ratio = resampling_period / out_periods[voice];
|
||||||
|
// float f_index;
|
||||||
|
// f_index = max_index - resampling_period;
|
||||||
|
// if (f_index < 0)
|
||||||
|
// {
|
||||||
|
// f_index += BUFFER_SIZE;
|
||||||
|
// }
|
||||||
|
// float mult = 0;
|
||||||
|
// int out_index = out_playhead;
|
||||||
|
// for (int j = 0; j < resampling_period * 2; ++j)
|
||||||
|
// {
|
||||||
|
// // mult = .5
|
||||||
|
// // * (1 - cosf(2 * PI_F * j / (period_to_use * 2 - 1)));
|
||||||
|
// float interp = f_index - (int)f_index;
|
||||||
|
// mult = .5
|
||||||
|
// * (1 - cos_lookup[(int)((float)j / (resampling_period * 2.0) * 8191.0)]);
|
||||||
|
// float value = ((1 - interp) * in_buffer[(int)f_index] + (interp)*in_buffer[(int)(f_index + 1) % 8192]) * mult;
|
||||||
|
// out_buffer[0][out_index] += value * (1 - out_panning[voice]);
|
||||||
|
// out_buffer[1][out_index] += value * out_panning[voice];
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// f_index += period_ratio;
|
||||||
|
// if (f_index >= BUFFER_SIZE)
|
||||||
|
// {
|
||||||
|
// f_index -= BUFFER_SIZE;
|
||||||
|
// }
|
||||||
|
// if (++out_index >= BUFFER_SIZE)
|
||||||
|
// {
|
||||||
|
// out_index -= BUFFER_SIZE;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
void Shifter::AddInterpolatedFrame(int voice, int max_index, float resampling_period) {
|
||||||
|
float period_ratio = in_period / resampling_period;
|
||||||
|
float f_index;
|
||||||
|
f_index = max_index - in_period;
|
||||||
|
if (f_index < 0)
|
||||||
|
{
|
||||||
|
f_index += BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
float mult = 0;
|
||||||
|
int out_index = out_playhead;
|
||||||
|
for (int j = 0; j < resampling_period * 2; ++j)
|
||||||
|
{
|
||||||
|
// mult = .5
|
||||||
|
// * (1 - cosf(2 * PI_F * j / (period_to_use * 2 - 1)));
|
||||||
|
float interp = f_index - (int)f_index;
|
||||||
|
mult = .5 * (1 - cos_lookup[(int)((float)j / (resampling_period * 2.0) * 8191.0)]);
|
||||||
|
float value = ((1 - interp) * in_buffer[(int)f_index] + (interp)*in_buffer[(int)(f_index + 1) % 8192]) * mult;
|
||||||
|
out_buffer[0][out_index] += value * (1 - out_panning[voice]);
|
||||||
|
out_buffer[1][out_index] += value * out_panning[voice];
|
||||||
|
|
||||||
|
|
||||||
|
f_index += period_ratio;
|
||||||
|
if (f_index >= BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
f_index -= BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
if (++out_index >= BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
out_index -= BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shifter::GetSamples(float** output, const float* input, size_t size)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < size; ++i)
|
||||||
|
{
|
||||||
|
|
||||||
|
//add new samples if necessary
|
||||||
|
for (int out_p = 0; out_p < MAX_VOICES + 1; ++out_p)
|
||||||
|
{
|
||||||
|
if (out_midi[out_p] == -1) continue;
|
||||||
|
if (out_period_counters[out_p] > out_periods[out_p])
|
||||||
|
{
|
||||||
|
out_period_counters[out_p] -= out_periods[out_p];
|
||||||
|
|
||||||
|
float resampling_period = GetOutputEnvelopePeriod(out_p);
|
||||||
|
|
||||||
|
|
||||||
|
//find the start index
|
||||||
|
int max_index = GetPeakIndex();
|
||||||
|
|
||||||
|
//add samples centered on that max
|
||||||
|
AddInterpolatedFrame(out_p, max_index, resampling_period);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//add input samples
|
||||||
|
in_buffer[in_playhead] = input[i];
|
||||||
|
|
||||||
|
//output samples, set to 0
|
||||||
|
for (int ch = 0; ch < 2; ++ch) {
|
||||||
|
output[ch][i] = out_buffer[ch][out_playhead];
|
||||||
|
out_buffer[ch][out_playhead] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//increment playheads
|
||||||
|
if (++in_playhead >= BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
in_playhead -= BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
if (++out_playhead >= BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
out_playhead -= BUFFER_SIZE;
|
||||||
|
}
|
||||||
|
for (int out_p = 0; out_p < MAX_VOICES + 1; ++out_p)
|
||||||
|
{
|
||||||
|
if (out_midi[out_p] == -1) continue;
|
||||||
|
out_period_counters[out_p] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Shifter::AddMidiNote(int note) {
|
||||||
|
for (int i = 0; i < MAX_VOICES; ++i) {
|
||||||
|
if (out_midi[i] == note) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < MAX_VOICES; ++i) {
|
||||||
|
if (out_midi[i] == -1) {
|
||||||
|
out_midi[i] = note;
|
||||||
|
out_periods[i] = 48000.0f / mtof(note);
|
||||||
|
out_period_counters[i] = 0;
|
||||||
|
out_panning[i] = rand() / (float)RAND_MAX;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Shifter::RemoveMidiNote(int note) {
|
||||||
|
for (int i = 0; i < MAX_VOICES; ++i) {
|
||||||
|
if (out_midi[i] == note) {
|
||||||
|
out_midi[i] = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
139
Source/Shifter.h
Normal file
139
Source/Shifter.h
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
#ifndef SHIFTER_H
|
||||||
|
#define SHIFTER_H
|
||||||
|
|
||||||
|
#include "Helmholtz.h"
|
||||||
|
|
||||||
|
#define BUFFER_SIZE 8192
|
||||||
|
#define MAX_VOICES 12
|
||||||
|
|
||||||
|
template <typename T, size_t max_capacity>
|
||||||
|
class circ_queue {
|
||||||
|
public:
|
||||||
|
circ_queue() {
|
||||||
|
head = buffer;
|
||||||
|
tail = buffer;
|
||||||
|
size = 0;
|
||||||
|
capacity = max_capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
void push(T val) {
|
||||||
|
if (size == max_capacity) {
|
||||||
|
pop();
|
||||||
|
}
|
||||||
|
*tail = val;
|
||||||
|
if (++tail >= buffer + max_capacity) {
|
||||||
|
tail -= max_capacity;
|
||||||
|
}
|
||||||
|
size++;
|
||||||
|
//*head = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear() {
|
||||||
|
head = buffer;
|
||||||
|
tail = buffer;
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
T pop() {
|
||||||
|
if (size > 0) {
|
||||||
|
T to_ret = *head;
|
||||||
|
if (++head >= buffer + max_capacity) {
|
||||||
|
head -= max_capacity;
|
||||||
|
}
|
||||||
|
--size;
|
||||||
|
return to_ret;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return T();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
T& get(int indx) {
|
||||||
|
T* ret_ptr = head + indx;
|
||||||
|
if (ret_ptr >= buffer + max_capacity) {
|
||||||
|
ret_ptr -= max_capacity;
|
||||||
|
}
|
||||||
|
return *ret_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
T& operator[](int indx) {
|
||||||
|
T* ret_ptr = head + indx;
|
||||||
|
if (ret_ptr >= buffer + max_capacity) {
|
||||||
|
ret_ptr -= max_capacity;
|
||||||
|
}
|
||||||
|
return *ret_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t capacity;
|
||||||
|
// int size() { return capacity; }
|
||||||
|
size_t size;
|
||||||
|
T buffer[max_capacity];
|
||||||
|
T* head;
|
||||||
|
T* tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Shifter {
|
||||||
|
public:
|
||||||
|
void Init();
|
||||||
|
void Process(const float* const* in,
|
||||||
|
float** out,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
|
void AddMidiNote(int note);
|
||||||
|
void RemoveMidiNote(int note);
|
||||||
|
void SetFormantPreserve(float val) { formant_preserve = val; }
|
||||||
|
|
||||||
|
int out_midi[MAX_VOICES + 1] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };
|
||||||
|
|
||||||
|
private:
|
||||||
|
void DetectPitch(const float* const* in, float** out, size_t size);
|
||||||
|
void SetRates();
|
||||||
|
void GetSamples(float** output, const float* input, size_t size);
|
||||||
|
float GetOutputEnvelopePeriod(int out_voice);
|
||||||
|
int GetPeakIndex();
|
||||||
|
void AddInterpolatedFrame(int voice, int max_index, float period_to_use);
|
||||||
|
|
||||||
|
Helmholtz helm;
|
||||||
|
// GranularSustain player;
|
||||||
|
|
||||||
|
int selected_sample;
|
||||||
|
bool playing;
|
||||||
|
bool looping;
|
||||||
|
bool loop_engaged;
|
||||||
|
float play_head;
|
||||||
|
float rate_factor;
|
||||||
|
float sample_freq = 440;
|
||||||
|
float freq_target = 440;
|
||||||
|
float last_freq = 440;
|
||||||
|
double current_pitch = 440;
|
||||||
|
double smear_thresh = .085;
|
||||||
|
double smear_step = 0.003;
|
||||||
|
bool onset_trigger = false;
|
||||||
|
bool pitch_trigger = false;
|
||||||
|
|
||||||
|
int trigger_bank;
|
||||||
|
|
||||||
|
circ_queue<float, 3> prev_freqs;
|
||||||
|
|
||||||
|
float formant_preserve = 0;
|
||||||
|
|
||||||
|
|
||||||
|
float volume;
|
||||||
|
float pitch_adj;
|
||||||
|
bool last_record;
|
||||||
|
int record_playhead;
|
||||||
|
bool dry_wet = false;
|
||||||
|
bool is_pitched = true;
|
||||||
|
float last_freqs[3];
|
||||||
|
float in_buffer[BUFFER_SIZE];
|
||||||
|
float out_buffer[2][BUFFER_SIZE];
|
||||||
|
int out_playhead = 0;
|
||||||
|
int in_playhead = 0;
|
||||||
|
|
||||||
|
float out_periods[MAX_VOICES + 1] = { 0,0,0,0,0,0,0,0,0,0,0,0 }; //C3
|
||||||
|
float out_panning[MAX_VOICES + 1] = { 0,0,0,0,0,0,0,0,0,0,0,.5 }; //C3
|
||||||
|
float in_period = 366.936;
|
||||||
|
float out_period_counters[MAX_VOICES + 1] = { 0,0,0,0,0,0,0,0,0,0,0,0 };
|
||||||
|
float cos_lookup[8192];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
657
Source/WebViewPluginDemo.h
Normal file
657
Source/WebViewPluginDemo.h
Normal file
@ -0,0 +1,657 @@
|
|||||||
|
/*
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This file is part of the JUCE framework examples.
|
||||||
|
Copyright (c) Raw Material Software Limited
|
||||||
|
|
||||||
|
The code included in this file is provided under the terms of the ISC license
|
||||||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||||
|
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||||
|
without fee is hereby granted provided that the above copyright notice and
|
||||||
|
this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
The block below describes the properties of this PIP. A PIP is a short snippet
|
||||||
|
of code that can be read by the Projucer and used to generate a JUCE project.
|
||||||
|
|
||||||
|
BEGIN_JUCE_PIP_METADATA
|
||||||
|
|
||||||
|
name: WebViewPluginDemo
|
||||||
|
version: 1.0.0
|
||||||
|
vendor: JUCE
|
||||||
|
website: http://juce.com
|
||||||
|
description: Filtering audio plugin using an HTML/JS user interface
|
||||||
|
|
||||||
|
dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats,
|
||||||
|
juce_audio_plugin_client, juce_audio_processors, juce_dsp,
|
||||||
|
juce_audio_utils, juce_core, juce_data_structures,
|
||||||
|
juce_events, juce_graphics, juce_gui_basics, juce_gui_extra
|
||||||
|
exporters: xcode_mac, vs2022, linux_make, androidstudio, xcode_iphone
|
||||||
|
|
||||||
|
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1, JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1
|
||||||
|
|
||||||
|
type: AudioProcessor
|
||||||
|
mainClass: WebViewPluginAudioProcessorWrapper
|
||||||
|
|
||||||
|
useLocalCopy: 1
|
||||||
|
|
||||||
|
END_JUCE_PIP_METADATA
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "DemoUtilities.h"
|
||||||
|
#include <JuceHeader.h>
|
||||||
|
#include "Shifter.h"
|
||||||
|
|
||||||
|
//using namespace juce::dsp;
|
||||||
|
|
||||||
|
namespace ID
|
||||||
|
{
|
||||||
|
#define PARAMETER_ID(str) static const ParameterID str { #str, 1 };
|
||||||
|
|
||||||
|
PARAMETER_ID(formantPreserve)
|
||||||
|
PARAMETER_ID(mute)
|
||||||
|
PARAMETER_ID(filterType)
|
||||||
|
|
||||||
|
#undef PARAMETER_ID
|
||||||
|
}
|
||||||
|
|
||||||
|
class CircularBuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CircularBuffer(int numChannels, int numSamples)
|
||||||
|
: buffer(data, (size_t)numChannels, (size_t)numSamples)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void push(dsp::AudioBlock<T> b)
|
||||||
|
{
|
||||||
|
jassert(b.getNumChannels() == buffer.getNumChannels());
|
||||||
|
|
||||||
|
const auto trimmed = b.getSubBlock(b.getNumSamples()
|
||||||
|
- std::min(b.getNumSamples(), buffer.getNumSamples()));
|
||||||
|
|
||||||
|
const auto bufferLength = (int64)buffer.getNumSamples();
|
||||||
|
|
||||||
|
for (auto samplesRemaining = (int64)trimmed.getNumSamples(); samplesRemaining > 0;)
|
||||||
|
{
|
||||||
|
const auto writeOffset = writeIx % bufferLength;
|
||||||
|
const auto numSamplesToWrite = std::min(samplesRemaining, bufferLength - writeOffset);
|
||||||
|
|
||||||
|
auto destSubBlock = buffer.getSubBlock((size_t)writeOffset, (size_t)numSamplesToWrite);
|
||||||
|
const auto sourceSubBlock = trimmed.getSubBlock(trimmed.getNumSamples() - (size_t)samplesRemaining,
|
||||||
|
(size_t)numSamplesToWrite);
|
||||||
|
|
||||||
|
destSubBlock.copyFrom(sourceSubBlock);
|
||||||
|
|
||||||
|
samplesRemaining -= numSamplesToWrite;
|
||||||
|
writeIx += numSamplesToWrite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void push(Span<T> s)
|
||||||
|
{
|
||||||
|
auto* ptr = s.begin();
|
||||||
|
dsp::AudioBlock<T> b(&ptr, 1, s.size());
|
||||||
|
push(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
void read(int64 readIx, dsp::AudioBlock<float> output) const
|
||||||
|
{
|
||||||
|
const auto numChannelsToUse = std::min(buffer.getNumChannels(), output.getNumChannels());
|
||||||
|
|
||||||
|
jassert(output.getNumChannels() == buffer.getNumChannels());
|
||||||
|
|
||||||
|
const auto bufferLength = (int64)buffer.getNumSamples();
|
||||||
|
|
||||||
|
for (auto outputOffset = (size_t)0; outputOffset < output.getNumSamples();)
|
||||||
|
{
|
||||||
|
const auto inputOffset = (size_t)((readIx + (int64)outputOffset) % bufferLength);
|
||||||
|
const auto numSamplesToRead = std::min(output.getNumSamples() - outputOffset,
|
||||||
|
(size_t)bufferLength - inputOffset);
|
||||||
|
|
||||||
|
auto destSubBlock = output.getSubBlock(outputOffset, numSamplesToRead)
|
||||||
|
.getSubsetChannelBlock(0, numChannelsToUse);
|
||||||
|
|
||||||
|
destSubBlock.copyFrom(buffer.getSubBlock(inputOffset, numSamplesToRead)
|
||||||
|
.getSubsetChannelBlock(0, numChannelsToUse));
|
||||||
|
|
||||||
|
outputOffset += numSamplesToRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int64 getWriteIndex() const noexcept { return writeIx; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
HeapBlock<char> data;
|
||||||
|
dsp::AudioBlock<float> buffer;
|
||||||
|
int64 writeIx = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpectralBars
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//template <typename T>
|
||||||
|
void push(int data)
|
||||||
|
{
|
||||||
|
testQueue.push(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void compute(Span<int> output) {
|
||||||
|
int index = 0;
|
||||||
|
for (auto it = output.begin(); it != output.end(); ++it) {
|
||||||
|
*it = testQueue.get(index++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
circ_queue<int, 256> testQueue;
|
||||||
|
};
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
class WebViewPluginAudioProcessor : public AudioProcessor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//==============================================================================
|
||||||
|
WebViewPluginAudioProcessor(AudioProcessorValueTreeState::ParameterLayout layout);
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void prepareToPlay(double sampleRate, int samplesPerBlock) override;
|
||||||
|
void releaseResources() override {}
|
||||||
|
|
||||||
|
bool isBusesLayoutSupported(const BusesLayout& layouts) const override;
|
||||||
|
|
||||||
|
void processBlock(AudioBuffer<float>&, MidiBuffer&) override;
|
||||||
|
using AudioProcessor::processBlock;
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
const String getName() const override { return JucePlugin_Name; }
|
||||||
|
|
||||||
|
bool acceptsMidi() const override { return false; }
|
||||||
|
bool producesMidi() const override { return false; }
|
||||||
|
bool isMidiEffect() const override { return false; }
|
||||||
|
double getTailLengthSeconds() const override { return 0.0; }
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
int getNumPrograms() override { return 1; }
|
||||||
|
int getCurrentProgram() override { return 0; }
|
||||||
|
void setCurrentProgram(int) override {}
|
||||||
|
const String getProgramName(int) override { return {}; }
|
||||||
|
void changeProgramName(int, const String&) override {}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void getStateInformation(MemoryBlock& destData) override;
|
||||||
|
void setStateInformation(const void* data, int sizeInBytes) override;
|
||||||
|
|
||||||
|
struct Parameters
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Parameters(AudioProcessorValueTreeState::ParameterLayout& layout)
|
||||||
|
: formantPreserve(addToLayout<AudioParameterFloat>(layout,
|
||||||
|
ID::formantPreserve,
|
||||||
|
"Formant Preserve",
|
||||||
|
NormalisableRange<float> {0.0f, 1.0f, .01f},
|
||||||
|
.5f)),
|
||||||
|
|
||||||
|
autoTuneSpeed(addToLayout<AudioParameterFloat>(layout,
|
||||||
|
ID::formantPreserve,
|
||||||
|
"AutoTuneSpeed",
|
||||||
|
NormalisableRange<float> {0.0f, 1.0f, .01f},
|
||||||
|
.5f)),
|
||||||
|
mute(addToLayout<AudioParameterBool>(layout, ID::mute, "Mute", false)),
|
||||||
|
filterType(addToLayout<AudioParameterChoice>(layout,
|
||||||
|
ID::filterType,
|
||||||
|
"Filter type",
|
||||||
|
StringArray{ "Low-pass", "High-pass", "Band-pass" },
|
||||||
|
0))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioParameterFloat& formantPreserve;
|
||||||
|
AudioParameterFloat& autoTuneSpeed;
|
||||||
|
AudioParameterBool& mute;
|
||||||
|
AudioParameterChoice& filterType;
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <typename Param>
|
||||||
|
static void add(AudioProcessorParameterGroup& group, std::unique_ptr<Param> param)
|
||||||
|
{
|
||||||
|
group.addChild(std::move(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Param>
|
||||||
|
static void add(AudioProcessorValueTreeState::ParameterLayout& group, std::unique_ptr<Param> param)
|
||||||
|
{
|
||||||
|
group.add(std::move(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Param, typename Group, typename... Ts>
|
||||||
|
static Param& addToLayout(Group& layout, Ts&&... ts)
|
||||||
|
{
|
||||||
|
auto param = std::make_unique<Param>(std::forward<Ts>(ts)...);
|
||||||
|
auto& ref = *param;
|
||||||
|
add(layout, std::move(param));
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Parameters parameters;
|
||||||
|
AudioProcessorValueTreeState state;
|
||||||
|
|
||||||
|
std::vector<int> spectrumData = [] { return std::vector<int>(256, 0.0f); }();
|
||||||
|
SpinLock spectrumDataLock;
|
||||||
|
|
||||||
|
SpectralBars spectralBars;
|
||||||
|
|
||||||
|
dsp::LadderFilter<float> filter;
|
||||||
|
|
||||||
|
private:
|
||||||
|
//==============================================================================
|
||||||
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WebViewPluginAudioProcessor)
|
||||||
|
Shifter shifter;
|
||||||
|
};
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
WebViewPluginAudioProcessor::WebViewPluginAudioProcessor(AudioProcessorValueTreeState::ParameterLayout layout)
|
||||||
|
: AudioProcessor(BusesProperties()
|
||||||
|
#if ! JucePlugin_IsMidiEffect
|
||||||
|
#if ! JucePlugin_IsSynth
|
||||||
|
.withInput("Input", juce::AudioChannelSet::stereo(), true)
|
||||||
|
#endif
|
||||||
|
.withOutput("Output", juce::AudioChannelSet::stereo(), true)
|
||||||
|
#endif
|
||||||
|
),
|
||||||
|
parameters(layout),
|
||||||
|
state(*this, nullptr, "STATE", std::move(layout))
|
||||||
|
{
|
||||||
|
shifter.Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void WebViewPluginAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock)
|
||||||
|
{
|
||||||
|
const auto channels = std::max(getTotalNumInputChannels(), getTotalNumOutputChannels());
|
||||||
|
|
||||||
|
if (channels == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
filter.prepare({ sampleRate, (uint32_t)samplesPerBlock, (uint32_t)channels });
|
||||||
|
filter.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WebViewPluginAudioProcessor::isBusesLayoutSupported(const BusesLayout& layouts) const
|
||||||
|
{
|
||||||
|
if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono()
|
||||||
|
&& layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebViewPluginAudioProcessor::processBlock(juce::AudioBuffer<float>& buffer,
|
||||||
|
juce::MidiBuffer& midi)
|
||||||
|
{
|
||||||
|
juce::ScopedNoDenormals noDenormals;
|
||||||
|
|
||||||
|
const auto totalNumInputChannels = getTotalNumInputChannels();
|
||||||
|
const auto totalNumOutputChannels = getTotalNumOutputChannels();
|
||||||
|
|
||||||
|
for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i)
|
||||||
|
buffer.clear(i, 0, buffer.getNumSamples());
|
||||||
|
shifter.SetFormantPreserve(parameters.formantPreserve.get());
|
||||||
|
juce::AudioBuffer<float> const_buff;
|
||||||
|
const_buff.makeCopyOf(buffer);
|
||||||
|
shifter.Process(const_buff.getArrayOfReadPointers(), (float**)buffer.getArrayOfWritePointers(), buffer.getNumSamples());
|
||||||
|
|
||||||
|
for (const auto metadata : midi)
|
||||||
|
{
|
||||||
|
const auto msg = metadata.getMessage();
|
||||||
|
if (msg.isNoteOn()) shifter.AddMidiNote(msg.getNoteNumber());
|
||||||
|
else if (msg.isNoteOff()) shifter.RemoveMidiNote(msg.getNoteNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
//DBG(shifter.out_midi[MAX_VOICES]);
|
||||||
|
//push midi note
|
||||||
|
spectralBars.push(shifter.out_midi[MAX_VOICES]);
|
||||||
|
const SpinLock::ScopedTryLockType lock(spectrumDataLock);
|
||||||
|
|
||||||
|
if (!lock.isLocked())
|
||||||
|
return;
|
||||||
|
|
||||||
|
spectralBars.compute({ spectrumData.data(), spectrumData.size() });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*for(auto i = 0; i < buffer.getNumSamples(); ++i)
|
||||||
|
{
|
||||||
|
bool process = (i % 256) == 0 && i != 0;
|
||||||
|
|
||||||
|
for(auto j = 0; j < totalNumInputChannels; ++j)
|
||||||
|
{
|
||||||
|
input[j][i] = buffer.getReadPointer(j)[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filter.setCutoffFrequencyHz (parameters.cutoffFreqHz.get());
|
||||||
|
|
||||||
|
const auto filterMode = [this]
|
||||||
|
{
|
||||||
|
switch (parameters.filterType.getIndex())
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return dsp::LadderFilter<float>::Mode::LPF12;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return dsp::LadderFilter<float>::Mode::HPF12;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return dsp::LadderFilter<float>::Mode::BPF12;
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
filter.setMode (filterMode);
|
||||||
|
|
||||||
|
auto outBlock = dsp::AudioBlock<float> { buffer }.getSubsetChannelBlock (0, (size_t) getTotalNumOutputChannels());
|
||||||
|
|
||||||
|
if (parameters.mute.get())
|
||||||
|
outBlock.clear();
|
||||||
|
|
||||||
|
filter.process (dsp::ProcessContextReplacing<float> (outBlock));
|
||||||
|
|
||||||
|
spectralBars.push (Span { buffer.getReadPointer (0), (size_t) buffer.getNumSamples() });
|
||||||
|
|
||||||
|
{
|
||||||
|
const SpinLock::ScopedTryLockType lock (spectrumDataLock);
|
||||||
|
|
||||||
|
if (! lock.isLocked())
|
||||||
|
return;
|
||||||
|
|
||||||
|
spectralBars.compute ({ spectrumData.data(), spectrumData.size() });
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void WebViewPluginAudioProcessor::getStateInformation(juce::MemoryBlock& destData)
|
||||||
|
{
|
||||||
|
juce::ignoreUnused(destData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebViewPluginAudioProcessor::setStateInformation(const void* data, int sizeInBytes)
|
||||||
|
{
|
||||||
|
juce::ignoreUnused(data, sizeInBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern const String localDevServerAddress;
|
||||||
|
|
||||||
|
std::optional<WebBrowserComponent::Resource> getResource(const String& url);
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
struct SinglePageBrowser : WebBrowserComponent
|
||||||
|
{
|
||||||
|
using WebBrowserComponent::WebBrowserComponent;
|
||||||
|
|
||||||
|
// Prevent page loads from navigating away from our single page web app
|
||||||
|
bool pageAboutToLoad(const String& newURL) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
class WebViewPluginAudioProcessorEditor : public AudioProcessorEditor, private Timer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit WebViewPluginAudioProcessorEditor(WebViewPluginAudioProcessor&);
|
||||||
|
|
||||||
|
std::optional<WebBrowserComponent::Resource> getResource(const String& url);
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void paint(Graphics&) override;
|
||||||
|
void resized() override;
|
||||||
|
|
||||||
|
int getControlParameterIndex(Component&) override
|
||||||
|
{
|
||||||
|
return controlParameterIndexReceiver.getControlParameterIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
void timerCallback() override
|
||||||
|
{
|
||||||
|
static constexpr size_t numFramesBuffered = 5;
|
||||||
|
|
||||||
|
SpinLock::ScopedLockType lock{ processorRef.spectrumDataLock };
|
||||||
|
|
||||||
|
Array<var> frame;
|
||||||
|
|
||||||
|
for (size_t i = 1; i < processorRef.spectrumData.size(); ++i)
|
||||||
|
frame.add(processorRef.spectrumData[i]);
|
||||||
|
|
||||||
|
spectrumDataFrames.clear();
|
||||||
|
|
||||||
|
spectrumDataFrames.push_back(std::move(frame));
|
||||||
|
|
||||||
|
while (spectrumDataFrames.size() > numFramesBuffered)
|
||||||
|
spectrumDataFrames.pop_front();
|
||||||
|
|
||||||
|
static int64 callbackCounter = 0;
|
||||||
|
|
||||||
|
/*if ( spectrumDataFrames.size() == numFramesBuffered
|
||||||
|
&& callbackCounter++ % (int64) numFramesBuffered)
|
||||||
|
{*/
|
||||||
|
webComponent.emitEventIfBrowserIsVisible("spectrumData", var{});
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
WebViewPluginAudioProcessor& processorRef;
|
||||||
|
|
||||||
|
WebSliderRelay formantSliderRelay{ "formantSlider" };
|
||||||
|
WebToggleButtonRelay muteToggleRelay{ "muteToggle" };
|
||||||
|
WebComboBoxRelay filterTypeComboRelay{ "filterTypeCombo" };
|
||||||
|
|
||||||
|
WebControlParameterIndexReceiver controlParameterIndexReceiver;
|
||||||
|
|
||||||
|
SinglePageBrowser webComponent{ WebBrowserComponent::Options{}
|
||||||
|
.withBackend(WebBrowserComponent::Options::Backend::webview2)
|
||||||
|
.withWinWebView2Options(WebBrowserComponent::Options::WinWebView2{}
|
||||||
|
.withUserDataFolder(File::getSpecialLocation(File::SpecialLocationType::tempDirectory)))
|
||||||
|
.withNativeIntegrationEnabled()
|
||||||
|
.withOptionsFrom(formantSliderRelay)
|
||||||
|
.withOptionsFrom(muteToggleRelay)
|
||||||
|
.withOptionsFrom(filterTypeComboRelay)
|
||||||
|
.withOptionsFrom(controlParameterIndexReceiver)
|
||||||
|
.withNativeFunction("sayHello", [](auto& var, auto complete)
|
||||||
|
{
|
||||||
|
complete("Hello " + var[0].toString());
|
||||||
|
})
|
||||||
|
.withResourceProvider([this](const auto& url)
|
||||||
|
{
|
||||||
|
return getResource(url);
|
||||||
|
},
|
||||||
|
URL { localDevServerAddress }.getOrigin()) };
|
||||||
|
|
||||||
|
WebSliderParameterAttachment formantAttachment;
|
||||||
|
WebToggleButtonParameterAttachment muteAttachment;
|
||||||
|
WebComboBoxParameterAttachment filterTypeAttachment;
|
||||||
|
|
||||||
|
std::deque<Array<var>> spectrumDataFrames;
|
||||||
|
|
||||||
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WebViewPluginAudioProcessorEditor)
|
||||||
|
};
|
||||||
|
|
||||||
|
static ZipFile* getZipFile()
|
||||||
|
{
|
||||||
|
static auto stream = createAssetInputStream("webviewplugin-gui_1.0.0.zip", AssertAssetExists::no);
|
||||||
|
|
||||||
|
if (stream == nullptr)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
static ZipFile f{ stream.get(), false };
|
||||||
|
return &f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* getMimeForExtension(const String& extension)
|
||||||
|
{
|
||||||
|
static const std::unordered_map<String, const char*> mimeMap =
|
||||||
|
{
|
||||||
|
{ { "htm" }, "text/html" },
|
||||||
|
{ { "html" }, "text/html" },
|
||||||
|
{ { "txt" }, "text/plain" },
|
||||||
|
{ { "jpg" }, "image/jpeg" },
|
||||||
|
{ { "jpeg" }, "image/jpeg" },
|
||||||
|
{ { "svg" }, "image/svg+xml" },
|
||||||
|
{ { "ico" }, "image/vnd.microsoft.icon" },
|
||||||
|
{ { "json" }, "application/json" },
|
||||||
|
{ { "png" }, "image/png" },
|
||||||
|
{ { "css" }, "text/css" },
|
||||||
|
{ { "map" }, "application/json" },
|
||||||
|
{ { "js" }, "text/javascript" },
|
||||||
|
{ { "woff2" }, "font/woff2" }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (const auto it = mimeMap.find(extension.toLowerCase()); it != mimeMap.end())
|
||||||
|
return it->second;
|
||||||
|
|
||||||
|
jassertfalse;
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getExtension(String filename)
|
||||||
|
{
|
||||||
|
return filename.fromLastOccurrenceOf(".", false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static auto streamToVector(InputStream& stream)
|
||||||
|
{
|
||||||
|
std::vector<std::byte> result((size_t)stream.getTotalLength());
|
||||||
|
stream.setPosition(0);
|
||||||
|
[[maybe_unused]] const auto bytesRead = stream.read(result.data(), result.size());
|
||||||
|
jassert(bytesRead == (ssize_t)result.size());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<WebBrowserComponent::Resource> WebViewPluginAudioProcessorEditor::getResource(const String& url)
|
||||||
|
{
|
||||||
|
const auto urlToRetrive = url == "/" ? String{ "index.html" }
|
||||||
|
: url.fromFirstOccurrenceOf("/", false, false);
|
||||||
|
|
||||||
|
if (auto* archive = getZipFile())
|
||||||
|
{
|
||||||
|
if (auto* entry = archive->getEntry(urlToRetrive))
|
||||||
|
{
|
||||||
|
auto stream = rawToUniquePtr(archive->createStreamForEntry(*entry));
|
||||||
|
auto v = streamToVector(*stream);
|
||||||
|
auto mime = getMimeForExtension(getExtension(entry->filename).toLowerCase());
|
||||||
|
return WebBrowserComponent::Resource{ std::move(v),
|
||||||
|
std::move(mime) };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (urlToRetrive == "index.html")
|
||||||
|
{
|
||||||
|
auto fallbackIndexHtml = createAssetInputStream("webviewplugin-gui-fallback.html");
|
||||||
|
return WebBrowserComponent::Resource{ streamToVector(*fallbackIndexHtml),
|
||||||
|
String { "text/html" } };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (urlToRetrive == "data.txt")
|
||||||
|
{
|
||||||
|
WebBrowserComponent::Resource resource;
|
||||||
|
static constexpr char testData[] = "testdata";
|
||||||
|
MemoryInputStream stream{ testData, numElementsInArray(testData) - 1, false };
|
||||||
|
return WebBrowserComponent::Resource{ streamToVector(stream), String { "text/html" } };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (urlToRetrive == "spectrumData.json")
|
||||||
|
{
|
||||||
|
Array<var> frames;
|
||||||
|
|
||||||
|
for (const auto& frame : spectrumDataFrames)
|
||||||
|
frames.add(frame);
|
||||||
|
|
||||||
|
DynamicObject::Ptr d(new DynamicObject());
|
||||||
|
d->setProperty("timeResolutionMs", getTimerInterval());
|
||||||
|
d->setProperty("frames", std::move(frames));
|
||||||
|
|
||||||
|
const auto s = JSON::toString(d.get());
|
||||||
|
MemoryInputStream stream{ s.getCharPointer(), s.getNumBytesAsUTF8(), false };
|
||||||
|
return WebBrowserComponent::Resource{ streamToVector(stream), String { "application/json" } };
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if JUCE_ANDROID
|
||||||
|
// The localhost is available on this address to the emulator
|
||||||
|
const String localDevServerAddress = "http://10.0.2.2:3000/";
|
||||||
|
#else
|
||||||
|
const String localDevServerAddress = "http://localhost:3000/";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool SinglePageBrowser::pageAboutToLoad(const String& newURL)
|
||||||
|
{
|
||||||
|
return newURL == localDevServerAddress || newURL == getResourceProviderRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
WebViewPluginAudioProcessorEditor::WebViewPluginAudioProcessorEditor(WebViewPluginAudioProcessor& p)
|
||||||
|
: AudioProcessorEditor(&p), processorRef(p),
|
||||||
|
formantAttachment(*processorRef.state.getParameter(ID::formantPreserve.getParamID()),
|
||||||
|
formantSliderRelay,
|
||||||
|
processorRef.state.undoManager),
|
||||||
|
muteAttachment(*processorRef.state.getParameter(ID::mute.getParamID()),
|
||||||
|
muteToggleRelay,
|
||||||
|
processorRef.state.undoManager),
|
||||||
|
filterTypeAttachment(*processorRef.state.getParameter(ID::filterType.getParamID()),
|
||||||
|
filterTypeComboRelay,
|
||||||
|
processorRef.state.undoManager)
|
||||||
|
{
|
||||||
|
addAndMakeVisible(webComponent);
|
||||||
|
|
||||||
|
webComponent.goToURL(localDevServerAddress);
|
||||||
|
//webComponent.goToURL (WebBrowserComponent::getResourceProviderRoot());
|
||||||
|
|
||||||
|
setSize(500, 500);
|
||||||
|
|
||||||
|
startTimerHz(20);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
void WebViewPluginAudioProcessorEditor::paint(Graphics& g)
|
||||||
|
{
|
||||||
|
// (Our component is opaque, so we must completely fill the background with a solid colour)
|
||||||
|
g.fillAll(getLookAndFeel().findColour(ResizableWindow::backgroundColourId));
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebViewPluginAudioProcessorEditor::resized()
|
||||||
|
{
|
||||||
|
webComponent.setBounds(getLocalBounds());
|
||||||
|
}
|
||||||
|
|
||||||
|
class WebViewPluginAudioProcessorWrapper : public WebViewPluginAudioProcessor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WebViewPluginAudioProcessorWrapper() : WebViewPluginAudioProcessor({})
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasEditor() const override { return true; }
|
||||||
|
AudioProcessorEditor* createEditor() override { return new WebViewPluginAudioProcessorEditor(*this); }
|
||||||
|
};
|
||||||
419
Source/mayer_fft.cpp
Normal file
419
Source/mayer_fft.cpp
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
/* This is the FFT routine taken from PureData, a great piece of
|
||||||
|
software by Miller S. Puckette.
|
||||||
|
http://crca.ucsd.edu/~msp/software.html */
|
||||||
|
|
||||||
|
/*
|
||||||
|
** FFT and FHT routines
|
||||||
|
** Copyright 1988, 1993; Ron Mayer
|
||||||
|
**
|
||||||
|
** mayer_fht(fz,n);
|
||||||
|
** Does a hartley transform of "n" points in the array "fz".
|
||||||
|
** mayer_fft(n,real,imag)
|
||||||
|
** Does a fourier transform of "n" points of the "real" and
|
||||||
|
** "imag" arrays.
|
||||||
|
** mayer_ifft(n,real,imag)
|
||||||
|
** Does an inverse fourier transform of "n" points of the "real"
|
||||||
|
** and "imag" arrays.
|
||||||
|
** mayer_realfft(n,real)
|
||||||
|
** Does a real-valued fourier transform of "n" points of the
|
||||||
|
** "real" array. The real part of the transform ends
|
||||||
|
** up in the first half of the array and the imaginary part of the
|
||||||
|
** transform ends up in the second half of the array.
|
||||||
|
** mayer_realifft(n,real)
|
||||||
|
** The inverse of the realfft() routine above.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** NOTE: This routine uses at least 2 patented algorithms, and may be
|
||||||
|
** under the restrictions of a bunch of different organizations.
|
||||||
|
** Although I wrote it completely myself, it is kind of a derivative
|
||||||
|
** of a routine I once authored and released under the GPL, so it
|
||||||
|
** may fall under the free software foundation's restrictions;
|
||||||
|
** it was worked on as a Stanford Univ project, so they claim
|
||||||
|
** some rights to it; it was further optimized at work here, so
|
||||||
|
** I think this company claims parts of it. The patents are
|
||||||
|
** held by R. Bracewell (the FHT algorithm) and O. Buneman (the
|
||||||
|
** trig generator), both at Stanford Univ.
|
||||||
|
** If it were up to me, I'd say go do whatever you want with it;
|
||||||
|
** but it would be polite to give credit to the following people
|
||||||
|
** if you use this anywhere:
|
||||||
|
** Euler - probable inventor of the fourier transform.
|
||||||
|
** Gauss - probable inventor of the FFT.
|
||||||
|
** Hartley - probable inventor of the hartley transform.
|
||||||
|
** Buneman - for a really cool trig generator
|
||||||
|
** Mayer(me) - for authoring this particular version and
|
||||||
|
** including all the optimizations in one package.
|
||||||
|
** Thanks,
|
||||||
|
** Ron Mayer; mayer@acuson.com
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is a slightly modified version of Mayer's contribution; write
|
||||||
|
* msp@ucsd.edu for the original code. Kudos to Mayer for a fine piece
|
||||||
|
* of work. -msp
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define REAL float
|
||||||
|
#define GOOD_TRIG
|
||||||
|
|
||||||
|
#ifdef GOOD_TRIG
|
||||||
|
#else
|
||||||
|
#define FAST_TRIG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(GOOD_TRIG)
|
||||||
|
#define FHT_SWAP(a,b,t) {(t)=(a);(a)=(b);(b)=(t);}
|
||||||
|
#define TRIG_VARS \
|
||||||
|
int t_lam=0;
|
||||||
|
#define TRIG_INIT(k,c,s) \
|
||||||
|
{ \
|
||||||
|
int i; \
|
||||||
|
for (i=2 ; i<=k ; i++) \
|
||||||
|
{coswrk[i]=costab[i];sinwrk[i]=sintab[i];} \
|
||||||
|
t_lam = 0; \
|
||||||
|
c = 1; \
|
||||||
|
s = 0; \
|
||||||
|
}
|
||||||
|
#define TRIG_NEXT(k,c,s) \
|
||||||
|
{ \
|
||||||
|
int i,j; \
|
||||||
|
(t_lam)++; \
|
||||||
|
for (i=0 ; !((1<<i)&t_lam) ; i++); \
|
||||||
|
i = k-i; \
|
||||||
|
s = sinwrk[i]; \
|
||||||
|
c = coswrk[i]; \
|
||||||
|
if (i>1) \
|
||||||
|
{ \
|
||||||
|
for (j=k-i+2 ; (1<<j)&t_lam ; j++); \
|
||||||
|
j = k - j; \
|
||||||
|
sinwrk[i] = halsec[i] * (sinwrk[i-1] + sinwrk[j]); \
|
||||||
|
coswrk[i] = halsec[i] * (coswrk[i-1] + coswrk[j]); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
#define TRIG_RESET(k,c,s)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(FAST_TRIG)
|
||||||
|
#define TRIG_VARS \
|
||||||
|
REAL t_c,t_s;
|
||||||
|
#define TRIG_INIT(k,c,s) \
|
||||||
|
{ \
|
||||||
|
t_c = costab[k]; \
|
||||||
|
t_s = sintab[k]; \
|
||||||
|
c = 1; \
|
||||||
|
s = 0; \
|
||||||
|
}
|
||||||
|
#define TRIG_NEXT(k,c,s) \
|
||||||
|
{ \
|
||||||
|
REAL t = c; \
|
||||||
|
c = t*t_c - s*t_s; \
|
||||||
|
s = t*t_s + s*t_c; \
|
||||||
|
}
|
||||||
|
#define TRIG_RESET(k,c,s)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static REAL halsec[20] =
|
||||||
|
{
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
.54119610014619698439972320536638942006107206337801,
|
||||||
|
.50979557910415916894193980398784391368261849190893,
|
||||||
|
.50241928618815570551167011928012092247859337193963,
|
||||||
|
.50060299823519630134550410676638239611758632599591,
|
||||||
|
.50015063602065098821477101271097658495974913010340,
|
||||||
|
.50003765191554772296778139077905492847503165398345,
|
||||||
|
.50000941253588775676512870469186533538523133757983,
|
||||||
|
.50000235310628608051401267171204408939326297376426,
|
||||||
|
.50000058827484117879868526730916804925780637276181,
|
||||||
|
.50000014706860214875463798283871198206179118093251,
|
||||||
|
.50000003676714377807315864400643020315103490883972,
|
||||||
|
.50000000919178552207366560348853455333939112569380,
|
||||||
|
.50000000229794635411562887767906868558991922348920,
|
||||||
|
.50000000057448658687873302235147272458812263401372
|
||||||
|
};
|
||||||
|
static REAL costab[20] =
|
||||||
|
{
|
||||||
|
.00000000000000000000000000000000000000000000000000,
|
||||||
|
.70710678118654752440084436210484903928483593768847,
|
||||||
|
.92387953251128675612818318939678828682241662586364,
|
||||||
|
.98078528040323044912618223613423903697393373089333,
|
||||||
|
.99518472667219688624483695310947992157547486872985,
|
||||||
|
.99879545620517239271477160475910069444320361470461,
|
||||||
|
.99969881869620422011576564966617219685006108125772,
|
||||||
|
.99992470183914454092164649119638322435060646880221,
|
||||||
|
.99998117528260114265699043772856771617391725094433,
|
||||||
|
.99999529380957617151158012570011989955298763362218,
|
||||||
|
.99999882345170190992902571017152601904826792288976,
|
||||||
|
.99999970586288221916022821773876567711626389934930,
|
||||||
|
.99999992646571785114473148070738785694820115568892,
|
||||||
|
.99999998161642929380834691540290971450507605124278,
|
||||||
|
.99999999540410731289097193313960614895889430318945,
|
||||||
|
.99999999885102682756267330779455410840053741619428
|
||||||
|
};
|
||||||
|
static REAL sintab[20] =
|
||||||
|
{
|
||||||
|
1.0000000000000000000000000000000000000000000000000,
|
||||||
|
.70710678118654752440084436210484903928483593768846,
|
||||||
|
.38268343236508977172845998403039886676134456248561,
|
||||||
|
.19509032201612826784828486847702224092769161775195,
|
||||||
|
.09801714032956060199419556388864184586113667316749,
|
||||||
|
.04906767432741801425495497694268265831474536302574,
|
||||||
|
.02454122852291228803173452945928292506546611923944,
|
||||||
|
.01227153828571992607940826195100321214037231959176,
|
||||||
|
.00613588464915447535964023459037258091705788631738,
|
||||||
|
.00306795676296597627014536549091984251894461021344,
|
||||||
|
.00153398018628476561230369715026407907995486457522,
|
||||||
|
.00076699031874270452693856835794857664314091945205,
|
||||||
|
.00038349518757139558907246168118138126339502603495,
|
||||||
|
.00019174759731070330743990956198900093346887403385,
|
||||||
|
.00009587379909597734587051721097647635118706561284,
|
||||||
|
.00004793689960306688454900399049465887274686668768
|
||||||
|
};
|
||||||
|
static REAL coswrk[20] =
|
||||||
|
{
|
||||||
|
.00000000000000000000000000000000000000000000000000,
|
||||||
|
.70710678118654752440084436210484903928483593768847,
|
||||||
|
.92387953251128675612818318939678828682241662586364,
|
||||||
|
.98078528040323044912618223613423903697393373089333,
|
||||||
|
.99518472667219688624483695310947992157547486872985,
|
||||||
|
.99879545620517239271477160475910069444320361470461,
|
||||||
|
.99969881869620422011576564966617219685006108125772,
|
||||||
|
.99992470183914454092164649119638322435060646880221,
|
||||||
|
.99998117528260114265699043772856771617391725094433,
|
||||||
|
.99999529380957617151158012570011989955298763362218,
|
||||||
|
.99999882345170190992902571017152601904826792288976,
|
||||||
|
.99999970586288221916022821773876567711626389934930,
|
||||||
|
.99999992646571785114473148070738785694820115568892,
|
||||||
|
.99999998161642929380834691540290971450507605124278,
|
||||||
|
.99999999540410731289097193313960614895889430318945,
|
||||||
|
.99999999885102682756267330779455410840053741619428
|
||||||
|
};
|
||||||
|
static REAL sinwrk[20] =
|
||||||
|
{
|
||||||
|
1.0000000000000000000000000000000000000000000000000,
|
||||||
|
.70710678118654752440084436210484903928483593768846,
|
||||||
|
.38268343236508977172845998403039886676134456248561,
|
||||||
|
.19509032201612826784828486847702224092769161775195,
|
||||||
|
.09801714032956060199419556388864184586113667316749,
|
||||||
|
.04906767432741801425495497694268265831474536302574,
|
||||||
|
.02454122852291228803173452945928292506546611923944,
|
||||||
|
.01227153828571992607940826195100321214037231959176,
|
||||||
|
.00613588464915447535964023459037258091705788631738,
|
||||||
|
.00306795676296597627014536549091984251894461021344,
|
||||||
|
.00153398018628476561230369715026407907995486457522,
|
||||||
|
.00076699031874270452693856835794857664314091945205,
|
||||||
|
.00038349518757139558907246168118138126339502603495,
|
||||||
|
.00019174759731070330743990956198900093346887403385,
|
||||||
|
.00009587379909597734587051721097647635118706561284,
|
||||||
|
.00004793689960306688454900399049465887274686668768
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define SQRT2_2 0.70710678118654752440084436210484
|
||||||
|
#define SQRT2 2*0.70710678118654752440084436210484
|
||||||
|
|
||||||
|
void mayer_fht(REAL* fz, int n)
|
||||||
|
{
|
||||||
|
/* REAL a,b;
|
||||||
|
REAL c1,s1,s2,c2,s3,c3,s4,c4;
|
||||||
|
REAL f0,g0,f1,g1,f2,g2,f3,g3; */
|
||||||
|
int k, k1, k2, k3, k4, kx;
|
||||||
|
REAL* fi, * fn, * gi;
|
||||||
|
TRIG_VARS;
|
||||||
|
|
||||||
|
for (k1 = 1, k2 = 0; k1 < n; k1++)
|
||||||
|
{
|
||||||
|
REAL aa;
|
||||||
|
for (k = n >> 1; (!((k2 ^= k) & k)); k >>= 1);
|
||||||
|
if (k1 > k2)
|
||||||
|
{
|
||||||
|
aa = fz[k1]; fz[k1] = fz[k2]; fz[k2] = aa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (k = 0; (1 << k) < n; k++);
|
||||||
|
k &= 1;
|
||||||
|
if (k == 0)
|
||||||
|
{
|
||||||
|
for (fi = fz, fn = fz + n; fi < fn; fi += 4)
|
||||||
|
{
|
||||||
|
REAL f0, f1, f2, f3;
|
||||||
|
f1 = fi[0] - fi[1];
|
||||||
|
f0 = fi[0] + fi[1];
|
||||||
|
f3 = fi[2] - fi[3];
|
||||||
|
f2 = fi[2] + fi[3];
|
||||||
|
fi[2] = (f0 - f2);
|
||||||
|
fi[0] = (f0 + f2);
|
||||||
|
fi[3] = (f1 - f3);
|
||||||
|
fi[1] = (f1 + f3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (fi = fz, fn = fz + n, gi = fi + 1; fi < fn; fi += 8, gi += 8)
|
||||||
|
{
|
||||||
|
REAL bs1, bc1, bs2, bc2, bs3, bc3, bs4, bc4,
|
||||||
|
bg0, bf0, bf1, bg1, bf2, bg2, bf3, bg3;
|
||||||
|
bc1 = fi[0] - gi[0];
|
||||||
|
bs1 = fi[0] + gi[0];
|
||||||
|
bc2 = fi[2] - gi[2];
|
||||||
|
bs2 = fi[2] + gi[2];
|
||||||
|
bc3 = fi[4] - gi[4];
|
||||||
|
bs3 = fi[4] + gi[4];
|
||||||
|
bc4 = fi[6] - gi[6];
|
||||||
|
bs4 = fi[6] + gi[6];
|
||||||
|
bf1 = (bs1 - bs2);
|
||||||
|
bf0 = (bs1 + bs2);
|
||||||
|
bg1 = (bc1 - bc2);
|
||||||
|
bg0 = (bc1 + bc2);
|
||||||
|
bf3 = (bs3 - bs4);
|
||||||
|
bf2 = (bs3 + bs4);
|
||||||
|
bg3 = SQRT2 * bc4;
|
||||||
|
bg2 = SQRT2 * bc3;
|
||||||
|
fi[4] = bf0 - bf2;
|
||||||
|
fi[0] = bf0 + bf2;
|
||||||
|
fi[6] = bf1 - bf3;
|
||||||
|
fi[2] = bf1 + bf3;
|
||||||
|
gi[4] = bg0 - bg2;
|
||||||
|
gi[0] = bg0 + bg2;
|
||||||
|
gi[6] = bg1 - bg3;
|
||||||
|
gi[2] = bg1 + bg3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n < 16) return;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
REAL s1, c1;
|
||||||
|
int ii;
|
||||||
|
k += 2;
|
||||||
|
k1 = 1 << k;
|
||||||
|
k2 = k1 << 1;
|
||||||
|
k4 = k2 << 1;
|
||||||
|
k3 = k2 + k1;
|
||||||
|
kx = k1 >> 1;
|
||||||
|
fi = fz;
|
||||||
|
gi = fi + kx;
|
||||||
|
fn = fz + n;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
REAL g0, f0, f1, g1, f2, g2, f3, g3;
|
||||||
|
f1 = fi[0] - fi[k1];
|
||||||
|
f0 = fi[0] + fi[k1];
|
||||||
|
f3 = fi[k2] - fi[k3];
|
||||||
|
f2 = fi[k2] + fi[k3];
|
||||||
|
fi[k2] = f0 - f2;
|
||||||
|
fi[0] = f0 + f2;
|
||||||
|
fi[k3] = f1 - f3;
|
||||||
|
fi[k1] = f1 + f3;
|
||||||
|
g1 = gi[0] - gi[k1];
|
||||||
|
g0 = gi[0] + gi[k1];
|
||||||
|
g3 = SQRT2 * gi[k3];
|
||||||
|
g2 = SQRT2 * gi[k2];
|
||||||
|
gi[k2] = g0 - g2;
|
||||||
|
gi[0] = g0 + g2;
|
||||||
|
gi[k3] = g1 - g3;
|
||||||
|
gi[k1] = g1 + g3;
|
||||||
|
gi += k4;
|
||||||
|
fi += k4;
|
||||||
|
} while (fi < fn);
|
||||||
|
TRIG_INIT(k, c1, s1);
|
||||||
|
for (ii = 1; ii < kx; ii++)
|
||||||
|
{
|
||||||
|
REAL c2, s2;
|
||||||
|
TRIG_NEXT(k, c1, s1);
|
||||||
|
c2 = c1 * c1 - s1 * s1;
|
||||||
|
s2 = 2 * (c1 * s1);
|
||||||
|
fn = fz + n;
|
||||||
|
fi = fz + ii;
|
||||||
|
gi = fz + k1 - ii;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
REAL a, b, g0, f0, f1, g1, f2, g2, f3, g3;
|
||||||
|
b = s2 * fi[k1] - c2 * gi[k1];
|
||||||
|
a = c2 * fi[k1] + s2 * gi[k1];
|
||||||
|
f1 = fi[0] - a;
|
||||||
|
f0 = fi[0] + a;
|
||||||
|
g1 = gi[0] - b;
|
||||||
|
g0 = gi[0] + b;
|
||||||
|
b = s2 * fi[k3] - c2 * gi[k3];
|
||||||
|
a = c2 * fi[k3] + s2 * gi[k3];
|
||||||
|
f3 = fi[k2] - a;
|
||||||
|
f2 = fi[k2] + a;
|
||||||
|
g3 = gi[k2] - b;
|
||||||
|
g2 = gi[k2] + b;
|
||||||
|
b = s1 * f2 - c1 * g3;
|
||||||
|
a = c1 * f2 + s1 * g3;
|
||||||
|
fi[k2] = f0 - a;
|
||||||
|
fi[0] = f0 + a;
|
||||||
|
gi[k3] = g1 - b;
|
||||||
|
gi[k1] = g1 + b;
|
||||||
|
b = c1 * g2 - s1 * f3;
|
||||||
|
a = s1 * g2 + c1 * f3;
|
||||||
|
gi[k2] = g0 - a;
|
||||||
|
gi[0] = g0 + a;
|
||||||
|
fi[k3] = f1 - b;
|
||||||
|
fi[k1] = f1 + b;
|
||||||
|
gi += k4;
|
||||||
|
fi += k4;
|
||||||
|
} while (fi < fn);
|
||||||
|
}
|
||||||
|
TRIG_RESET(k, c1, s1);
|
||||||
|
} while (k4 < n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayer_fft(int n, REAL* real, REAL* imag)
|
||||||
|
{
|
||||||
|
REAL a, b, c, d;
|
||||||
|
REAL q, r, s, t;
|
||||||
|
int i, j, k;
|
||||||
|
for (i = 1, j = n - 1, k = n / 2; i < k; i++, j--) {
|
||||||
|
a = real[i]; b = real[j]; q = a + b; r = a - b;
|
||||||
|
c = imag[i]; d = imag[j]; s = c + d; t = c - d;
|
||||||
|
real[i] = (q + t) * .5; real[j] = (q - t) * .5;
|
||||||
|
imag[i] = (s - r) * .5; imag[j] = (s + r) * .5;
|
||||||
|
}
|
||||||
|
mayer_fht(real, n);
|
||||||
|
mayer_fht(imag, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayer_ifft(int n, REAL* real, REAL* imag)
|
||||||
|
{
|
||||||
|
REAL a, b, c, d;
|
||||||
|
REAL q, r, s, t;
|
||||||
|
int i, j, k;
|
||||||
|
mayer_fht(real, n);
|
||||||
|
mayer_fht(imag, n);
|
||||||
|
for (i = 1, j = n - 1, k = n / 2; i < k; i++, j--) {
|
||||||
|
a = real[i]; b = real[j]; q = a + b; r = a - b;
|
||||||
|
c = imag[i]; d = imag[j]; s = c + d; t = c - d;
|
||||||
|
imag[i] = (s + r) * 0.5; imag[j] = (s - r) * 0.5;
|
||||||
|
real[i] = (q - t) * 0.5; real[j] = (q + t) * 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayer_realfft(int n, REAL* real)
|
||||||
|
{
|
||||||
|
REAL a, b;
|
||||||
|
int i, j, k;
|
||||||
|
|
||||||
|
mayer_fht(real, n);
|
||||||
|
for (i = 1, j = n - 1, k = n / 2; i < k; i++, j--) {
|
||||||
|
a = real[i];
|
||||||
|
b = real[j];
|
||||||
|
real[j] = (a - b) * 0.5;
|
||||||
|
real[i] = (a + b) * 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayer_realifft(int n, REAL* real)
|
||||||
|
{
|
||||||
|
REAL a, b;
|
||||||
|
int i, j, k;
|
||||||
|
|
||||||
|
for (i = 1, j = n - 1, k = n / 2; i < k; i++, j--) {
|
||||||
|
a = real[i];
|
||||||
|
b = real[j];
|
||||||
|
real[j] = (a - b);
|
||||||
|
real[i] = (a + b);
|
||||||
|
}
|
||||||
|
mayer_fht(real, n);
|
||||||
|
}
|
||||||
9
Source/mayer_fft.h
Normal file
9
Source/mayer_fft.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef MAYER_H
|
||||||
|
#define MAYER_H
|
||||||
|
|
||||||
|
#define REAL float
|
||||||
|
|
||||||
|
void mayer_realfft(int n, REAL* real);
|
||||||
|
void mayer_realifft(int n, REAL* real);
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user