Сдвиг звукового шага
сдвигает шаг звукового ввода на заданное количество полутонов, 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",win, ... "OverlapLength",overlapLength, ... "LockPhase",lockPhase); sound(audioOut,fs)
Уменьшите шаг исходного звука на 8 полутонов и прослушайте результат. Укажите длину окна и перекрытия, использованную для вычисления STFT.
nsemitones =-8; lockPhase =
false; audioOut = shiftPitch(S,nsemitones, ... "Window",win, ... "OverlapLength",overlapLength, ... "LockPhase",lockPhase); sound(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 полутона и примените фазовую блокировку. Выслушайте результаты. Получающийся звук имеет «эффект chipmunk», который звучит неестественно.
nsemitones =4; lockPhase =
true; audioOut = shiftPitch(audioIn,nsemitones, ... "LockPhase",lockPhase); sound(audioOut,fs)
Чтобы повысить точность, установите PreserveFormants кому true. Использовать кепстральный порядок по умолчанию 30. Слушай результат.
cepstralOrder =30; audioOut = shiftPitch(audioIn,nsemitones, ... "LockPhase",lockPhase, ... "PreserveFormants",true, ... "CepstralOrder",cepstralOrder); sound(audioOut,fs)
audioIn - Входной сигналВходной сигнал, заданный как вектор столбца, матрица или массив 3-D. Как интерпретируется функция audioIn зависит от сложности audioIn:
Если audioIn является реальным, audioIn интерпретируется как сигнал временной области. В этом случае audioIn должен быть вектором столбца или матрицей. Столбцы интерпретируются как отдельные каналы.
Если audioIn является сложным, audioIn интерпретируется как сигнал частотной области. В этом случае audioIn должен быть массивом L-by-M-by-N, где L - длина БПФ, M - количество отдельных спектров, а N - количество каналов.
Типы данных: single | double
Поддержка комплексного номера: Да
nsemitones - Количество полутонов для сдвига звука наЧисло полутонов для сдвига звука на, указанное как действительный скаляр.
Диапазон nsemitones зависит от длины окна (numel(и длина перекрытия (Window)OverlapLength):
-12*log2(numel( ≤ Window)-OverlapLength)nsemitones ≤ -12*log2((numel(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' - Цепстральный порядок, используемый для консервации формантовЦепстральный порядок, используемый для консервации форманта, указанный как пара, разделенная запятыми, состоящая из 'CepstralOrder' и неотрицательное целое число.
Чтобы включить этот аргумент пары имя-значение, установите PreserveFormants кому true.
Типы данных: single | double
audioOut - Аудио со смещением по тангажуАудио со сдвигом основного тона, возвращаемое в виде вектора столбца или матрицы независимых каналов.
Чтобы применить смещение шага, shiftPitch изменяет временную шкалу звука с использованием фазового вокодера, а затем производит повторную выборку модифицированного звука. Алгоритм изменения шкалы времени основан на [1] и [2] и реализован как в stretchAudio.
После изменения масштаба времени, shiftPitch выполняет преобразование частоты дискретизации с использованием коэффициента интерполяции, равного длине транзитного участка анализа, и коэффициента прореживания, равного длине транзитного участка синтеза. Коэффициенты интерполяции и прореживания этапа повторной дискретизации выбирают следующим образом: analysisHopLength = numel(. Window)-OverlapLengthshiftPitch функция предполагает, что в октаве 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)
Максимальное количество пониженных полутонов: -12*log2(numel(Window)-OverlapLength)
Максимальное количество поднятых полутонов: -12*log2((numel(Window)-OverlapLength)/numel(Window))
Сдвиг основного тона может изменять спектральную огибающую сигнала со сдвигом основного тона. Чтобы уменьшить этот эффект, можно задать PreserveFormants кому true. Если PreserveFormants имеет значение trueалгоритм пытается оценить спектральную огибающую с использованием итеративной процедуры в кепстральной области, как описано в [3] и [4]. Как для исходного спектра X, так и для спектра Y, сдвинутого по тангажу, алгоритм оценивает спектральную огибающую следующим образом.
Для первой итерации EnvXa устанавливается значение X. Затем алгоритм повторяет эти два шага в цикле:
Lowpass фильтрует кепстральное представление EnvXa, чтобы получить новую оценку EnvXb. CepstralOrder параметр управляет полосой пропускания запроса.
Для обновления текущей наилучшего соответствия алгоритм принимает поэлементный максимум текущей оценки спектральной огибающей и предыдущей оценки спектральной огибающей:
EnvXb).

Цикл заканчивается, если максимальное число итераций (100) достигается, или если все ячейки оцененной логарифмической оболочки находятся в пределах заданного допуска исходного логарифмического спектра. Для допуска установлено значение log(10^(1/20)).
Наконец, алгоритм масштабирует спектр звукового сигнала, сдвинутого по тону, на отношение оцененных огибающих, по элементам:
EnvXbEnvYb).
[1] Дриджер, Джонатан и Майнард Мюллер. «Обзор изменения музыкальных сигналов в масштабе времени». Прикладные науки. Том 6, выпуск 2, 2016.
[2] Дриджер, Джонатан. «Алгоритмы изменения масштаба времени для музыкальных аудиосигналов». Магистерская диссертация. Саарский университет, Саарбрюккен, Германия, 2011 год.
[3] Аксель Робель и Ксавье Роде. «Эффективная оценка спектральной огибающей и ее применение для сдвига основного тона и сохранения огибающей». Международная конференция по цифровым звуковым эффектам, стр. 30-35. Мадрид, Испания, сентябрь 2005 года. hal-01161334
[4] С. Имаи и Я. Абэ. «Извлечение спектральной огибающей улучшенным кепстральным методом». Электрон. и Commun. в Японии. Том 62-A, выпуск 4, 1997, стр. 10-17.
Используя gpuArray(Панель инструментов параллельных вычислений) ввод с помощью shiftPitch функция рекомендуется только для графического процессора с вычислительной способностью 7.0 («Volta») или выше. Другие аппаратные средства могут не дать никаких преимуществ в производительности. Сведения о проверке вычислительных возможностей графического процессора см. в разделе ComputeCompability в выходных данных gpuDevice (Панель параллельных вычислений). Дополнительные сведения см. в разделе Поддержка графического процессора по выпуску (Панель инструментов параллельных вычислений).
Обзор использования графического процессора в MATLAB ® см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
audioDataAugmenter | audioTimeScaler | reverberator | stretchAudio
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.