REW Beta Release REW API beta releases

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
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?
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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?
 

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
0.366299 for export vs 0.3662109375 for fetch


1728639540510.png



Swagger:

"unit": "SPL",
"smoothing": "1/48",
"startFreq": 0.3662109375,
"ppo": 96,
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
Thanks John, Can I safely assume 1537th fetched freq. magnitude value represents 24000Hz in the above example?
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
It will correspond to the associated index per the log spacing the same as the other frequencies.
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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:

Breeman

Member
Joined
Jan 9, 2019
Posts
184
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
 

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
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

  • FLo.mdat
    643 KB · Views: 5
  • REWdiagnostic_1728656449958.zip
    113.7 KB · Views: 2
Last edited:

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 

JoinUs

New Member
Joined
Jan 6, 2023
Posts
85
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:

bcodemz

New Member
Joined
Jul 19, 2017
Posts
20
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:

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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
 

bcodemz

New Member
Joined
Jul 19, 2017
Posts
20
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: 12

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
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
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 

serko70

Member
Joined
Oct 13, 2017
Posts
286
Location
Germany
More  
Preamp, Processor or Receiver
Marantz SR6015
Main Amp
Rotel Michi X3
DAC
Oppo 205
Computer Audio
Intel NUC
Universal / Blu-ray / CD Player
Oppo 205
Streaming Subscriptions
TIDAL, ROON
Front Speakers
Focal Kanta 2
Center Channel Speaker
Linn Trikan
Surround Speakers
Focal Dome Flax
Surround Back Speakers
Focal Dome Flax
Front Height Speakers
Focal Dome Flax
Rear Height Speakers
Focal Dome Flax
Subwoofers
Focal Sub Air
Video Display Device
LG 65 3D OLED
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
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
7,992
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.
 
Top Bottom