exponenta event banner

audioTimeScaler

Применить масштабирование времени к потоковому аудио

Описание

audioTimeScaler объект выполняет изменение шкалы времени звука (TSM) независимо по каждому входному каналу.

Для изменения шкалы времени потокового звука:

  1. Создать audioTimeScaler и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

aTS = audioTimeScaler создает объект, aTS, которая выполняет изменение шкалы звукового времени независимо по каждому входному каналу во времени.

aTS = audioTimeScaler(speedupFactor) устанавливает SpeedupFactor свойство для speedupFactor.

aTS = audioTimeScaler(___,'Name',Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Пример: aTS = audioTimeScaler(1.2,'Window',sqrt(hann(1024,'periodic')),'OverlapLength',768) создает объект, aTS, что увеличивает темп звука в 1,2 раза его первоначальной скорости с использованием периодического 1024-точечного окна Ханна и 768-точечного перекрытия.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Коэффициент ускорения, заданный как положительный действительный скаляр.

Настраиваемый: Да

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Область входного сигнала, указанная как "Time" или "Frequency".

Типы данных: char | string

Окно анализа, указанное как реальный вектор.

Примечание

При использовании audioTimeScaler при вводе в частотной области необходимо указать Window как то же окно, используемое для преобразования audioIn в частотную область.

Типы данных: single | double

Длина перекрытия соседних окон анализа, заданная как неотрицательное целое число.

Примечание

При использовании audioTimeScaler при вводе в частотной области необходимо указать OverlapLength как одинаковая длина перекрытия, используемая для преобразования audioIn к частотно-временному представлению.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Длина БПФ, заданная как положительное целое число. Значение по умолчанию, [], означает, что длина БПФ равна количеству строк во входном сигнале.

Зависимости

Чтобы включить это свойство, установите InputDomain кому 'Time'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить идентичную фазовую блокировку, указанную как true или false.

Типы данных: logical

Использование

Синтаксис

Описание

пример

audioOut = aTS(audioIn) применяет изменение шкалы времени к входу, audioInи возвращает выходные данные, масштабированные по времени, audioOut.

Входные аргументы

развернуть все

Входной звук, заданный как вектор столбца или матрица. Как audioTimeScaler интерпретирует audioIn зависит от свойства InputDomain.

  • Если InputDomain имеет значение "Time", audioIn должен быть вектором столбца вещественного N-by-1 или матрицей N-by-C. Число строк, N, должно быть равно или меньше длины транзитного участка (size(audioIn,1) <= numel(Window)-OverlapLength). Столбцы матрицы интерпретируются как отдельные каналы.

  • Если InputDomain имеет значение "Frequency", указать audioIn в виде вектора вещественного или комплексного NFFT-by-1 столбца или матрицы NFFT-by-C. Количество строк, NFFT, является количеством точек в вычислении DFT и устанавливается при первом вызове масштабатора звукового времени. NFFT должен быть больше или равен длине окна (size(audioIn,1) >= numel(Window)). Столбцы матрицы интерпретируются как отдельные каналы.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

развернуть все

Растянутый во времени звук, возвращаемый в виде вектора столбца или матрицы.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, укажите object™ System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Чтобы минимизировать артефакты, вызванные окном, создайте квадратное корневое окно Ганна, способное к идеальной реконструкции. Использовать iscola для проверки конструкции.

win = sqrt(hann(1024,'periodic'));
overlapLength = 896;
iscola(win,overlapLength)
ans = logical
   1

Создание audioTimeScaler с коэффициентом ускорения 1.5. Изменение значения alpha чтобы услышать влияние фактора ускорения.

alpha = 1.5;
aTS = audioTimeScaler( ...
    'SpeedupFactor',alpha, ...
    'Window',win, ...
    'OverlapLength',overlapLength);

Создать dsp.AudioFileReader объект для считывания кадров из аудиофайла. Длина кадров, вводимых в устройство масштабирования звукового времени, должна быть меньше или равна длине прыжка анализа, определенной в audioTimeScaler. Чтобы минимизировать буферизацию, задайте длину прыжка анализа для выборок на кадр устройства чтения файлов.

hopLength = numel(aTS.Window) - overlapLength;
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav', ...
    'SamplesPerFrame',hopLength);

Создание audioDeviceWriter для записи кадров на аудиоустройство. Используйте ту же частоту выборки, что и средство чтения файлов.

deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

В цикле аудиопотока прочитайте кадр файла, примените изменение шкалы времени, а затем запишите кадр в устройство.

while ~isDone(fileReader)
    audioIn = fileReader();
    audioOut = aTS(audioIn);
    deviceWriter(audioOut);
end

Рекомендуется деблокировать объекты после их завершения.

release(deviceWriter)
release(fileReader)
release(aTS)

Создайте окно, способное к идеальной реконструкции. Использовать iscola для проверки конструкции.

win = kbdwin(512);
overlapLength = 256;
iscola(win,overlapLength)
ans = logical
   1

Создание audioTimeScaler с коэффициентом ускорения 0.8. Набор InputDomain кому "Frequency" и задают длину окна и перекрытия, используемую для преобразования звука временной области в частотную область. Набор LockPhase кому true для повышения точности вывода в масштабе времени.

alpha = 0.8;
timeScaleModification = audioTimeScaler( ...
    "SpeedupFactor",alpha, ...
    "InputDomain","Frequency", ...
    "Window",win, ...
    "OverlapLength",overlapLength, ...
    "LockPhase",true);

Создать dsp.AudioFileReader объект для считывания кадров из аудиофайла. Создать dsp.STFT объект для выполнения кратковременного преобразования Фурье в потоковом аудио. Укажите то же окно и длину перекрытия, что и при создании audioTimeScaler. Создание audioDeviceWriter объект для записи кадров на аудиоустройство.

fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3','SamplesPerFrame',numel(win)-overlapLength);

shortTimeFourierTransform = dsp.STFT('Window',win,'OverlapLength',overlapLength,'FFTLength',numel(win));

deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

В цикле аудиопотока:

  1. Прочтите кадр из файла.

  2. Введите кадр в STFT. dsp.STFT объект выполняет буферизацию.

  3. Применить изменение шкалы времени.

  4. Запишите измененный звук на аудиоустройство.

while ~isDone(fileReader)
    x = fileReader();
    X = shortTimeFourierTransform(x);
    y = timeScaleModification(X);
    deviceWriter(y);
end

Рекомендуется деблокировать объекты после их завершения.

release(fileReader)
release(shortTimeFourierTransform)
release(timeScaleModification)
release(deviceWriter)

Алгоритмы

audioTimeScaler использует тот же алгоритм фазового вокодера, что и stretchAudio и основывается на описаниях в [1] и [2].

Ссылки

[1] Дриджер, Джонатан и Майнард Мюллер. «Обзор изменения музыкальных сигналов в масштабе времени». Прикладные науки. Том 6, выпуск 2, 2016.

[2] Дриджер, Джонатан. «Алгоритмы изменения масштаба времени для музыкальных аудиосигналов». Магистерская диссертация, Саарский университет, 2011 год.

Расширенные возможности

.
Представлен в R2019b