Начало работы с программным [закрытым] аудио

Предупреждение: недопустимое смещение строки 'XXX'

Это происходит, когда вы пытаетесь получить доступ к элементу массива с синтаксисом с квадратной скобкой, но вы делаете это по строке, а не по массиву, поэтому операция явно не имеет смысла .

Пример:

$var = "test";
echo $var["a_key"];

Если вы считаете, что переменная должна быть массивом, см., где она появляется и исправить там проблему.

34
задан fenomas 27 April 2018 в 04:02
поделиться

3 ответа

Как некоторые указали в комментариях, что Вы хотите изучить, аудио PCM .

, Короче говоря звук является волной, которая перемещается через воздух. Для получения того звука мы используем микрофон , который содержит мембрану, которая будет вибрировать, поскольку звуковые волны поражают его. Эта вибрация переводится в электрический сигнал, куда напряжение идет вверх и вниз. Это изменение в напряжении тогда изменяется в цифровой сигнал аналого-цифровой преобразователь (ADC) путем выборки определенного числа времен секунда (" частота дискретизации " - 44 кГц или 44 100 образцов в секунду) и, в текущем случае, сохранило как аудиоданные импульсно-кодового модулируемого (PCM).

А динамик работы в противоположном; сигнал икм преобразовывается в аналог цифро-аналоговый преобразователь (DAC), тогда аналоговый сигнал переходит к динамику, где это будет вибрировать мембрана, которая производит колебания в воздухе, который приводит к звуку.

Аудио Управления

существует многие библиотеки там для многих языков, с которыми можно управлять аудио, однако Вы отметили этот вопрос как "агностика языка", я упомяну несколько простых путей (поскольку это - все, что я знаю!), что Вы будете в состоянии управлять аудио на своем предпочтительном языке.

я представлю примеры кода в псевдокоде.

псевдокод будет иметь каждый аудиосэмпл, имеют амплитуду в диапазоне-1 к 1. Это будет зависеть от типа данных, который Вы используете для хранения каждого образца. (Я не имел дело с 32-разрядным float с прежде, таким образом, это может отличаться.)

Усиление

для усиления аудио, (поэтому, увеличивая объем звука) Вы захотите сделать вибрацию динамиков, чтобы быть больше, таким образом, величина звуковой волны будет увеличена.

, Чтобы заставить тот динамик переместиться больше, необходимо будет увеличить стоимость каждого образца:

original_samples = [0, 0.5, 0, -0.5, 0]

def amplify(samples):
    foreach s in samples:
        s = s * 2

amplified_samples = amplify(original_samples)

// result: amplified_samples == [0, 1, 0, -1, 0]

получающиеся образцы теперь усилены 2, и на воспроизведении, это должно звучать намного громче, чем это сделало прежде.

Тишина

, Когда нет никаких колебаний, нет никакого звука. Тишина может быть достигнута путем отбрасывания каждого образца к 0, или к любому определенному значению, но не имеет никакого изменения в амплитуде между образцами:

original_samples = [0, 0.5, 0, -0.5, 0]

def silence(samples):
    foreach s in samples:
        s = 0

silent_samples = silence(original_samples)

// result: silent_samples == [0, 0, 0, 0, 0]

Воспроизведение вышеупомянутого не должно приводить ни к какому звуку, поскольку мембрана на динамике не перемещается вообще, из-за отсутствия изменения в амплитуде в образцах.

Скорость Вверх и вниз

Ускоряющиеся вещи вверх и вниз могут быть достигнуты двумя способами: (1) изменение частоты дискретизации воспроизведения или (2) изменение самих образцов.

Изменение частоты дискретизации воспроизведения от 44 100 Гц до 22 050 Гц уменьшит скорость воспроизведения на 2. Это сделает звук медленнее и понизится в тоне. Идя из источника на 22 кГц и воспроизводящий на уровне 44 кГц, звук будет очень быстрым и высоким как щебетание птиц.

Изменение самих образцов (и хранение постоянной частоты дискретизации воспроизведения) означает, что образцы любой (a) будьте выведены или (b) включен.

Для ускорения воспроизведение аудио выведите образцы:

