REW Beta Release REW API beta releases

Dear John,

Fetched Base64 frequency response (/frequency-response?smoothing=1%2F48&ppo=96) returns 1537 data values (6148 bytes) with 96 ppo and 1/48 smoothing (defaults to that when you use ppo) vs "Export as txt" with same settings returns 1536 values for a REW generated filter response. The startFreq is slightly different but not that different, 1536 frequencies still end just below 24kHz (23,827.34Hz vs 23,833.09Hz). Is this a floating point precision problem on my end? If not, what frequency the extra 1 data point is representing? 24,000 or 0?
 
Dear John,

Fetched Base64 frequency response (/frequency-response?smoothing=1%2F48&ppo=96) returns 1537 data values (6148 bytes) with 96 ppo and 1/48 smoothing (defaults to that when you use ppo) vs "Export as txt" with same settings returns 1536 values for a REW generated filter response. The startFreq is slightly different but not that different, 1536 frequencies still end just below 24kHz (23,827.34Hz vs 23,833.09Hz). Is this a floating point precision problem on my end? If not, what frequency the extra 1 data point is representing? 24,000 or 0?
What are the different start frequency values?
 
0.366299 for export vs 0.3662109375 for fetch


1728639540510.png



Swagger:

"unit": "SPL",
"smoothing": "1/48",
"startFreq": 0.3662109375,
"ppo": 96,
 
Export measurement as text uses frequencies from the R160 preferred log spacing set, the API call returns values for frequencies at the exact log spacing chosen beginning at the measurement's internal start frequency.
 
Thanks John, Can I safely assume 1537th fetched freq. magnitude value represents 24000Hz in the above example?
 
It will correspond to the associated index per the log spacing the same as the other frequencies.
 
Here is one.
Thanks. Somehow the window settings have ended up with the wrong sample interval. Can you attach the measurement you used to generate the min phase response and the settings you used for that? (Edit: looks like that would be a .frd file).
 
Last edited:
Hi John,

Currently when I want to change the SPL level of multiple measurements, I have to choose one measurement at a time and change its SPL level via the SPL offset option. Can you please consider an option to SPL offset, multiple measurement at once? Thanks
 
John, this guy defaulted to Var smoothing when some operation was done on it (not any smoothing operation) and refuses "no smoothing" afterwards, will not go beyond 1/48!


Edit: Problem was fixed when I restarted REW.
 

Attachments

Last edited:
Hi John,

Currently when I want to change the SPL level of multiple measurements, I have to choose one measurement at a time and change its SPL level via the SPL offset option. Can you please consider an option to SPL offset, multiple measurement at once? Thanks
I have added actions for that to the All SPL and Overlay SPL graphs in the next build.
 
REW 5.30.9 ~ 5.31.3
A+B or Align Error



REW V5.31.3 running Azul Systems, Inc. JRE 1.8.0_422 64-bit on Windows 10 Locale: language ko, keyboard KR, x-windows-949 at 96 DPI Running in C:\Program Files\REW


Message:
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: n must be >= 1 in powerOf2
Stack Trace:
java.lang.IllegalArgumentException: n must be >= 1 in powerOf2
java.util.concurrent.FutureTask.report(FutureTask.java:122)
java.util.concurrent.FutureTask.get(FutureTask.java:192)
javax.swing.SwingWorker.get(SwingWorker.java:602)
roomeqwizard.HH.done(y:1561)
javax.swing.SwingWorker$5.run(SwingWorker.java:737)
javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
javax.swing.Timer.fireActionPerformed(Timer.java:313)
javax.swing.Timer$DoPostEvent.run(Timer.java:245)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
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.awt.EventQueue.dispatchEvent(EventQueue.java:728)
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)
Caused by:
java.lang.IllegalArgumentException: n must be >= 1 in powerOf2
n must be >= 1 in powerOf2
roomeqwizard.lH.B(y:1384)
roomeqwizard.SweepAnalyser.C(y:32)
roomeqwizard.MeasData.applyWindows(y:10250)
roomeqwizard.MeasData.applyWindows(y:9423)
roomeqwizard.HH.B(y:2994)
roomeqwizard.HH.doInBackground(y:3511)
javax.swing.SwingWorker$1.call(SwingWorker.java:295)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
javax.swing.SwingWorker.run(SwingWorker.java:334)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:750)
 
Last edited by a moderator:
I tried to do a simple measurement on REW's latest version and I got a NPE.


REW V5.40 Beta 56 running Azul Systems, Inc. JRE 1.8.0_422 64-bit on Windows 10 Locale: language zh, keyboard US, GBK on 3840x2160 at 288 DPI Running in C:\Program Files\REW


