librosa.output.annotation¶
-
librosa.output.
annotation
(path, intervals, annotations=None, delimiter=’, ’, fmt=’%0.3f’)[source]¶ Save annotations in a 3-column format:
intervals[0, 0],intervals[0, 1],annotations[0]\n intervals[1, 0],intervals[1, 1],annotations[1]\n intervals[2, 0],intervals[2, 1],annotations[2]\n ...
This can be used for segment or chord annotations.
Parameters: - path : str
path to save the output CSV file
- intervals : np.ndarray [shape=(n, 2)]
array of interval start and end-times.
intervals[i, 0] marks the start time of interval i
intervals[i, 1] marks the end time of interval i
- annotations : None or list-like [shape=(n,)]
optional list of annotation strings. annotations[i] applies to the time range intervals[i, 0] to intervals[i, 1]
- delimiter : str
character to separate fields
- fmt : str
format-string for rendering time data
Raises: - ParameterError
if annotations is not None and length does not match intervals
Examples
>>> y, sr = librosa.load(librosa.util.example_audio_file()) >>> data = librosa.feature.mfcc(y=y, sr=sr, hop_length=512)
Detect segment boundaries
>>> boundaries = librosa.segment.agglomerative(data, k=10)
Convert to time
>>> boundary_times = librosa.frames_to_time(boundaries, sr=sr, ... hop_length=512)
Convert events boundaries to intervals
>>> intervals = np.hstack([boundary_times[:-1, np.newaxis], ... boundary_times[1:, np.newaxis]])
Make some fake annotations
>>> labels = ['Seg #{:03d}'.format(i) for i in range(len(intervals))]
Save the output
>>> librosa.output.annotation('segments.csv', intervals, ... annotations=labels)