original_samples = [0, 0.1, 0.2, 0.3, 0.4, 0.5]

def faster(samples):
    new_samples = []
    for i = 0 to samples.length:
        if i is even:
            new_samples.add(samples[i])
    return new_samples

faster_samples = faster(original_samples)

// result: silent_samples == [0, 0.2, 0.4]

результат вышеупомянутой программы состоит в том, что аудио убыстрится фактором 2, подобный воспроизведению аудио, которое выбрало на уровне 22 кГц на уровне 44 кГц.

Для замедления воспроизведение аудио добавьте несколько образцов:

original_samples = [0, 0.1, 0.2, 0.3]

def slower(samples):
    new_samples = []
    for i = 0 to samples.length:
        new_samples.add(samples[i])
        new_samples.add(interpolate(s[i], s[i + 1]))
    return new_samples

slower_samples = slower(original_samples)

// result: silent_samples == [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3]

Здесь, дополнительные образцы были добавлены, таким образом, замедлив воспроизведение. Здесь, мы имеем interpolation функция, которая высказывает "предположение" относительно того, как заполнить то дополнительное пространство так очень быть добавленной.

Спектральный анализ и Модификация Звуков FFT

Используя технику, названную Быстрое преобразование Фурье (FFT), звуковые данные в амплитудно-разовом домене могут быть отображены на разовом частотой домене для обнаружения частотных компонентов аудио. Это может использоваться для создания эти анализаторы спектра , что Вы могли бы видеть на своем любимом аудиоплеере.

Не только, что, так как теперь у Вас есть частотные компоненты аудио при изменении суммы [1 147]

, Если Вы хотите к сокращению определенные частоты, можно использовать FFT, чтобы преобразовать звуковые данные в разовый частотой домен и обнулить частотные компоненты, которые не желаемы. Это называют фильтрация .

Создание фильтр высоких частот , который позволяет частоты выше определенной частоты, может быть выполнен как это:

data = fft(orignal_samples)

for i = (data.length / 2) to data.length:
    data[i] = 0

new_samples = inverse_fft(data)

В вышеупомянутом примере, все частоты по промежуточной метке являются сокращением. Так, если аудио могло бы произвести 22 кГц как максимальную частоту, любая частота выше 11 кГц будет отключена. (Для аудио, воспроизведенного на уровне 44 кГц, максимальная теоретическая частота, которая может быть произведена, составляет 22 кГц. См. Nyquist†“Шенноновская теорема отсчетов .)

, Если Вы хотите сделать что-то, любят, увеличивают низкочастотный диапазон (подобный эффекту подъема низких частот), берут более низкий уровень FFT-преобразованных данных и увеличивают его величину:

data = fft(orignal_samples)

for i = 0 to (data.length / 4):
    increase(data[i])

new_samples = inverse_fft(data)

Этот пример увеличивает более низкую четверть частотных компонентов аудио, ведя к низким частотам для становления громче.

<час>

существует довольно много вещей, которые могут быть сделаны к образцам для управления аудио. Просто разрешение и эксперимент! Это - самый захватывающий способ учиться.

Удачи!

97
ответ дан Bleeding Fingers 27 November 2019 в 16:06
поделиться

Понять, что те массивы плаваний на 32 бита представляют Вас, должно считать хорошее введение в Цифровое аудио.

, Если Вы около библиотеки 'The Computer Music Tutorial' Дорогами Curtis, может быть полезным. Конкретно глава 'Понятия Цифрового аудио'. (Это было долгое время, так как я прочитал эту книгу хотя).

, Как только у Вас есть понимание цифрового аудио, существует много способов управлять им. Когда Вы готовы, эти ссылки могут помочь.

дес. ложка + форум Разработки плагинов в Аудио KVR является одним местом для задавания вопросов. Сообщения здесь обычно разделяются между общим аудио DSP и темами плагина VST.

MusicDsp имеет много фрагментов кода.

Ученый и Руководство Инженера по Обработке цифровых сигналов Являются бесплатным онлайн учебником, который входит в глубину по стандартным темам DSP. Большая часть которого также относится к цифровому аудио.

3
ответ дан Shannon 27 November 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: