Trim¶
- class auglib.transform.Trim(*, start_pos=0, end_pos=None, duration=None, fill='none', fill_pos='right', unit='seconds', preserve_level=False, bypass_prob=None)[source]¶
Trim, zero pad, and/or repeat signal.
If
duration
isNone
the signal will be trimmed to the range [start_pos
,end_pos
], whereas the start or end of the signal is used ifstart_pos
and/orend_pos
areNone
.If
duration
is provided andfill
is'none'
it will calculatestart_pos
orend_pos
to match the given duration if the incoming signal is long enough. Ifduration
is provided, but neitherstart_pos
orend_pos
it will trim a signal with givenduration
from the center of the signal.If
duration
is provided andfill
is'zeros'
or'loop'
it will return a signal of lengthduration
filling missing values with zeros or the trimmed signal.fill_pos
defines if the signal is filled on the right, left, or both ends.The following table shows a few combinations of the arguments and the resulting augmented signal for an ingoing signal of
[1, 2, 3, 4]
. All time values are given in samples.start_pos
end_pos
duration
fill
fill_pos
outcome
1
None
None
none
right
[2, 3, 4]
None
1
None
none
right
[1, 2, 3]
None
None
2
none
right
[2, 3]
2
None
4
loop
right
[3, 4, 3, 4]
1
1
4
zeros
right
[2, 3, 0, 0]
3
None
4
zeros
both
[0, 4, 0, 0]
- Parameters
start_pos (
typing.Union
[int
,float
,auglib.core.observe.Base
,auglib.core.time.Time
]) – starting point of the trimmed region, relative to the start of the input signal (seeunit
)end_pos (
typing.Union
[int
,float
,auglib.core.observe.Base
,auglib.core.time.Time
,None
]) – end point of the trimmed region, relative to the end of the input signal (seeunit
). The end point is counted backwards from the end of the signal. Ifend_pos=512
samples, it will remove the last 512 samples of the inputduration (
typing.Union
[int
,float
,auglib.core.observe.Base
,auglib.core.time.Time
,None
]) – target duration of the resulting signal (seeunit
). If set toNone
or0
, the selected section extends until the end or the beginning of the original signalfill (
str
) – fill strategy if the end and/or start point of the trimmed region exceeds the signal. Three strategies are available:'none'
the signal is not extended,'zeros'
the signal is filled up with zeros,'loop'
the trimmed signal is repeatedfill_pos (
str
) – position at which the selected fill strategy applies.'right'
adds samples to the right,'left'
adds samples to the left, or'both'
adds samples on both sides, equally distributed starting at the rightunit (
str
) – literal specifying the format ofstart_pos
,end_pos
, andduration
(seeauglib.utils.to_samples()
)preserve_level (
typing.Union
[bool
,auglib.core.observe.Base
]) – ifTrue
the root mean square value of the augmented signal will be the same as before augmentationbypass_prob (
typing.Union
[float
,auglib.core.observe.Base
,None
]) – Probability to bypass the transformation
- Raises
ValueError – if
fill
contains a non-supported valueValueError – if
fill_pos
contains a non-supported value
Examples
Remove first 0.2 s and last 0.2 s of a speech signal.
>>> import audb >>> import audiofile >>> import audplot >>> import auglib >>> transform = auglib.transform.Trim(start_pos=0.2, end_pos=0.2) >>> files = audb.load_media("emodb", "wav/03a01Fa.wav", version="1.4.1") >>> signal, sampling_rate = audiofile.read(files[0]) >>> augmented_signal = transform(signal, sampling_rate) >>> audplot.waveform(augmented_signal)
Trim speech signal to half its current length.
>>> transform = auglib.transform.Trim(duration=0.5, unit="relative") >>> augmented_signal = transform(signal, sampling_rate) >>> audplot.waveform(augmented_signal)
Trim beginning and end of a speech signal, and request a fixed duration. If the trimmed signal is shorter than the requested duration, it is looped.
>>> transform = auglib.transform.Trim( ... start_pos=0.5, ... end_pos=0.5, ... duration=2.0, ... fill="loop", ... ) >>> augmented_signal = transform(signal, sampling_rate) >>> audplot.waveform(augmented_signal)
__call__()¶
- Trim.__call__(signal, sampling_rate=None)¶
Apply transform to signal.
- Parameters
signal (
numpy.ndarray
) – signal to be transformedsampling_rate (
typing.Optional
[int
]) – sampling rate in Hz
- Return type
- Returns
augmented signal
- Raises
ValueError – if the signal shape is not support by chosen transform parameters
ValueError – if
sampling_rate
isNone
, but the transform requires a samling rateRuntimeError – if the given sampling rate is incompatible with the transform
arguments¶
- Trim.arguments¶
Returns arguments that are serialized.
- Returns
Dictionary of arguments and their values.
- Raises
RuntimeError – if arguments are found that are not assigned to attributes of the same name
Examples
>>> import audobject.testing >>> o = audobject.testing.TestObject('test', point=(1, 1)) >>> o.arguments {'name': 'test', 'point': (1, 1)}
borrowed_arguments¶
- Trim.borrowed_arguments¶
Returns borrowed arguments.
- Returns
Dictionary with borrowed arguments.
id¶
- Trim.id¶
Object identifier.
The ID of an object ID is created from its non-hidden arguments.
- Returns
object identifier
Examples
>>> class Foo(Object): ... def __init__(self, bar: str): ... self.bar = bar >>> foo1 = Foo('I am unique!') >>> foo1.id '893df240-babe-d796-cdf1-c436171b7a96' >>> foo2 = Foo('I am different!') >>> foo2.id '9303f2a5-bfc9-e5ff-0ffa-a9846e2d2190' >>> foo3 = Foo('I am unique!') >>> foo1.id == foo3.id True
is_loaded_from_dict¶
- Trim.is_loaded_from_dict¶
Check if object was loaded from a dictionary.
Returns
True
if object was initialized from a dictionary, e.g. after loading it from a YAML file.- Returns
True
if object was loaded from a dictionary,otherwise
False
short_id¶
- Trim.short_id¶
Short object identifier.
The short ID consists of eight characters and is created from its non-hidden arguments.
- Returns
short object identifier
Examples
>>> class Foo(Object): ... def __init__(self, bar: str): ... self.bar = bar >>> foo1 = Foo('I am unique!') >>> foo1.id '893df240-babe-d796-cdf1-c436171b7a96' >>> foo1.short_id '171b7a96' >>> foo2 = Foo('I am different!') >>> foo2.short_id '6e2d2190' >>> foo3 = Foo('I am unique!') >>> foo1.short_id == foo3.short_id True
to_dict()¶
- Trim.to_dict(*, include_version=True, flatten=False, root=None)¶
Converts object to a dictionary.
Includes items from
audobject.Object.arguments
. If an argument has a resolver, its value is encoded. Usually, the object can be re-instantiated usingaudobject.Object.from_dict()
. However, ifflatten=True
, this is not possible.- Parameters
include_version (
bool
) – add version to class nameflatten (
bool
) – flatten the dictionaryroot (
typing.Optional
[str
]) – if file is written to disk, set to target directory
- Return type
typing.Dict
[str
,typing.Union
[bool
,datetime.datetime
,dict
,float
,int
,list
,None
,str
]]- Returns
dictionary that represent the object
Examples
>>> import audobject.testing >>> o = audobject.testing.TestObject('test', point=(1, 1)) >>> o.to_dict(include_version=False) {'$audobject.core.testing.TestObject': {'name': 'test', 'point': [1, 1]}} >>> o.to_dict(flatten=True) {'name': 'test', 'point.0': 1, 'point.1': 1}
to_samples()¶
to_yaml()¶
- Trim.to_yaml(path_or_stream, *, include_version=True)¶
Save object to YAML file.
- Parameters
path_or_stream (
typing.Union
[str
,typing.IO
]) – file path or streaminclude_version (
bool
) – add version to class name