77
88from ..conf .logconf import configure_logging
99from ..lib .integration import DownSamplingLSBIntegration , Integrator
10- from ..lib .wavelib import WaveRead , WaveWrite , BITS_WIDTHS , WIDTH_BITS
10+ from ..lib .wavelib import WaveRead , WaveWrite , BITS_WIDTHS , WIDTH_BITS , WIDTH_MIN_MAX
1111
1212
1313def create_argument_parser (parser = None ):
@@ -28,6 +28,10 @@ def create_argument_parser(parser=None):
2828 parser .add_argument (
2929 "-o" , "--output" , required = True
3030 )
31+ parser .add_argument (
32+ "-c" , "--clip" , action = "store_true" ,
33+ help = "Clip during integration, not only during output"
34+ )
3135 return parser
3236
3337
@@ -43,26 +47,31 @@ def main():
4347 infile = WaveRead (options .input )
4448
4549 input_bits = WIDTH_BITS [infile .sampwidth ]
46- logger .debug ('Input sample width = %s bits' , input_bits )
47- logger .debug ('Output sample width = %s bits' , options .bits )
50+ logger .info ('Input sample width = %s bits' , input_bits )
51+ logger .info ('Output sample width = %s bits' , options .bits )
4852 input_offset = 0
4953 if input_bits == 8 :
5054 input_offset = 128
51- logger .debug ('Input offset = %s' , input_offset )
55+ logger .info ('Input offset = %s' , input_offset )
5256
5357 outfile = WaveWrite (options .output , infile .params )
5458 outfile .setsampwidth (BITS_WIDTHS [options .bits ])
5559
5660 output_offset = 0
5761 if options .bits == 8 :
5862 output_offset = 128
59- logger .debug ('Output offset = %s' , output_offset )
60- divider = math .pow (2 , input_bits ) / math .pow (2 , options .bits )
61- logger .debug ('Divider = %s' , divider )
63+ logger .info ('Output offset = %s' , output_offset )
64+ divider = (math .pow (2 , input_bits )/ 2 - 1 ) / (math .pow (2 , options .bits )/ 2 - 1 )
65+ if options .clip :
66+ min_value , max_value = WIDTH_MIN_MAX [outfile .sampwidth ]
67+ logger .info ('Clipping values = %s, %s' , min_value , max_value )
68+ else :
69+ min_value = max_value = None
70+ logger .info ('Divider = %s' , divider )
6271 try :
6372
6473 downsample_chans = [
65- DownSamplingLSBIntegration (Integrator ())
74+ DownSamplingLSBIntegration (Integrator (), min_value = min_value , max_value = max_value )
6675 for _ in six .moves .xrange (infile .nchannels )
6776 ]
6877
@@ -71,7 +80,7 @@ def main():
7180 for frame_nb in six .moves .xrange (total_frames ): # noqa pylint: disable=W0612
7281 inputs = infile .read_unpacked_frames (1 )
7382 outputs = tuple (
74- integrator .transfert (
83+ integrator .transfer (
7584 (inp - input_offset ) / divider
7685 ) + output_offset
7786 for integrator , inp in zip (downsample_chans , inputs )
0 commit comments