stretchAudio

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

Описание

пример

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

пример

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

Перекрытие подобия формы волны - добавляет (WSOLA) TSM, метод позволяет вам задать максимальное количество выборок, чтобы искать лучшее выравнивание сигнала. По умолчанию дельта 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 до 1 024. Слушайте первые 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 mustBeReal.

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

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

Примечание

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

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

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

Примечание

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

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

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

Зависимости

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

Типы данных: логический

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

Зависимости

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

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

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

свернуть все

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

Алгоритмы

свернуть все

Вокодер фазы

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

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

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

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

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

WSOLA

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

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

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

Ссылки

[1] Driedger, Джонатан и Майнард Мюллер. "Анализ модификации масштаба времени музыкальных сигналов". Прикладные науки. Издание 6, выпуск 2, 2016.

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

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

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

Введенный в R2019b