REW Beta Release REW API beta releases

I haven't encountered that and can't reproduce it. I can try adding something in the next build, but without a way to see the same behaviour it will be just guesswork.

Note that if you want to rename a measurement for the individual graph selectors (i.e. the ones you see for SPL & Phase etc) right click on the name.

I'll see if I video capture it at some point.
 
i got error message when press Overlay.

Code:
REW V5.40 Beta 73 running Azul Systems, Inc. JRE 1.8.0_442 64-bit on Windows 10 Locale: language ko, keyboard KR, x-windows-949 on 2048x1152 at 96 DPI Running in C:\Program Files\REWbeta
 

Message:
    java.lang.ArrayIndexOutOfBoundsException: 375
Stack Trace:
375
    roomeqwizard.MeasData.smoothPhase(y:8522)
    roomeqwizard.MeasData.smoothImmediate(y:8617)
    roomeqwizard.MeasData.filterMeasurement(y:112)
    roomeqwizard.MeasData.applyFiltersImmediate(y:288)
    roomeqwizard.tB.p(y:2414)
    roomeqwizard.YE.Ǧ(y:2799)
    roomeqwizard.tB.Ǧ(y:1701)
    roomeqwizard.tB.<init>(y:838)
    roomeqwizard.eG.T(y:1513)
    roomeqwizard.B.<init>(y:680)
    roomeqwizard.B.F(y:3214)
    roomeqwizard.$K.actionPerformed(y:2752)
    javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:262)
    java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    java.awt.Component.processMouseEvent(Component.java:6539)
    javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    java.awt.Component.processEvent(Component.java:6304)
    java.awt.Container.processEvent(Container.java:2239)
    java.awt.Component.dispatchEventImpl(Component.java:4889)
    java.awt.Container.dispatchEventImpl(Container.java:2297)
    java.awt.Component.dispatchEvent(Component.java:4711)
    java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    java.awt.Container.dispatchEventImpl(Container.java:2283)
    java.awt.Window.dispatchEventImpl(Window.java:2746)
    java.awt.Component.dispatchEvent(Component.java:4711)
    java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    java.awt.EventQueue.access$500(EventQueue.java:97)
    java.awt.EventQueue$3.run(EventQueue.java:709)
    java.awt.EventQueue$3.run(EventQueue.java:703)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    java.awt.EventQueue$4.run(EventQueue.java:733)
    java.awt.EventQueue$4.run(EventQueue.java:731)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 
Builds updated today (beta 74) with these changes:
  • Added: The EQ window filter adjust graph has an action to copy filters from another measurement
  • Added: The RTA peak finder includes a musical note column
  • Fixed: Impedance measurement level check sent the test signal to the ref output instead of the measurement output
  • Fixed: Room simulator could exhibit odd behaviour after setting a reference trace
  • Fixed: Loading an mdat file via the API when not using a GUI caused a null pointer exception
  • Fixed: Inverting the IR when an octave band filter was applied did not retain the inversion when the filter was removed
 
Added: The EQ window filter adjust graph has an action to copy filters from another measurement
Thanks.

1743120396411.png

1743120402721.png

1743120438961.png


Thank you for the feature. I would like to report a bug regarding the Copy EQ Window Filter.
Of course, it appears to be applied in both Predicted and Filters, and even when I export it by clicking "Generate Measurement from Predicted," the graph still reflects the applied changes.

1743120625042.png

However, the EQ filter window does not display the EQ values. (Although the thumbnail of the very first peaking filter has changed.)
To resolve this, I need to activate any other measurement first and then switch back to the original measurement's EQ tab to see the applied changes.

1743120737972.png


And I record screen. You can check

 
My mistake, I think the WAV file is actually the wrong format, but the FLAC file still triggers an error log.
 
The WAV file has an incorrect riff chunk ID (875972178). The FLAC file imports fine for me, what error are you getting? You can generate a diagnostic file from the REW help menu to capture all error info and attach that.
 
When I drag and drop the FLAC file as the stimulus file, I get this error.

