A MUSHRA inspired test, a methodology which is supposed to address some of the issues with ABX testing.
Sound A is considered the reference and Sound B should be set so that the quality difference is clearly but just audible.
Several sounds are created varying between A and b, as well as an "anchor" sound that is reduce quality.
Rank each sound according to the perceived quality.
The graph is for feedback that a sound is playing but noise is deliberately added to obscure the waveforms, so they won't match.
This is only a proof of concept and isn't meant for serious scientific research.
https://en.wikipedia.org/wiki/MUSHRA
https://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-BS.1534-3-201510-I!!PDF-E.pdf
Criterion: Closest to A (best quality)
Test
A MUSHRA inspired test, a methodology which is supposed to address some of the issues with ABX testing.
The heat map show's where your scores were, the black dots show the mean score.
The thin blue line is the line of best fit. The wide band shows the expected line.
More analysis metrics are being considered....
https://en.wikipedia.org/wiki/MUSHRA
https://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-BS.1534-3-201510-I!!PDF-E.pdf
Sound |
---|
P-Value |
Meaning |
*Probability that "The sound is indistinguishable from reference A" (Null Hypothesis)
Turn on Stereo to investigate how differences between the sounds reaching each ear are perceived.
Normalise, either looking at A and B 'together' and scaling by the same amount, keeping relative levels the same or 'individually' so they are at the same volume. If you are testing phase changes, then together will keep all harmonics at the same level. But if you are testing distortion, then levels may need to be the same.
You can also load and save set ups (patches) to share or repeat later. There are a few example patches to fetch and try out.
Normalise:
Selection of sampled waveforms which can be used instead of or mixed in with the additive waveform.
The waveform is mixed in after the additive process synthesis stage. So all stages below this, including distortion and digital processing affect the sample, too.
Waveforms were created in Cubase using included samples together with various plugin instruments and effects.
There are also a range of tones which can be added to investigate intermodulation and other effects.
Controls to add audio range sine-wave tones which can be added to investigate intermodulation distortion.
The frequency can be unrelated to the main tone or a ratio defined by the different scales.
The envelope is the same as used for the additive synthesis, even if a sampled waveform is used.
A range of non-linear processes which can be applied to the sound, controls for the quality of oversampling.
The preview is of a single cycle of the distorted waveform and the FFT of this cycle.
You can also add inharmonic tones above to investigate intermodulation distortion etc.
Common saturation functions.
Actual level of each controlled by main Distortion level.
An experimental and very basic model to provide frequency dependent distortion.
Uses a Duffing Oscillator model for non-linear speaker forces.
Controls for oversampling. Only applied when the Distortion Level is on and only affects the distortion processing.
Oversampling is only carried out once, not individually for each non-linearity as it is applied so aliasing is still possible.
No oversampling
Simulation of Jitter and bit depth reduction with dithering.
See individual sections for more details.
Graphs are as follows:
Simulation of jitter in ADC and/or DAC. Uses 3x oversampling and Lagrange interpolation to get the sample points.
Difference between ADC and DAC is how the Lagrange interpolation is done:
ADC keeps the time values fixed and 'jitters' where the sample is taken.
DAC 'jitters' the time of the samples, but resamples at fixed time points.
Is there a difference?
The jitter is normally distributed white noise.
Jitter is off
Dither simulation using some common dither types.
Also includes a bit depth reduction simulation to make quantisation distortion more noticeable.
Applied after normalisation of the waveforms.
Clipping and asymmetry of +ve and -ve max values for integers is NOT modelled (code for this is commented out) as the intention is to model the quantisation process and explore dither algorithms, not explore quirks of binary numbers.
Applied at very end of chain, after normalisation and quantisation processing.
Two implementations of a narrow bandpass designed to reveal the sound of pre-ringing from subtle to overt.
One uses a standard (RBJ) Infinite Impulse Response (IIR) peaking filter, which is minimum phase.
The other uses combined windowed sinc functions to create a similar linear phase Finite Impulse Response (FIR) filter.
It's a bit crude, particularly the FIR implementation, but sufficient to clearly distinguish pre-ringing.
Static FFT, updated automatically when waveforms are updated or when update is tapped.
Tap the pin icon to keep this section in view.
It doesn't show sampled waveforms. This is because it is specifically setup to show sharp details for analysis of distortion and other effects.
To achieve this, it uses the same sound settings as above but tuned to give a whole number of cycles within the 64k sample frame, hence the spectrum is very sharp for harmonics.
Note: Inharmonic tones are added using a windowing function to keep the spectrum as clean as possible.
This page was created to help investigate audibility of low frequency phase shifts.
It generates two sounds with identical harmonic content and envelopes as set by the common controls.
By default, each sound has the phase of the first harmonic shifted by the specified amount relative to the other harmonics. Higher harmonic can also be phase shifted by a specified fraction of the root phase shift.
The CheckBoxes next to each slider allow those parameters to be selected for testing. They will appear in the Sound A and Sound B boxes allowing them to be independently set for each sound.
An envelope with linear attack and exponential decay is applied to each harmonic. The envelope is band limited by an adjustable low-pass filter.
By default, the envelopes of the first (and other if specified) harmonics are delayed by the same amount as the phase delay for that harmonic but this delay can be removed.
The waves are normalised together so their relative size are unchanged. This is to keep to optimum loudness levels for tests, avoiding clipping or the sounds being too quiet.
Negative phase shifts are there to allow trying to compensate for existing phase shifts in playback systems.
The code is plain javascript, using the browsers own Web Audio API for playback, to allow for easy modification and review of methodology etc.
The waves are generated using additive synthesis to allow for easy and predictable setting of phases and levels.
The filter is a simulated Butterworth response but with no phase shift. It is intended just for altering harmonic content to try out different sounds The filter envelope is linear but moves the frequency as if it were an exponential control.
This null test is a sanity check for the generated waveforms.
Play back and image of the null test result is of the normalised version. However, the displayed Peak level is measured before normalising (unless individual normalising is selected, in which case they are both brought to the level of the loudest for the null test).
The null test should only contain the first harmonic (and second if it is shifted, too) plus a little distortion for short attacks and/or low smoothing due to offset attack starts.
Changes to harmonics controls should not affect the sound of the null test result (with no second harmonic shift).
With a significant hold time and no second harmonic shift, an offset of pi should and does give 6db and with pi/2 should and does give 3db. With 2Pi, the hold section should and does null, but the offset envelopes will cause a difference to appear during attack and decay.