Сдвиньте аудио тангаж
смещает тангаж звукового входного сигнала на заданное количество полутонов, audioOut
= shiftPitch(audioIn
,nsemitones
)nsemitones
.
задает опции с использованием одного или нескольких audioOut
= shiftPitch(audioIn
,nsemitones
,Name,Value
)Name,Value
аргументы в виде пар.
Читайте в аудио файла и слушайте его.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
sound(audioIn,fs)
Увеличьте тангаж на 3 полутона и послушайте результат.
nsemitones = 3; audioOut = shiftPitch(audioIn,nsemitones); sound(audioOut,fs)
Уменьшите тангаж исходного аудио на 3 полутона и прослушайте результат.
nsemitones = -3; audioOut = shiftPitch(audioIn,nsemitones); sound(audioOut,fs)
Читайте в аудио файла и слушайте его.
[audioIn,fs] = audioread("SpeechDFT-16-8-mono-5secs.wav");
sound(audioIn,fs)
Преобразуйте аудиосигнал в представление частота-время с помощью stft
. Используйте 512-точечную kbdwin
с 75% перекрытием.
win = kbdwin(512); overlapLength = 0.75*numel(win); S = stft(audioIn, ... "Window",win, ... "OverlapLength",overlapLength, ... "Centered",false);
Увеличьте тангаж на 8 полутонов и послушайте результат. Задайте длину окна и перекрытия, которые вы использовали для вычисления STFT.
nsemitones = 8; lockPhase = false; audioOut = shiftPitch (S, nsemitones,... "Window", выигрывайте ,... "OverlapLength", overlapLength ,... "LockPhase", lockPhase); звук (audioOut, fs)
Уменьшите тангаж исходного аудио на 8 полутонов и прослушайте результат. Задайте длину окна и перекрытия, которые вы использовали для вычисления STFT.
nsemitones = -8; lockPhase = false; audioOut = shiftPitch (S, nsemitones,... "Window", выигрывайте ,... "OverlapLength", overlapLength ,... "LockPhase", lockPhase); звук (audioOut, fs)
Читайте в аудио файла и слушайте его.
[audioIn,fs] = audioread('FemaleSpeech-16-8-mono-3secs.wav');
sound(audioIn,fs)
Увеличьте тангаж на 6 полутонов и послушайте результат.
nsemitones = 6; lockPhase = false; audioOut = shiftPitch(audioIn,nsemitones, ... 'LockPhase',lockPhase); sound(audioOut,fs)
Для повышения точности задайте LockPhase
на true
. Примените перемену тангажа и прослушайте результаты.
lockPhase = true; audioOut = shiftPitch(audioIn,nsemitones, ... 'LockPhase',lockPhase); sound(audioOut,fs)
Читайте в первые 11,5 секунд аудио файла и слушайте его.
[audioIn,fs] = audioread('Rainbow-16-8-mono-114secs.wav',[1,8e3*11.5]);
sound(audioIn,fs)
Увеличьте тангаж на 4 полутона и примените фазу замок. Послушайте результаты. Получившееся аудио имеет «чипмунк эффект», который звучит неестественно.
nsemitones = 4; lockPhase = true; audioOut = shiftPitch (audioIn, nsemitones,... "LockPhase", lockPhase); звук (audioOut, fs)
Для повышения точности задайте PreserveFormants
на true
. Используйте порядок по умолчанию cepstral 30
. Послушайте результат.
cepstralOrder = 30; audioOut = shiftPitch (audioIn, nsemitones,... "LockPhase", lockPhase ,... "PreserveFormants"Правда, ... "CepstralOrder", cepstralOrder); звук (audioOut, fs)
audioIn
- Входной сигналВходной сигнал, заданный как вектор-столбец, матрица или трехмерный массив. Как интерпретируется функция audioIn
зависит от сложности audioIn
:
Если audioIn
реально, audioIn
интерпретируется как сигнал временной области. В этом случае audioIn
должен быть вектором-столбцом или матрицей. Столбцы интерпретируются как отдельные каналы.
Если audioIn
комплексный, audioIn
интерпретируется как сигнал частотного диапазона. В этом случае audioIn
должен быть L -by- M -by- N массивом, где L - длина БПФ, M - количество отдельных спектров, а N - количество каналов.
Типы данных: single
| double
Поддержка комплексного числа: Да
nsemitones
- Количество полутонов для переключения звука наКоличество полутонов, на которые можно сдвинуть аудио, заданное как действительный скаляр.
Область области значений nsemitones
зависит от длины окна (число
) и длина перекрытия ((Window
)OverlapLength
):
-12 * log2 (
≤ число (Window
) - OverlapLength
)nsemitones
≤ -12 * log2 ((
число (Window
) - OverlapLength
)/numel (Window
))
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Window',kbdwin(512)
'Window'
- Окно применяется во временном интервалеsqrt(hann(1024,'periodic'))
(по умолчанию) | вектор действительных чиселОкно, примененное во временном интервале, задается как разделенная разделенными запятой парами, состоящая из 'Window'
и вектор действительных чисел. Количество элементов в векторе должно быть в области значений [1, size
]. Количество элементов в векторе также должно быть больше (audioIn
,1)OverlapLength
.
Примечание
При использовании shiftPitch
с входом частотного диапазона необходимо задать Window
как то же окно, используемое для преобразования audioIn
на частотный диапазон.
Типы данных: single
| double
'OverlapLength'
- Количество проб, перекрывающихся между смежными окнамиround (0,75 * numel (Window
))
(по умолчанию) | скаляром в области значений [0, numel (Window
)
)Количество выборок, перекрывающихся между смежными окнами, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapLength'
и целое число в области значений [0, numel(Window)
).
Примечание
При использовании shiftPitch
с входом частотного диапазона необходимо задать OverlapLength
как та же длина перекрытия, используемая для преобразования audioIn
во временно-частотное представление.
Типы данных: single
| double
'LockPhase'
- Применить единичную фазовую автоподстройкуfalse
(по умолчанию) | true
Примените единичную фазовую блокировку, заданную как разделенная разделенными запятой парами, состоящая из 'LockPhase'
и false
или true
.
Типы данных: logical
'PreserveFormants'
- Сохраните формантыfalse
(по умолчанию) | true
Сохраняет форманты, заданные как разделенная разделенными запятой парами, состоящая из 'PreserveFormants'
и true
или false
. Осуществляют консервацию форманта с помощью оценки спектральной огибающей с помощью кепстрального анализа.
Типы данных: logical
'CepstralOrder'
- Порядок Cepstral, используемый для сохранения формантаПорядок Cepstral, используемый для сохранения форманта, задается как разделенная разделенными запятой парами, состоящая из 'CepstralOrder'
и неотрицательное целое число.
Чтобы включить этот аргумент пары "имя-значение", задайте PreserveFormants
на true
.
Типы данных: single
| double
audioOut
- Звук со сдвигом основного тонаАудио со сдвигом по тангажу, возвращаемое как вектор-столбец или матрица независимых каналов.
Для применения перемены тангажа, shiftPitch
изменяет шкалу времени аудио с помощью фазы вокодера, а затем повторно суммирует измененное аудио. Алгоритм изменения шкалы времени основан на [1] и [2] и реализован как stretchAudio
.
После изменения шкалы времени, shiftPitch
выполняет преобразование скорости дискретизации с использованием коэффициента интерполяции, равного длине скачка анализа, и коэффициента десятикратного уменьшения, равного длине скачка синтеза. Коэффициенты интерполяции и десятикратного уменьшения на этапе повторной дискретизации выбираются следующим образом: Длина скачка анализа определяется как analysisHopLength = numel
. (Window
) - OverlapLength
shiftPitch
функция принимает, что в октаве 12 полутонов, поэтому коэффициент ускорения, используемый для растяжения звука, является speedupFactor = 2 ^
. Коэффициент ускорения и длина скачка анализа определяют длину скачка синтеза для изменения шкалы времени следующим (- nsemitones
/12)synthesisHopLength = round((1/SpeedupFactor)*analysisHopLength)
.
Достижимый сдвиг тангажа определяется длиной окна (numel
) и (Window
)OverlapLength
. Чтобы увидеть отношение, обратите внимание, что уравнение для коэффициента ускорения может быть переписано как:
, и уравнение для длины шага синтеза может быть переписано следующим nsemitones
= -12 * log2 (speedupFactor)speedupFactor = analysisHopLengh/synthesisHopLength
. Используя простую замену, nsemitones = -12*log2(analysisHopLength/synthesisHopLength)
. Практическая область значений длины шага синтеза - [1, numel
]. Область значений достижимых сдвигов тангажа:(Window
)
Max количество уменьшенных полутонов: -12 * log2 (
numel (Window
) - OverlapLength
)
Max количество поднятых полутонов: -12 * log2 ((
numel (Window
) - OverlapLength
)/numel (Window
))
Перемена тангажа может изменить спектральную огибающую сигнала со сдвигом тангажа. Чтобы уменьшить этот эффект, можно задать PreserveFormants
на true
. Если PreserveFormants
установлено в true
алгоритм пытается оценить спектральную огибающую с помощью итеративной процедуры в кепстральной области, как описано в [3] и [4]. Для как исходного спектра, X, так и спектра со сдвигом по тангажу, Y, алгоритм оценивает спектральную огибающую следующим образом.
Для первой итерации EnvX a задано значение X. Затем алгоритм повторяет эти два шага в цикле:
Lowpass фильтрует cepstral представление EnvX a, чтобы получить новую оценку, EnvX b. The CepstralOrder
параметр управляет полосой пропускания quefrency.
Чтобы обновить текущую лучшую аппроксимацию, алгоритм принимает поэлементный максимум текущей оценки спектральной огибающей и предыдущей оценки спектральной огибающей:
Цикл заканчивается, если либо максимальное количество итераций (100
) достигается, или если все интервалы предполагаемой огибающей логарифмического каротажа находятся в пределах заданного допуска исходного спектра журнала. Для допуска задано значение log(10^(1/20))
.
Наконец, алгоритм масштабирует спектр аудио со сдвигом основного тона на отношение оцененных огибающих, поэлементно:
[1] Дриджер, Джонатан и Майнард Мюллер. A Review of Time-Scale Modification of Music Signals (неопр.) (недоступная ссылка). Прикладные науки. Том 6, Выпуск 2, 2016.
[2] Дриджер, Джонатан. «Алгоритмы изменения шкалы времени для музыкальных аудиосигналов». Магистерская диссертация. Саарландский университет, Саарбрюккен, Германия, 2011 год.
[3] Аксель Робель и Ксавье Роде. «Эффективная оценка спектральной огибающей и ее применение к перемене тангажа и сохранению огибающей». Международная конференция по цифровому аудио Эффектов, стр. 30-35. Мадрид, Испания, сентябрь 2005 года. hal-01161334
[4] С. Имаи, и Я. Абэ. «Экстракция спектральной огибающей улучшенным кепстральным методом». Электрон. и Коммун. в Японии. Том 62-A, выпуск 4, 1997, стр. 10-17.
Использование gpuArray
(Parallel Computing Toolbox) вход с shiftPitch
функция рекомендуется только для графического процессора с вычислительными возможностями 7.0 («Volta») или выше. Другое оборудование может не предложить каких-либо преимуществ эффективности. Чтобы проверить вычислительные возможности графический процессор, смотрите ComputeCompability
в выход от gpuDevice
(Parallel Computing Toolbox) функция. Для получения дополнительной информации смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
Обзор использования графический процессор в MATLAB®, см. «Запуск функций MATLAB на графическом процессоре» (Parallel Computing Toolbox).
audioDataAugmenter
| audioTimeScaler
| reverberator
| stretchAudio
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.