Browse Source

lavfi/atempo: raise max tempo limit (v2)

tags/n4.1
Pavel Koshevoy 7 years ago
parent
commit
29cddc99cd
2 changed files with 17 additions and 6 deletions
  1. +14
    -3
      doc/filters.texi
  2. +3
    -3
      libavfilter/af_atempo.c

+ 14
- 3
doc/filters.texi View File

@@ -1986,7 +1986,12 @@ Adjust audio tempo.


The filter accepts exactly one parameter, the audio tempo. If not The filter accepts exactly one parameter, the audio tempo. If not
specified then the filter will assume nominal 1.0 tempo. Tempo must specified then the filter will assume nominal 1.0 tempo. Tempo must
be in the [0.5, 2.0] range.
be in the [0.5, 100.0] range.

Note that tempo greater than 2 will skip some samples rather than
blend them in. If for any reason this is a concern it is always
possible to daisy-chain several instances of atempo to achieve the
desired product tempo.


@subsection Examples @subsection Examples


@@ -1998,9 +2003,15 @@ atempo=0.8
@end example @end example


@item @item
To speed up audio to 125% tempo:
To speed up audio to 300% tempo:
@example
atempo=3
@end example

@item
To speed up audio to 300% tempo by daisy-chaining two atempo instances:
@example @example
atempo=1.25
atempo=sqrt(3),atempo=sqrt(3)
@end example @end example
@end itemize @end itemize




+ 3
- 3
libavfilter/af_atempo.c View File

@@ -153,7 +153,7 @@ typedef struct ATempoContext {


static const AVOption atempo_options[] = { static const AVOption atempo_options[] = {
{ "tempo", "set tempo scale factor", { "tempo", "set tempo scale factor",
OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 2.0,
OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 100.0,
AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM }, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
{ NULL } { NULL }
}; };
@@ -439,8 +439,8 @@ static int yae_load_data(ATempoContext *atempo,
return 0; return 0;
} }


// samples are not expected to be skipped:
av_assert0(read_size <= atempo->ring);
// samples are not expected to be skipped, unless tempo is greater than 2:
av_assert0(read_size <= atempo->ring || atempo->tempo > 2.0);


while (atempo->position[0] < stop_here && src < src_end) { while (atempo->position[0] < stop_here && src < src_end) {
int src_samples = (src_end - src) / atempo->stride; int src_samples = (src_end - src) / atempo->stride;


Loading…
Cancel
Save