@@ -541,13 +541,14 @@ def shift_times(self, shift: int | float, segment_index: int | None = None) -> N
541541 else :
542542 segments_to_shift = (segment_index ,)
543543
544- for idx in segments_to_shift :
545- rs = self ._recording_segments [idx ]
544+ for segment_index in segments_to_shift :
545+ rs = self ._recording_segments [segment_index ]
546546
547- if self .has_time_vector (segment_index = idx ):
547+ if self .has_time_vector (segment_index = segment_index ):
548548 rs .time_vector += shift
549549 else :
550- rs .t_start += shift
550+ new_start_time = 0 + shift if rs .t_start is None else rs .t_start + shift
551+ rs .t_start = new_start_time
551552
552553 def sample_index_to_time (self , sample_ind , segment_index = None ):
553554 """
@@ -749,9 +750,9 @@ def frame_slice(self, start_frame: int | None, end_frame: int | None) -> BaseRec
749750 Parameters
750751 ----------
751752 start_frame : int, optional
752- The start frame, if not provided it is set to 0
753+ Start frame index. If None, defaults to the beginning of the recording (frame 0).
753754 end_frame : int, optional
754- The end frame, it not provided it is set to the total number of samples
755+ End frame index. If None, defaults to the last frame of the recording.
755756
756757 Returns
757758 -------
@@ -771,20 +772,46 @@ def time_slice(self, start_time: float | None, end_time: float | None) -> BaseRe
771772 Parameters
772773 ----------
773774 start_time : float, optional
774- The start time in seconds. If not provided it is set to 0 .
775+ Start time in seconds. If None, defaults to the beginning of the recording .
775776 end_time : float, optional
776- The end time in seconds. If not provided it is set to the total duration .
777+ End time in seconds. If None, defaults to the end of the recording .
777778
778779 Returns
779780 -------
780781 BaseRecording
781782 A new recording object with only samples between start_time and end_time
782783 """
784+ num_segments = self .get_num_segments ()
785+ assert (
786+ num_segments == 1
787+ ), f"Time slicing is only supported for single segment recordings. Found { num_segments } segments."
788+
789+ t_start = self .get_start_time ()
790+ t_end = self .get_end_time ()
791+
792+ if start_time is not None :
793+ t_start = self .get_start_time ()
794+ t_start_too_early = start_time < t_start
795+ if t_start_too_early :
796+ raise ValueError (f"start_time { start_time } is before the start time { t_start } of the recording." )
797+ t_start_too_late = start_time > t_end
798+ if t_start_too_late :
799+ raise ValueError (f"start_time { start_time } is after the end time { t_end } of the recording." )
800+ start_frame = self .time_to_sample_index (start_time )
801+ else :
802+ start_frame = None
783803
784- assert self .get_num_segments () == 1 , "Time slicing is only supported for single segment recordings."
804+ if end_time is not None :
805+ t_end_too_early = end_time < t_start
806+ if t_end_too_early :
807+ raise ValueError (f"end_time { end_time } is before the start time { t_start } of the recording." )
785808
786- start_frame = self .time_to_sample_index (start_time ) if start_time else None
787- end_frame = self .time_to_sample_index (end_time ) if end_time else None
809+ t_end_too_late = end_time > t_end
810+ if t_end_too_late :
811+ raise ValueError (f"end_time { end_time } is after the end time { t_end } of the recording." )
812+ end_frame = self .time_to_sample_index (end_time )
813+ else :
814+ end_frame = None
788815
789816 return self .frame_slice (start_frame = start_frame , end_frame = end_frame )
790817
0 commit comments