Растянутое во времени аудио
Считывайте аудиосигнал. Прослушайте аудиосигнал и постройте график с течением времени.
[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
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
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
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
Преобразуйте аудиосигнал в частотный диапазон.
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
Замедлите аудиосигнал в множителе 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
Метод 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
зависит от сложности audioIn
и значение Method
:
Если audioIn
реально, audioIn
интерпретируется как сигнал временной области. В этом случае audioIn
должен быть вектором-столбцом или матрицей. Столбцы интерпретируются как отдельные каналы.
Этот синтаксис применяется при Method
установлено в 'vocoder'
или 'wsola'
.
Если audioIn
комплексный, audioIn
интерпретируется как сигнал частотного диапазона. В этом случае audioIn
должен быть L -by- M -by- N массивом, где L - длина БПФ, M - количество отдельных спектров, а N - количество каналов.
Этот синтаксис применяется только при Method
установлено в 'vocoder'
.
Типы данных: single
| double
Поддержка комплексного числа: Да
alpha
- коэффициент TSMКоэффициент TSM, заданный как положительная скалярная величина.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Window',kbdwin(512)
'Method'
- Метод, используемый для масштабирования звука во времени'vocoder'
(по умолчанию) | 'wsola'
Метод, используемый для масштабирования звука во времени, задается как разделенная разделенными запятой парами, состоящая из 'Method'
и 'vocoder'
или 'wsola'
. Задайте 'Method'
на 'vocoder'
использовать метод фазового вокодера. Задайте 'Method'
на 'wsola'
для использования метода WSOLA.
Если 'Method'
установлено в 'vocoder'
, audioIn
может быть реальным или комплексным. Если 'Method'
установлено в 'wsola'
, audioIn
должно быть реальным.
Типы данных: single
| double
'Window'
- Окно применяется во временном интервалеsqrt(hann(1024,'periodic'))
(по умолчанию) | вектор действительных чиселОкно, примененное во временном интервале, задается как разделенная разделенными запятой парами, состоящая из 'Window'
и вектор действительных чисел. Количество элементов в векторе должно быть в области значений [1, size
]. Количество элементов в векторе также должно быть больше (audioIn
,1)OverlapLength
.
Примечание
При использовании stretchAudio
с входом частотного диапазона необходимо задать Window
как то же окно, используемое для преобразования audioIn
на частотный диапазон.
Типы данных: single
| double
'OverlapLength'
- Количество проб, перекрывающихся между смежными окнамиround (0,75 * numel (Window
))
(по умолчанию) | скаляром в области значений [0 numel (Window
)
)Количество выборок, перекрывающихся между смежными окнами, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapLength'
и целое число в области значений [0, numel(Window)
).
Примечание
При использовании stretchAudio
с входом частотного диапазона необходимо задать OverlapLength
как та же длина перекрытия, используемая для преобразования audioIn
во временно-частотное представление.
Типы данных: single
| double
'LockPhase'
- Применить единичную фазовую автоподстройкуfalse
(по умолчанию) | true
Примените единичную фазовую блокировку, заданную как разделенная разделенными запятой парами, состоящая из 'LockPhase'
и false
или true
.
Чтобы включить этот аргумент пары "имя-значение", задайте Method
на 'vocoder'
.
Типы данных: logical
'WSOLADelta'
- Максимальное количество выборок, используемых для поиска наилучшего выравнивания сигналаnumel (Window
) - OverlapLength
(по умолчанию) | неотрицательной скаляромМаксимальное количество выборок, используемых для поиска наилучшего выравнивания сигнала, заданное как разделенная разделенными запятой парами, состоящая из 'WSOLADelta'
и неотрицательный скаляр.
Чтобы включить этот аргумент пары "имя-значение", задайте Method
на 'wsola'
.
Типы данных: single
| double
audioOut
- Измененный аудио шкалы времениИзмененный во времени аудио, возвращенный как вектор-столбец или матрица независимых каналов.
Алгоритм фазы вокодера является частотным диапазоном подходом к [1][2] TSM. Основные шаги алгоритма фазы вокодера:
Окна алгоритма сигнал временной области в интервале η, где η = numel
. Окна затем преобразуются в частотный диапазон.(Window
) - OverlapLength
Чтобы сохранить горизонтальную (через время) когерентность фазы, алгоритм обрабатывает каждый интервал как независимую синусоиду, фаза которой вычисляется путем накопления оценок его мгновенной частоты.
Чтобы сохранить вертикальную (по отдельному спектру) когерентность фазы, алгоритм блокирует усовершенствование групп интервалов к фазовому усовершенствованию локального peaks. Этот шаг применяется только в том случае LockPhase
установлено в true
.
Алгоритм возвращает измененную спектрограмму к временному интервалу, с окнами, располагаемыми с промежутками в δ, где δ ≈ η/α. α - коэффициент скорости, заданный alpha
входной параметр.
Алгоритм WSOLA является подходом во временной области к [1][2] TSM. WSOLA является расширением алгоритма перекрытия и добавления (OLA). В алгоритме OLA сигнал временной области - windowed в интервале η, где η = numel
. Чтобы создать измененное во временной шкале выходное аудио, окна разнесены между интервалами, где и ≈, и/или. α - коэффициент TSM, заданный (Window
) - OverlapLength
alpha
входной параметр.
Алгоритм OLA хорошо справляется с воссозданием спектров величин, но может ввести скачки фазы между окнами. Алгоритм WSOLA пытается сглаживать переходы фазы путем поиска WSOLADelta
дискретизирует вокруг интервала и для окна, которое минимизирует переходы фазы. Алгоритм ищет лучшее окно итеративно, так что каждое последующее окно выбирается относительно ранее выбранного окна.
Если WSOLADelta
установлено в 0
, затем алгоритм сокращается до OLA.
[1] Дриджер, Джонатан и Майнард Мюллер. A Review of Time-Scale Modification of Music Signals (неопр.) (недоступная ссылка). Прикладные науки. Том 6, Выпуск 2, 2016.
[2] Дриджер, Джонатан. Алгоритмы модификации музыкальных аудиосигналов шкалы времени, магистерская диссертация, Саарландский университет, Саарбрюккен, Германия, 2011 год.
Использование gpuArray
(Parallel Computing Toolbox) вход с stretchAudio
функция рекомендуется только для графического процессора с вычислительными возможностями 7.0 («Volta») или выше. Другое оборудование может не предложить каких-либо преимуществ эффективности. Чтобы проверить вычислительные возможности графический процессор, смотрите ComputeCompability
в выход от gpuDevice
(Parallel Computing Toolbox) функция. Для получения дополнительной информации смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
Обзор использования графический процессор в MATLAB®, см. «Запуск функций MATLAB на графическом процессоре» (Parallel Computing Toolbox).
audioDataAugmenter
| audioTimeScaler
| reverberator
| shiftPitch
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.