@@ -478,7 +478,7 @@ def __exit__(self, *args):
478
478
# User visible methods.
479
479
#
480
480
def setnchannels (self ,nchannels ):
481
- if self ._datawritten :
481
+ if self ._datawritten and self . _nchannels != nchannels :
482
482
raise Error ('cannot change parameters after starting to write' )
483
483
if nchannels < 1 :
484
484
raise Error ('bad # of channels' )
@@ -490,7 +490,7 @@ def getnchannels(self):
490
490
return self ._nchannels
491
491
492
492
def setsampwidth (self ,sampwidth ):
493
- if self ._datawritten :
493
+ if self ._datawritten and self . _sampwidth != sampwidth :
494
494
raise Error ('cannot change parameters after starting to write' )
495
495
if sampwidth < 1 or sampwidth > 4 :
496
496
raise Error ('bad sample width' )
@@ -502,19 +502,20 @@ def getsampwidth(self):
502
502
return self ._sampwidth
503
503
504
504
def setframerate (self ,framerate ):
505
- if self ._datawritten :
505
+ rounded_framerate = int (round (framerate ))
506
+ if self ._datawritten and self ._framerate != rounded_framerate :
506
507
raise Error ('cannot change parameters after starting to write' )
507
- if framerate <= 0 :
508
+ if rounded_framerate <= 0 :
508
509
raise Error ('bad frame rate' )
509
- self ._framerate = int ( round ( framerate ))
510
+ self ._framerate = rounded_framerate
510
511
511
512
def getframerate (self ):
512
513
if not self ._framerate :
513
514
raise Error ('frame rate not set' )
514
515
return self ._framerate
515
516
516
517
def setnframes (self ,nframes ):
517
- if self ._datawritten :
518
+ if self ._datawritten and self . _nframes != nframes :
518
519
raise Error ('cannot change parameters after starting to write' )
519
520
self ._nframes = nframes
520
521
@@ -537,8 +538,8 @@ def getcompname(self):
537
538
538
539
def setparams (self ,params ):
539
540
nchannels ,sampwidth ,framerate ,nframes ,comptype ,compname = params
540
- if self . _datawritten :
541
- raise Error ( 'cannot change parameters after starting to write' )
541
+ # no check for value change required: either the properties have the same
542
+ # value or they throw the exception them selfs
542
543
self .setnchannels (nchannels )
543
544
self .setsampwidth (sampwidth )
544
545
self .setframerate (framerate )