Переключите аудио тангаж
переключает тангаж аудиовхода конкретным количеством полутонов, 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. Используйте kbdwin с 512 точками с 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, фс)
Уменьшите тангаж исходного аудио на 8 полутонов и слушайте результат. Задайте окно и длину перекрытия, вы использовались для расчета STFT.
nsemitones =-8; lockPhase =
false; audioOut = shiftPitch (S, nsemitones, ... "Window", победите, ... "OverlapLength", overlapLength, ... "LockPhase", lockPhase); звук (audioOut, фс)
Читайте в звуковом файле и слушайте его.
[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, фс)
Чтобы увеличить точность, установите PreserveFormants к true. Используйте значение по умолчанию cepstral порядок 30. Слушайте результат.
cepstralOrder =30; audioOut = shiftPitch (audioIn, nsemitones, ... "LockPhase", lockPhase, ... "PreserveFormants"TRUE, ... "CepstralOrder", cepstralOrder); звук (audioOut, фс)
audioIn — Входной сигналВходной сигнал в виде вектор-столбца, матрицы или трехмерного массива. Как функция интерпретирует 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, размер (]. Число элементов в векторе должно также быть больше audioIn,1)OverlapLength.
Примечание
При использовании shiftPitch с входом частотного диапазона необходимо задать Window когда то же окно раньше преобразовывало audioIn к частотному диапазону.
Типы данных: single | double
'OverlapLength' — Количество выборок перекрывается между смежными окнамивокруг (0.75*numel (Window)) (значение по умолчанию) | скаляр в области значений [0, numel (Window))Количество выборок, перекрытых между смежными окнами в виде разделенной запятой пары, состоящей из 'OverlapLength' и целое число в области значений [0, numel(Window)).
Примечание
При использовании shiftPitch с входом частотного диапазона необходимо задать OverlapLength когда та же длина перекрытия раньше преобразовывала audioIn к представлению частоты времени.
Типы данных: single | double
'LockPhase' — Примените единичную блокировку фазыfalse (значение по умолчанию) | trueПримените единичную блокировку фазы в виде разделенной запятой пары, состоящей из 'LockPhase' и false или true.
Типы данных: логический
'PreserveFormants' — Сохраните формантыfalse (значение по умолчанию) | trueФорманты консервов в виде разделенной запятой пары, состоящей из 'PreserveFormants' и true или false. Сохранение форманты предпринято с помощью спектральной оценки конверта с кепстральным анализом.
Типы данных: логический
'CepstralOrder' — Порядок Cepstral используется для сохранения формантыПорядок Cepstral, используемый для сохранения форманты в виде разделенной запятой пары, состоящей из '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)
Количество Max полутонов понижено:-12*log2 (numel (Window)-OverlapLength)
Количество Max полутонов повысило:-12*log2 ((numel (Window)-OverlapLength)/numel (Window))
Сделайте подачу перемена может изменить спектральный конверт переключенного тангажом сигнала. Чтобы уменьшить этот эффект, можно установить PreserveFormants к true. Если PreserveFormants установлен в true, алгоритм пытается оценить спектральный конверт с помощью итеративной процедуры в cepstral области, как описано в [3] и [4]. И для исходного спектра, X, и для переключенного тангажом спектра, Y, алгоритм оценивает спектральный конверт можно следующим образом.
Для первой итерации EnvX установлен в X. Затем алгоритм повторяет эти два шага в цикле:
Lowpass фильтрует cepstral представление EnvX, чтобы получить новую оценку, EnvX b. CepstralOrder параметр управляет quefrency пропускной способностью.
Чтобы обновить текущую лучшую подгонку, алгоритм берет поэлементно максимум текущей спектральной оценки конверта и предыдущей спектральной оценки конверта:

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