REW V5.40 Beta 75 running Azul Systems, Inc. JRE 1.8.0_442 64-bit on Windows 10 Locale: language en, keyboard US, windows-1252 on 1600x1200 at 96 DPI Running in C:\Program Files\REW


Message:
java.lang.IllegalArgumentException: Byte array length should be 393216 not 8192
Stack Trace:
Byte array length should be 393216 not 8192
roomeqwizard.vL$_A.read(y:984)
javax.sound.sampled.AudioInputStream.read(AudioInputStream.java:292)
javax.sound.sampled.AudioInputStream.read(AudioInputStream.java:232)
roomeqwizard.RF.A(y:4653)
roomeqwizard.LH$_A.A(y:1703)
roomeqwizard.LH$_A.A(y:3192)
roomeqwizard.LH$_A$2.A(y:2796)
roomeqwizard.vF$1.drop(y:1188)
java.awt.dnd.DropTarget.drop(DropTarget.java:455)
sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:538)
sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:852)
sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:776)
sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
java.awt.Component.dispatchEventImpl(Component.java:4744)
java.awt.Container.dispatchEventImpl(Container.java:2297)
java.awt.Component.dispatchEvent(Component.java:4711)
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4609)
java.awt.LightweightDispatcher.dispatchEvent(Container.java:4471)
java.awt.Container.dispatchEventImpl(Container.java:2283)
java.awt.Window.dispatchEventImpl(Window.java:2746)
java.awt.Component.dispatchEvent(Component.java:4711)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
java.awt.EventQueue.access$500(EventQueue.java:97)
java.awt.EventQueue$3.run(EventQueue.java:709)
java.awt.EventQueue$3.run(EventQueue.java:703)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
java.awt.EventQueue$4.run(EventQueue.java:733)
java.awt.EventQueue$4.run(EventQueue.java:731)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 

Attachments

When I drag and drop the FLAC file as the stimulus file, I get this error.
I have fixed FLAC support for sweep recordings for the next build, but to preserve the sweep config data the stimulus FLAC file should be generated from a 24-bit PCM WAV sweep file.
 
Is there any way to control the RTA graph appearance and/or graph image save dialog via the API? I've gotten to the point of being able to save the graph by posting the below to /rta/command, but when trying to figure it out myself parameters doesn't appear to support named parameters as an object and just expects an array where only the filename seems to do anything, and the graph appearance options don't seem to be present on any of the other rta configuration endpoints. The use case here is that I'm trying to script a series of rta measurements and I'd like to be able to change the axis of the graph depending on what I'm trying to measure. I'd also like to be able to set the "image width" parameter, but that's more of a nice to have. I couldn't find anything hinting at this on the api documentation page or with search, so sorry if this is a repeat question.


JSON:
{
    "command": "Save graph image",
    "parameters": [
        "C:/code/rew/test-out/graph.png"
    ]
}
 
The Swagger UI web page at localhost:4735 is the easiest way to browse or search endpoints. /rta/image-capture-settings controls the image capture dialog. There are no endpoints to change the graph axes, however.

1743713912519.png
 
Builds updated today (beta 76) with these changes:
  • Added: /rta/y-axis API endpoint to get and set the graph Y axis
  • Added: /rta/graph-limits API endpoint to get and set the graph left, right, top and bottom limits
  • Added: /rta/cursor-x API endpoint to get and set the graph cursor X position
  • Fixed: Serial number detection was not working for EARS cal files
  • Fixed: Sweep stimulus import will accept FLAC files, but they should be generated from 24-bit WAV files to preserve the sweep config data
 
Builds updated today (beta 59) with these changes:

  • Changed: StormAudio equaliser limits and filter types updated
Glad to see more filter variants than just Bell have been added for StormAudio. Meanwhile with the latest betas (I did not try beta 59) exported shelf filters can't be imported into StormAudio PEQ because the .txt is missing the Q values. I first need to edit the .txt and add Q + value manually to it. But it's unclear which Q value REW has calculated.
 
Meanwhile with the latest betas (I did not try beta 59) exported shelf filters can't be imported into StormAudio PEQ because the .txt is missing the Q values.
Meaning the StormAudio shelf filters have adjustable Q? They didn't mention that (or I missed it), but I can change it in the next build.
 
