Предположим, что это ваша полная строка
. Подписавшись, я соглашаюсь с Условиями & amp; Политика конфиденциальности
и строка, которую вы хотите сделать кликабельными, -
Условия использования и политика конфиденциальности
, вот, вот мой трюк .....
ClickableSpan terms = new ClickableSpan() {
@Override
public void onClick(View widget) {
new Utils(getActivity()).shortToast("Terms");
}
};
ClickableSpan privacy = new ClickableSpan() {
@Override
public void onClick(View widget) {
new Utils(getActivity()).shortToast("Privacy");
}
};
основная функция для этого
public void setClickableString(String wholeValue, TextView textView, final String[] clickableValue, ClickableSpan[] clickableSpans) {
SpannableString spannableString = new SpannableString(wholeValue);
for (int i = 0; i < clickableValue.length; i++) {
ClickableSpan clickableSpan = clickableSpans[i];
String link = clickableValue[i];
int startIndexOfLink = wholeValue.indexOf(link);
spannableString.setSpan(clickableSpan, startIndexOfLink, startIndexOfLink + link.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setHighlightColor(
Color.TRANSPARENT); // prevent TextView change background when highlight
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannableString, TextView.BufferType.SPANNABLE);
}
, и вот функция, вызывающая
setClickableString(getString(R.string.terms_and_policy), tv_terms, new String[]{"Terms of Conditions", "Privacy Policy"}, new ClickableSpan[]{terms, privacy});
Используйте фильтры atrim , asetpts и concat :
ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,asetpts=N/SR/TB[begin];[0:a]atrim=start=10,asetpts=N/SR/TB[end];[begin][1:a][end]concat=n=3:v=0:a=1[a]" -map "[a]" output
Примечание. Все соответствующие потоки должны иметь одинаковые параметры. во всех сегментах; система фильтрации автоматически выберет общий формат семплов, частоту семплов и схему каналов для аудиопотоков. Эти общие параметры будут варьироваться в зависимости от входных параметров, поэтому добавьте фильтр формата (или эквивалентный), если вы хотите получить согласованные результаты:
ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[begin];[1:a]aformat=sample_rates=44100:channel_layouts=stereo[middle];[0:a]atrim=start=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[end];[begin][middle][end]concat=n=3:v=0:a=1[a]" -map "[a]" output
Как объединить два совершенно разных mp3-файла (разность битрейта, каналы, частота дискретизации, битдеф)?
blockquote>Давайте начнем с каждого компонента ...
битрейт
blockquote>Это не имеет значения. Потоки MP3 могут (и делают!) Изменять битрейт в среднем потоке. Пока вы присоединяетесь к заголовку фрейма, все в порядке.
bitdepth
blockquote>Концепция глубины в битах семплов не существует в MP3. Вы можете записывать в 24-битном формате, кодировать в MP3, а декодер будет декодировать в 16-битном формате. (Или с некоторыми переключателями командной строки, наоборот!) Это не проблема, потому что битовая глубина не применяется.
частота дискретизации
blockquote>Обычно это проблема. Большинство игроков не предполагают, что они собираются изменить частоту дискретизации в середине потока. Большинство игроков не пытаются повторить выборку, чтобы придерживаться скорости, с которой они уже выводили. Я не удивлен, что у вас возникнут проблемы с изменением частоты дискретизации.
channel
blockquote>Это похоже на проблему с частотой дискретизации, поскольку требует изменения конфигурации устройства вывода. Даже если игрок поддерживает это, это не будет гладко. (Если только вы не переходили от стерео к моно, где моно можно было легко микшировать на стерео.)
В качестве входных данных я получаю один файл mp3 (input.mp3), затем мне нужно разделить его на две отдельные части (сделано это) и вставьте между этими частями еще один mp3 (second.mp3).
blockquote>На самом деле это еще одна проблема, о которой вы не спрашивали ... время. MP3 работает в относительно больших кадрах (обычно 576 сэмплов), что становится разрешением, при котором вы можете склеивать. Нехорошо. Кроме того, начало дорожек часто имеет один или два кадра инициализации.
Третий вопрос - битовый резервуар. Именно здесь содержимое из одного кадра хранится в другом кадре, который может иметь дополнительное пространство.
В конце дня вам придется декодировать все в обычные сэмплы PCM, выполнять сплайсинг и перекодировать в MP3. Вы также должны будете повторно сэмплировать все на общую тактовую частоту и смешать с определенным количеством каналов. К счастью, когда-то декодированный в PCM, это все тривиально и стандартно. Как только ваши входные потоки совместимы, вы произвольно соединяете кадр PCM, который является наиболее детализированным из возможных.