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 раза его исходной скоростью с помощью периодического окна Hann с 1024 точками и перекрытия с 768 точками.

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Фактор ускорения в виде положительного действительного скаляра.

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

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

Область входного сигнала в виде "Time" или "Frequency".

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

Окно Analysis в виде вектора действительных чисел.

Примечание

При использовании 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.

Типы данных: логический

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

Синтаксис

Описание

пример

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

Входные параметры

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

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

  • Если InputDomain установлен в "Time", audioIn должен быть действительный N-by-1 вектор-столбец или N-by-C матрица. Количество строк, N, должно быть равно или меньше, чем длина транзитного участка (размер (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Сбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Чтобы минимизировать артефакты, вызванные работой с окнами, создайте окно Hann квадратного корня, способное к совершенной реконструкции. Используйте 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', победите, ...
    '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] Driedger, Джонатан и Майнард Мюллер. "Анализ модификации масштаба времени музыкальных сигналов". Прикладные науки. Издание 6, выпуск 2, 2016.

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

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

Смотрите также

| |

Введенный в R2019b