Message:
java.lang.reflect.InvocationTargetException
Stack Trace:
java.awt.EventQueue.invokeAndWait(EventQueue.java:1349)
java.awt.EventQueue.invokeAndWait(EventQueue.java:1324)
roomeqwizard.lL.A(y:1094)
roomeqwizard.lL.A(y:3501)
roomeqwizard.lL.A(y:734)
roomeqwizard.lL.run(y:1035)
Caused by:
java.lang.IllegalAccessError: tried to access field ca.odell.glazedlists.swing.EventTreeModel.treeList from class roomeqwizard.yB
tried to access field ca.odell.glazedlists.swing.EventTreeModel.treeList from class roomeqwizard.yB
roomeqwizard.yB.getChild(y:1397)
roomeqwizard.DI.È(y:2919)
roomeqwizard.DI$_A.treeStructureChanged(y:1590)
roomeqwizard.yB.listChanged(y:2239)
ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:434)
ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:430)
ca.odell.glazedlists.event.SequenceDependenciesEventPublisher$SubjectAndListener.firePendingEvent(SequenceDependenciesEventPublisher.java:469)
ca.odell.glazedlists.event.SequenceDependenciesEventPublisher.fireEvent(SequenceDependenciesEventPublisher.java:365)
ca.odell.glazedlists.event.ListEventAssembler.commitEvent(ListEventAssembler.java:326)
ca.odell.glazedlists.BasicEventList.add(BasicEventList.java:143)
roomeqwizard.fJ.E(y:1841)
roomeqwizard.fJ.B(y:3435)
roomeqwizard.lL.D(y:2048)
roomeqwizard.lL.A(y:2448)
roomeqwizard.lL$6.run(y:3247)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
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.awt.EventQueue.dispatchEvent(EventQueue.java:728)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
java.security.AccessController.doPrivileged(Native Method)
java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
java.awt.Dialog.show(Dialog.java:1084)
java.awt.Component.show(Component.java:1671)
java.awt.Component.setVisible(Component.java:1623)
java.awt.Window.setVisible(Window.java:1014)
java.awt.Dialog.setVisible(Dialog.java:1005)
roomeqwizard.aF.setVisible(y:1628)
roomeqwizard.uA.setVisible(y:6326)
roomeqwizard.ND.A(y:2378)
roomeqwizard.OF$25.actionPerformed(y:1867)
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)
 
Last edited by a moderator:
I tried to do a simple measurement on REW's latest version and I got a NPE.
Looking at the stack trace that's a very strange error to encounter. How was the Measure dialog configured? Probably easiest to attach a screenshot.
 
Builds updated today (beta 57) with these changes:
  • Added: The jitter test signal can be chosen as 16-bit or 24-bit
  • Added: Amplitude correction for the RTA ENOB figure can be turned off in the distortion settings
  • Added: The full scale input voltage, full scale output voltage and ref resistance for a measurement can be edited on the Info dialog
  • Added: The folder for FSAF residual WAV files can be set from the Analysis preferences as well as from the Distortion graph controls
  • Added: The ALL SPL and SPL overlay graphs have actions to add an SPL offset to all selected measurements
  • Added: An API /application/logging endpoint allows logging of API messages to rew_output.txt to be turned on or off
  • Fixed: Producing a minimum phase response from an imported data file could generate an index out of bounds exception
  • Fixed: ENOB calculation gave results 0.5 bits higher than they should be
  • Fixed: Trace arithmetic on responses whose IR start times were greater than zero and whose windowed IRs had little or no overlap in time would produce an error
  • Fixed: When the equaliser for the currently selected measurement was changed via the API the selectors on the EQ window did not update
  • Fixed: A series of errors could occur when trying to send data to an API subscriber endpoint which did not exist
  • Fixed: When posting to /measurements/{id}/ir-windows setting addFDW to false was not handled correctly
 
Looking at the stack trace that's a very strange error to encounter. How was the Measure dialog configured? Probably easiest to attach a screenshot.
This is what the measure dialog looks like. However, when I just tried in the latest beta 57, the NPE isn't there.
 

Attachments

  • 无标题.png
    无标题.png
    367.5 KB · Views: 20
This is what the measure dialog looks like. However, when I just tried in the latest beta 57, the NPE isn't there.
It was an IllegalAccessError rather than an NPE, though I don't know how it could have been triggered. Nonetheless I did make a change in beta 57 to try and mitigate a possible cause, perhaps that has been successful.
 
Dear John,


The new STI (speech transmission index) calculation seems very interesting. REW manual on the feature is quite limited. Is there a good resource you can refer us to explaining the concept?

Thanks
 
Wikipedia has info on STI. The IEC 60268-16 standard has comprehensive information on measuring STI, but it is not free - the cheapest I have seen it is from here. STI is a widely used metric for professional acoustic evaluation of how well speech can be understood in a venue, but I wouldn't say it has any particular relevance in domestic environments.
 
Dear John,

Given the importance of excess group delay in time alignment of subs/speakers, do you think it's a good idea to add EGD to Overlays?

Cheers
S
 
That's a little tricky, since to have the excess group delay each measurement needs to have the minimum phase response generated first and individual measurements may need different settings (e.g. tails) for the most accurate minimum phase response. That would mean an excess GD trace would only be shown for measurements that had already had their minimum phase response generated. It could perhaps be offered on that basis though.
 
Back
Top