kopia lustrzana https://github.com/jameshball/osci-render
Improve performance and get Windows working with new visualiser
rodzic
0939e4f786
commit
51b788a367
|
@ -18,7 +18,7 @@ var AudioSystem =
|
|||
|
||||
startSound : function()
|
||||
{
|
||||
const audioUpdated = window.__JUCE__.backend.addEventListener("audioUpdated", doScriptProcessor);
|
||||
window.__JUCE__.backend.addEventListener("audioUpdated", doScriptProcessor);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -671,67 +671,71 @@ var Render =
|
|||
var sweepPosition = -1;
|
||||
var belowTrigger = false;
|
||||
|
||||
function doScriptProcessor(buffer) {
|
||||
for (var i = 0; i < xSamples.length; i++) {
|
||||
xSamples[i] = buffer[i * 2];
|
||||
ySamples[i] = buffer[i * 2 + 1];
|
||||
}
|
||||
function doScriptProcessor(bufferBase64) {
|
||||
var req = new XMLHttpRequest;
|
||||
req.open('GET', "data:application/octet;base64," + bufferBase64);
|
||||
req.responseType = 'arraybuffer';
|
||||
req.onload = function fileLoaded(e) {
|
||||
var dataView = new DataView(e.target.response);
|
||||
|
||||
const getSettingsFn = Juce.getNativeFunction("getSettings");
|
||||
getSettingsFn().then(settings => {
|
||||
controls.exposureStops = settings.intensity;
|
||||
controls.persistence = settings.persistence;
|
||||
controls.hue = settings.hue;
|
||||
controls.disableFilter = !settings.upsampling;
|
||||
if (controls.grid !== settings.graticule) {
|
||||
controls.grid = settings.graticule;
|
||||
const image = controls.noise ? 'noise.jpg' : 'empty.jpg';
|
||||
Render.screenTexture = Render.loadTexture(image);
|
||||
}
|
||||
if (controls.noise !== settings.smudges) {
|
||||
controls.noise = settings.smudges;
|
||||
const image = controls.noise ? 'noise.jpg' : 'empty.jpg';
|
||||
Render.screenTexture = Render.loadTexture(image);
|
||||
}
|
||||
});
|
||||
for (var i = 0; i < xSamples.length; i++) {
|
||||
xSamples[i] = dataView.getFloat32(i * 4 * 2, true);
|
||||
ySamples[i] = dataView.getFloat32(i * 4 * 2 + 4, true);
|
||||
}
|
||||
|
||||
if (controls.sweepOn) {
|
||||
var gain = Math.pow(2.0,controls.mainGain);
|
||||
var sweepMinTime = controls.sweepMsDiv*10/1000;
|
||||
var triggerValue = controls.sweepTriggerValue;
|
||||
for (var i=0; i<xSamples.length; i++)
|
||||
{
|
||||
xSamples[i] = sweepPosition / gain;
|
||||
sweepPosition += 2*AudioSystem.timePerSample/sweepMinTime;
|
||||
if (sweepPosition > 1.1 && belowTrigger && ySamples[i]>=triggerValue)
|
||||
sweepPosition =-1.3;
|
||||
belowTrigger = ySamples[i]<triggerValue;
|
||||
}
|
||||
}
|
||||
const getSettingsFn = Juce.getNativeFunction("getSettings");
|
||||
getSettingsFn().then(settings => {
|
||||
controls.exposureStops = settings.intensity;
|
||||
controls.persistence = settings.persistence;
|
||||
controls.hue = settings.hue;
|
||||
controls.disableFilter = !settings.upsampling;
|
||||
if (controls.grid !== settings.graticule) {
|
||||
controls.grid = settings.graticule;
|
||||
const image = controls.noise ? 'noise.jpg' : 'empty.jpg';
|
||||
Render.screenTexture = Render.loadTexture(image);
|
||||
}
|
||||
if (controls.noise !== settings.smudges) {
|
||||
controls.noise = settings.smudges;
|
||||
const image = controls.noise ? 'noise.jpg' : 'empty.jpg';
|
||||
Render.screenTexture = Render.loadTexture(image);
|
||||
}
|
||||
});
|
||||
|
||||
if (!controls.freezeImage)
|
||||
{
|
||||
if (!controls.disableFilter)
|
||||
{
|
||||
Filter.generateSmoothedSamples(AudioSystem.oldXSamples, xSamples, AudioSystem.smoothedXSamples);
|
||||
Filter.generateSmoothedSamples(AudioSystem.oldYSamples, ySamples, AudioSystem.smoothedYSamples);
|
||||
if (controls.sweepOn) {
|
||||
var gain = Math.pow(2.0, controls.mainGain);
|
||||
var sweepMinTime = controls.sweepMsDiv * 10 / 1000;
|
||||
var triggerValue = controls.sweepTriggerValue;
|
||||
for (var i = 0; i < xSamples.length; i++) {
|
||||
xSamples[i] = sweepPosition / gain;
|
||||
sweepPosition += 2 * AudioSystem.timePerSample / sweepMinTime;
|
||||
if (sweepPosition > 1.1 && belowTrigger && ySamples[i] >= triggerValue)
|
||||
sweepPosition = -1.3;
|
||||
belowTrigger = ySamples[i] < triggerValue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!controls.swapXY) Render.drawLineTexture(AudioSystem.smoothedXSamples, AudioSystem.smoothedYSamples);
|
||||
else Render.drawLineTexture(AudioSystem.smoothedYSamples, AudioSystem.smoothedXSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!controls.swapXY) Render.drawLineTexture(xSamples, ySamples);
|
||||
else Render.drawLineTexture(ySamples, xSamples);
|
||||
}
|
||||
}
|
||||
if (!controls.freezeImage) {
|
||||
if (!controls.disableFilter) {
|
||||
Filter.generateSmoothedSamples(AudioSystem.oldXSamples, xSamples, AudioSystem.smoothedXSamples);
|
||||
Filter.generateSmoothedSamples(AudioSystem.oldYSamples, ySamples, AudioSystem.smoothedYSamples);
|
||||
|
||||
for (var i = 0; i<xSamples.length; i++) {
|
||||
AudioSystem.oldXSamples[i] = xSamples[i];
|
||||
AudioSystem.oldYSamples[i] = ySamples[i];
|
||||
}
|
||||
if (!controls.swapXY) Render.drawLineTexture(AudioSystem.smoothedXSamples, AudioSystem.smoothedYSamples);
|
||||
else Render.drawLineTexture(AudioSystem.smoothedYSamples, AudioSystem.smoothedXSamples);
|
||||
}
|
||||
else {
|
||||
if (!controls.swapXY) Render.drawLineTexture(xSamples, ySamples);
|
||||
else Render.drawLineTexture(ySamples, xSamples);
|
||||
}
|
||||
}
|
||||
|
||||
requestAnimationFrame(drawCRTFrame);
|
||||
for (var i = 0; i < xSamples.length; i++) {
|
||||
AudioSystem.oldXSamples[i] = xSamples[i];
|
||||
AudioSystem.oldYSamples[i] = ySamples[i];
|
||||
}
|
||||
|
||||
requestAnimationFrame(drawCRTFrame);
|
||||
}
|
||||
req.send();
|
||||
}
|
||||
|
||||
function drawCRTFrame(timeStamp) {
|
||||
|
|
|
@ -15,7 +15,7 @@ VisualiserComponent::VisualiserComponent(OscirenderAudioProcessor& p, Visualiser
|
|||
setMouseCursor(juce::MouseCursor::PointingHandCursor);
|
||||
setWantsKeyboardFocus(true);
|
||||
|
||||
addChildComponent(browser);
|
||||
addAndMakeVisible(browser);
|
||||
setVisualiserType(oldVisualiser);
|
||||
|
||||
roughness.textBox.setValue(audioProcessor.roughness);
|
||||
|
@ -141,11 +141,7 @@ void VisualiserComponent::run() {
|
|||
if (!oldVisualiser) {
|
||||
juce::MessageManager::callAsync([this, visualiser] () {
|
||||
if (visualiser) {
|
||||
juce::Array<juce::var> data;
|
||||
for (int i = 0; i < buffer.size(); i++) {
|
||||
data.add(buffer[i]);
|
||||
}
|
||||
browser.emitEventIfBrowserIsVisible("audioUpdated", data);
|
||||
browser.emitEventIfBrowserIsVisible("audioUpdated", juce::Base64::toBase64(buffer.data(), buffer.size() * sizeof(float)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -228,12 +224,12 @@ void VisualiserComponent::setFullScreen(bool fullScreen) {}
|
|||
void VisualiserComponent::setVisualiserType(bool oldVisualiser) {
|
||||
this->oldVisualiser = oldVisualiser;
|
||||
if (oldVisualiser) {
|
||||
browser.setVisible(false);
|
||||
// required to hide the browser - it is buggy if we use setVisible(false) on Windows
|
||||
browser.goToURL("about:blank");
|
||||
} else {
|
||||
browser.setVisible(true);
|
||||
browser.goToURL(juce::WebBrowserComponent::getResourceProviderRoot() + "oscilloscope.html");
|
||||
}
|
||||
resized();
|
||||
}
|
||||
|
||||
void VisualiserComponent::paintXY(juce::Graphics& g, juce::Rectangle<float> area) {
|
||||
|
@ -275,7 +271,11 @@ void VisualiserComponent::resetBuffer() {
|
|||
}
|
||||
|
||||
void VisualiserComponent::resized() {
|
||||
browser.setBounds(getLocalBounds());
|
||||
if (oldVisualiser) {
|
||||
browser.setBounds(0, 0, 0, 0);
|
||||
} else {
|
||||
browser.setBounds(getLocalBounds());
|
||||
}
|
||||
auto area = getLocalBounds();
|
||||
area.removeFromBottom(5);
|
||||
auto buttonRow = area.removeFromBottom(25);
|
||||
|
|
|
@ -105,6 +105,8 @@ private:
|
|||
juce::WebBrowserComponent::Options()
|
||||
.withNativeIntegrationEnabled()
|
||||
.withResourceProvider(provider)
|
||||
.withBackend(juce::WebBrowserComponent::Options::Backend::webview2)
|
||||
.withWinWebView2Options(juce::WebBrowserComponent::Options::WinWebView2{})
|
||||
.withNativeFunction("toggleFullscreen", [this](auto& var, auto complete) {
|
||||
enableFullScreen();
|
||||
})
|
||||
|
|
|
@ -631,7 +631,8 @@
|
|||
</GROUP>
|
||||
</MAINGROUP>
|
||||
<JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_VST3_CAN_REPLACE_VST2="0"
|
||||
JUCE_WIN_PER_MONITOR_DPI_AWARE="0"/>
|
||||
JUCE_WIN_PER_MONITOR_DPI_AWARE="0" JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING="1"
|
||||
JUCE_USE_WIN_WEBVIEW2="1"/>
|
||||
<EXPORTFORMATS>
|
||||
<LINUX_MAKE targetFolder="Builds/LinuxMakefile" smallIcon="pSc1mq" bigIcon="pSc1mq">
|
||||
<CONFIGURATIONS>
|
||||
|
|
Ładowanie…
Reference in New Issue