View Issue Details

IDProjectCategoryView StatusLast Update
0007412ardourbugspublic2017-07-01 20:14
Reportermark_d Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
PlatformLinux 64bitOSXUbuntuOS Version16.04
Product Version5.10 
Summary0007412: binary rollover causes inverted clipping when using 16bit int sample format and Ardour bus as input
DescriptionThe 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
TagsNo tags attached.

Activities

mark_d

2017-06-30 15:55

reporter  

clipping.png (1,793 bytes)   
clipping.png (1,793 bytes)   

x42

2017-06-30 18:29

administrator   ~0019835

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.

jrigg

2017-06-30 21:17

reporter   ~0019838

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 ;-)

mhartzel

2017-06-30 23:15

reporter   ~0019843

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.

mark_d

2017-07-01 09:13

reporter   ~0019850

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.

jrigg

2017-07-01 18:31

reporter   ~0019854

> 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.

jrigg

2017-07-01 18:40

reporter   ~0019856

> Could the levels exceeding 0 dB just be leveled to 0 dB.

That would be appropriate for integer formats, but not floating point.

x42

2017-07-01 20:14

administrator   ~0019859

If at all, this has to happen right before the data goes to disk, ideally in libsndfile.

Issue History

Date Modified Username Field Change
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