Переключите аудио подачу
переключает подачу аудиовхода конкретным количеством полутонов, 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
)-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
, алгоритм пытается оценить спектральный конверт с помощью итеративной процедуры в 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.
audioDataAugmenter
| audioTimeScaler
| reverberator
| stretchAudio
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.