View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0007412||ardour||bugs||public||2017-06-30 15:55||2017-07-01 20:14|
|Platform||Linux 64bit||OS||XUbuntu||OS Version||16.04|
|Summary||0007412: binary rollover causes inverted clipping when using 16bit int sample format and Ardour bus as input|
|Description||The rollover clipping happens when "16bit INT wav" is choosen as sample format AND the source of the audio track used for recording is not the recording hardware but another Ardour element - in my test (and in the recording setup) it was an audio bus. The fader of the bus allowed to amplify the signal beyond limits and the inverted clipping occurred. However, I cannot observe the problem when I use 32bit float format for the samples. So it looks as somewhere in the chain Ardour Bus - output - 16bit Audio Track input - Recording we do have a wrong format conversion.|
|Steps To Reproduce||-choose 16bit INT WAV sample format in Session Preferences|
-create Audio Track
-create Audio Bus
-connect Track inputs to Bus
-connect Bus inputs to recording interface
-push fader in bus to full throttle
-apply strong signal and record
|Tags||No tags attached.|
What do you expect? Do you prefer the signal being clamped to the available range? Is there a benefit compared to not wrapping around?
The same happens for 24bit or any integer file-format for values above 0dBFS.
||I think clamping to available range would be preferable as it sounds less unpleasant. Many audio CDs are mastered now with deliberate clipping, but I suspect usually without this wraparound effect ;-)|
||Could the levels exceeding 0 dB just be leveled to 0 dB. This would be consistent to how other DAWs work and because of this users probably expect it to work this way. The distortion caused by driving the signal above 0 dB would also be quickly heard and corrected by the user.|
||Would it be possible to just do a range conversion ? Max value 32bit = Max value 16bit. This would always keep the maximum available dynamic range. Everything going above would be clipped as usual - no inversion.|
> Max value 32bit = Max value 16bit
Nominal maximum in 32 bit float is +/- 1.0, but it can go many orders of magnitude above that without clipping (at least until it reaches the DAC). In integer format +/- 1 gives you only one bit of resolution.
> Could the levels exceeding 0 dB just be leveled to 0 dB.
That would be appropriate for integer formats, but not floating point.
||If at all, this has to happen right before the data goes to disk, ideally in libsndfile.|
|2017-06-30 15:55||mark_d||New Issue|
|2017-06-30 15:55||mark_d||File Added: clipping.png|
|2017-06-30 18:29||x42||Note Added: 0019835|
|2017-06-30 21:17||jrigg||Note Added: 0019838|
|2017-06-30 23:15||mhartzel||Note Added: 0019843|
|2017-07-01 09:13||mark_d||Note Added: 0019850|
|2017-07-01 18:31||jrigg||Note Added: 0019854|
|2017-07-01 18:40||jrigg||Note Added: 0019856|
|2017-07-01 20:14||x42||Note Added: 0019859|