audioTimeScaler

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

Описание

The 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 (Окно) -OverlapLength). Столбцы матрицы интерпретируются как отдельные каналы.

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

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

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

расширить все

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

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

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

alpha = 1.5;
aTS = audioTimeScaler  (...
    'SpeedupFactor', альфа ,...
    'Window', выигрывайте ,...
    '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. The 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] Дриджер, Джонатан и Майнард Мюллер. A Review of Time-Scale Modification of Music Signals (неопр.) (недоступная ссылка). Прикладные науки. Том 6, Выпуск 2, 2016.

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

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

.
Введенный в R2019b