Meaning the StormAudio shelf filters have adjustable Q? They didn't mention that (or I missed it), but I can change it in the next build.
shelfQ.jpg
yes they do. to be precise there needs to be a value otherwise the filter can't be imported. same Q values are available as for bell filters. thx for looking into it :hail:
 
Last edited:
Hi there and sorry for asking. But is there any chance you missed something in the release notes after "V5.40 beta 72 2nd March 2025"? (so v73 and up) I'm asking this due to some issues I'm having with my script yet I can't find anything related to the issue in any of the release notes.
 
To give some more context:
Set a new default curve (house curve)
and Find the default 75dB flatcurve in REW (just a flat line curve @75dB)
Make a new response copy
JavaScript:
if (name.endsWith(" @ ")) {
                        await postSafe(`http://localhost:4735/eq/house-curve`, targetCurvePathSPK, "House curve set");
                        await new Promise((resolve) => setTimeout(resolve, speedDelay));
                        await postSafe(`http://localhost:4735/measurements/${q}/command`, { command: "Response copy" }, "Completed");
                        await new Promise((resolve) => setTimeout(resolve, speedDelay));
 }
Generate target measurement from the copy by searching REW for the measurement title that ends with -copy
JavaScript:
        measurements = await fetch_mREW();
        mCount = Object.keys(measurements).length;
        for (let q = 1; q <= mCount; q++) {
          const name = measurements[q].title;
          if (name.endsWith("-copy")) {
            await postNext("Generate target measurement", q);
            await new Promise((resolve) => setTimeout(resolve, speedDelay * 2));
          }
        }
Delete the -copy
JavaScript:
        for (let q = 1; q <= mCount; q++) {
          const name = measurements[q].title;
          if (name.endsWith("-copy")) {
            await postDelete(q);
            await new Promise((resolve) => setTimeout(resolve, speedDelay * 2));
          }
        }
Find the new target measurement and rename it
JavaScript:
        measurements = await fetch_mREW();
        for (let q = 1; q <= mCount; q++) {
          const name = measurements[q].title;
          const newname = "DEF SPKs Curve @" + Number(nvexx_ReferenceLevel_SPK).toFixed(1) + "dB";
          if (name.startsWith("Target")) {
            const requestOptions = {
              method: "PUT",
              headers: { "Content-Type": "application/json" },
              body: JSON.stringify({ title: newname }),
            };
            fetch(`http://localhost:4735/measurements/${q}`, requestOptions);
          }
Never had problems with this since my implementation and this allowed me to have "multiple" curves show inside REW. How ever since Beta 73 and up All the curves are off by around 3dB all of the sudden,

Beta 72
1744186820199.png


Beta 76
1744188005478.png

As you can see from 73 onward the curves are off all of the sudden by about 3dB ?
 
Can't run the API on the latest linux arm 64 build. Is it supposed to be in the Linux build ?

I'm using :
System:
Kernel: 6.8.0-57-generic arch: x86_64 bits: 64 compiler: gcc v: 13.3.0 clocksource: tsc
Desktop: Cinnamon v: 6.2.9 tk: GTK v: 3.24.41 wm: Muffin v: 6.2.0 vt: 7 dm: LightDM v: 1.30.0
Distro: Linux Mint 22 Wilma base: Ubuntu 24.04 noble



1744202058896.png
1744202073018.png
 
is there any chance you missed something in the release notes after "V5.40 beta 72 2nd March 2025"? (so v73 and up) I'm asking this due to some issues I'm having with my script yet I can't find anything related to the issue in any of the release notes.
I don't see anything relevant in the commit history. The copy action was extended to allow multiple copies to be made at once, but I don't see why that should have affected your script. You could check the Info panel for the copies to see if they have different SPL offsets to their source measurements, and check nothing else has changed in the Target settings.
 
Can't run the API on the latest linux arm 64 build. Is it supposed to be in the Linux build ?
Yes, the Linux builds support the API. You can check the rew_output.txt and roomeq_wizardx.log.txt files for any errors logged (their location is shown in the About REW dialog), or use the Help menu option to generate a diagnostic file and attach that.
 
Back
Top