stretchAudio

Растянутое во времени аудио

Описание

пример

audioOut = stretchAudio(audioIn,alpha) применяет изменение шкалы времени (TSM) к входу аудио с помощью фактора TSM alpha.

пример

audioOut = stretchAudio(audioIn,alpha,Name,Value) задает опции с использованием одного или нескольких Name,Value аргументы в виде пар.

Примеры

свернуть все

Считывайте аудиосигнал. Прослушайте аудиосигнал и постройте график с течением времени.

[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");

t = (0:size(audioIn,1)-1)/fs;
plot(t,audioIn)
xlabel('Time (s)')
ylabel('Amplitude')
title('Original Signal')
axis tight
grid on

Figure contains an axes. The axes with title Original Signal contains an object of type line.

sound(audioIn,fs)

Использование stretchAudio для применения 1,5 коэффициента ускорения. Прослушайте измененный аудиосигнал и постройте график с течением времени. Частота дискретизации остается прежней, но длительность сигнала уменьшилась.

audioOut = stretchAudio(audioIn,1.5);

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, Speedup Factor = 1.5')
axis tight
grid on

Figure contains an axes. The axes with title Modified Signal, Speedup Factor = 1.5 contains an object of type line.

sound(audioOut,fs)

Замедлите исходный аудиосигнал на 0,75 множителя. Прослушайте измененный аудиосигнал и постройте график с течением времени. Частота дискретизации остается такой же, как и исходное аудио, но длительность сигнала увеличилась.

audioOut = stretchAudio(audioIn,0.75);

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, Speedup Factor = 0.75')
axis tight
grid on

Figure contains an axes. The axes with title Modified Signal, Speedup Factor = 0.75 contains an object of type line.

sound(audioOut,fs)

stretchAudio поддерживает TSM на аудио частотного диапазона при использовании метода вокодера по умолчанию. Применение TSM к частотному диапазону аудио позволяет вам повторно использовать расчет STFT для нескольких факторов TSM.

Считывайте аудиосигнал. Прослушайте аудиосигнал и постройте график с течением времени.

[audioIn,fs] = audioread('FemaleSpeech-16-8-mono-3secs.wav');

sound(audioIn,fs)

t = (0:size(audioIn,1)-1)/fs;
plot(t,audioIn)
xlabel('Time (s)')
ylabel('Amplitude')
title('Original Signal')
axis tight
grid on

Figure contains an axes. The axes with title Original Signal contains an object of type line.

Преобразуйте аудиосигнал в частотный диапазон.

win = sqrt(hann(256,'periodic'));
ovrlp = 192;
S = stft(audioIn,'Window',win,'OverlapLength',ovrlp,'Centered',false);

Ускорите аудиосигнал в 1,4 раза. Задайте длину окна и перекрытия, используемые для создания представления частотного диапазона.

alpha = 1.4;
audioOut = stretchAudio(S,alpha,'Window',win,'OverlapLength',ovrlp);

sound(audioOut,fs)

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, TSM Factor = 1.4')
axis tight
grid on

Figure contains an axes. The axes with title Modified Signal, TSM Factor = 1.4 contains an object of type line.

Замедлите аудиосигнал в множителе 0,8. Задайте длину окна и перекрытия, используемые для создания представления частотного диапазона.

alpha = 0.8;
audioOut = stretchAudio(S,alpha,'Window',win,'OverlapLength',ovrlp);

sound(audioOut,fs)

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, TSM Factor = 0.8')
axis tight
grid on

Figure contains an axes. The axes with title Modified Signal, TSM Factor = 0.8 contains an object of type line.

Метод TSM по умолчанию (вокодер) позволяет вам дополнительно применить фазовую автоподстройку, чтобы повысить точность исходного аудио.

Считывайте аудиосигнал. Прослушайте аудиосигнал и постройте график с течением времени.

[audioIn,fs] = audioread("SpeechDFT-16-8-mono-5secs.wav");

sound(audioIn,fs)

t = (0:size(audioIn,1)-1)/fs;
plot(t,audioIn)
xlabel('Time (s)')
ylabel('Amplitude')
title('Original Signal')
axis tight
grid on

Фазовая блокировка добавляет нетривиальную вычислительную нагрузку к TSM и не всегда требуется. По умолчанию фазовая блокировка отключена. Примените коэффициент скорости 1,8 к входу аудиосигналу. Прослушайте аудиосигнал и постройте график с течением времени.

alpha = 1.8;

tic
audioOut = stretchAudio(audioIn,alpha);
processingTimeWithoutPhaseLocking = toc
processingTimeWithoutPhaseLocking = 0.0798
sound(audioOut,fs)

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, alpha = 1.8, LockPhase = false')
axis tight
grid on

Примените тот же 1,8 коэффициент скорости к входу аудиосигналу, на этот раз включив фазовую автоподстройку. Прослушайте аудиосигнал и постройте график с течением времени.

tic
audioOut = stretchAudio(audioIn,alpha,"LockPhase",true);
processingTimeWithPhaseLocking = toc
processingTimeWithPhaseLocking = 0.1154
sound(audioOut,fs)

t = (0:size(audioOut,1)-1)/fs;
plot(t,audioOut)
xlabel('Time (s)')
ylabel('Amplitude')
title('Modified Signal, alpha = 1.8, LockPhase = true')
axis tight
grid on

Метод TSM перекрытия-добавления подобия формы волны (WSOLA) позволяет вам задать максимальное количество выборок для поиска наилучшего выравнивания сигнала. По умолчанию дельта WSOLA является количеством выборок в окне анализа минус количество выборок, перекрывающихся между смежными окнами анализа. Увеличение дельты WSOLA увеличивает вычислительную нагрузку, но может также увеличить точность.

Считывайте аудиосигнал. Прослушайте первые 10 секунд аудиосигнала.

[audioIn,fs] = audioread('RockGuitar-16-96-stereo-72secs.flac');

sound(audioIn(1:10*fs,:),fs)

Примените коэффициент TSM 0,75 к входу аудиосигналу с помощью метода WSOLA. Прослушайте первые 10 секунд полученного аудиосигнала.

alpha = 0.75;
tic
audioOut = stretchAudio(audioIn,alpha,"Method","wsola");
processingTimeWithDefaultWSOLADelta = toc
processingTimeWithDefaultWSOLADelta = 19.4403
sound(audioOut(1:10*fs,:),fs)

Применить коэффициент TSM 0,75 к входу аудиосигналу, на этот раз увеличив дельту WSOLA до 1024. Прослушайте первые 10 секунд полученного аудиосигнала.

tic
audioOut = stretchAudio(audioIn,alpha,"Method","wsola","WSOLADelta",1024);
processingTimeWithIncreasedWSOLADelta = toc
processingTimeWithIncreasedWSOLADelta = 25.5306
sound(audioOut(1:10*fs,:),fs)

Входные параметры

свернуть все

Входной сигнал, заданный как вектор-столбец, матрица или трехмерный массив. Как интерпретируется функция audioIn зависит от сложности audioIn и значение Method:

  • Если audioIn реально, audioIn интерпретируется как сигнал временной области. В этом случае audioIn должен быть вектором-столбцом или матрицей. Столбцы интерпретируются как отдельные каналы.

    Этот синтаксис применяется при Method установлено в 'vocoder' или 'wsola'.

  • Если audioIn комплексный, audioIn интерпретируется как сигнал частотного диапазона. В этом случае audioIn должен быть L -by- M -by- N массивом, где L - длина БПФ, M - количество отдельных спектров, а N - количество каналов.

    Этот синтаксис применяется только при Method установлено в 'vocoder'.

Типы данных: single | double
Поддержка комплексного числа: Да

Коэффициент TSM, заданный как положительная скалярная величина.

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Window',kbdwin(512)

Метод, используемый для масштабирования звука во времени, задается как разделенная разделенными запятой парами, состоящая из 'Method' и 'vocoder' или 'wsola'. Задайте 'Method' на 'vocoder' использовать метод фазового вокодера. Задайте 'Method' на 'wsola' для использования метода WSOLA.

Если 'Method' установлено в 'vocoder', audioIn может быть реальным или комплексным. Если 'Method' установлено в 'wsola', audioIn должно быть реальным.

Типы данных: single | double

Окно, примененное во временном интервале, задается как разделенная разделенными запятой парами, состоящая из 'Window' и вектор действительных чисел. Количество элементов в векторе должно быть в области значений [1, size (audioIn,1)]. Количество элементов в векторе также должно быть больше OverlapLength.

Примечание

При использовании stretchAudio с входом частотного диапазона необходимо задать Window как то же окно, используемое для преобразования audioIn на частотный диапазон.

Типы данных: single | double

Количество выборок, перекрывающихся между смежными окнами, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapLength' и целое число в области значений [0, numel(Window)).

Примечание

При использовании stretchAudio с входом частотного диапазона необходимо задать OverlapLength как та же длина перекрытия, используемая для преобразования audioIn во временно-частотное представление.

Типы данных: single | double

Примените единичную фазовую блокировку, заданную как разделенная разделенными запятой парами, состоящая из 'LockPhase' и false или true.

Зависимости

Чтобы включить этот аргумент пары "имя-значение", задайте Method на 'vocoder'.

Типы данных: logical

Максимальное количество выборок, используемых для поиска наилучшего выравнивания сигнала, заданное как разделенная разделенными запятой парами, состоящая из 'WSOLADelta' и неотрицательный скаляр.

Зависимости

Чтобы включить этот аргумент пары "имя-значение", задайте Method на 'wsola'.

Типы данных: single | double

Выходные аргументы

свернуть все

Измененный во времени аудио, возвращенный как вектор-столбец или матрица независимых каналов.

Алгоритмы

свернуть все

Фазовый вокодер

Алгоритм фазы вокодера является частотным диапазоном подходом к [1][2] TSM. Основные шаги алгоритма фазы вокодера:

  1. Окна алгоритма сигнал временной области в интервале η, где η = numel (Window) - OverlapLength. Окна затем преобразуются в частотный диапазон.

  2. Чтобы сохранить горизонтальную (через время) когерентность фазы, алгоритм обрабатывает каждый интервал как независимую синусоиду, фаза которой вычисляется путем накопления оценок его мгновенной частоты.

  3. Чтобы сохранить вертикальную (по отдельному спектру) когерентность фазы, алгоритм блокирует усовершенствование групп интервалов к фазовому усовершенствованию локального peaks. Этот шаг применяется только в том случае LockPhase установлено в true.

  4. Алгоритм возвращает измененную спектрограмму к временному интервалу, с окнами, располагаемыми с промежутками в δ, где δ ≈ η/α. α - коэффициент скорости, заданный alpha входной параметр.

WSOLA

Алгоритм WSOLA является подходом во временной области к [1][2] TSM. WSOLA является расширением алгоритма перекрытия и добавления (OLA). В алгоритме OLA сигнал временной области - windowed в интервале η, где η = numel (Window) - OverlapLength. Чтобы создать измененное во временной шкале выходное аудио, окна разнесены между интервалами, где и ≈, и/или. α - коэффициент TSM, заданный alpha входной параметр.

Алгоритм OLA хорошо справляется с воссозданием спектров величин, но может ввести скачки фазы между окнами. Алгоритм WSOLA пытается сглаживать переходы фазы путем поиска WSOLADelta дискретизирует вокруг интервала и для окна, которое минимизирует переходы фазы. Алгоритм ищет лучшее окно итеративно, так что каждое последующее окно выбирается относительно ранее выбранного окна.

Если WSOLADelta установлено в 0, затем алгоритм сокращается до OLA.

Ссылки

[1] Дриджер, Джонатан и Майнард Мюллер. A Review of Time-Scale Modification of Music Signals (неопр.) (недоступная ссылка). Прикладные науки. Том 6, Выпуск 2, 2016.

[2] Дриджер, Джонатан. Алгоритмы модификации музыкальных аудиосигналов шкалы времени, магистерская диссертация, Саарландский университет, Саарбрюккен, Германия, 2011 год.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b