Подтвердить что ты не робот

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

Я ищу ресурсы, ссылки и т.д., чтобы помочь начать работу программно со звуком.

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

Кто-нибудь может рекомендовать какие-либо сайты/учебные пособия/ссылки, чтобы помочь найти такие вещи?

4b9b3361

Ответ 1

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

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

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

Манипуляция аудио

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

Я покажу примеры кода в псевдокоде.

Псевдокод будет иметь каждый образец звука с амплитудой в диапазоне от -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, и при воспроизведении они должны звучать намного громче, чем раньше.

Silence

Когда вибрации отсутствуют, звука нет. Молчание может быть достигнуто путем сброса каждого образца на 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) изменение самих образцов.

Изменение частоты дискретизации воспроизведения с 44100 Гц до 22050 Гц уменьшит скорость воспроизведения на 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), звуковые данные в области амплитудно-временной области могут быть отображены на частоту домена, чтобы узнать частотные составляющие аудио. Это можно использовать для создания анализаторов спектра которые вы можете увидеть на своем любимом аудиоплеере.

Не только это, так как теперь у вас есть частотные составляющие аудио, если вы измените количество

Если вы хотите отключить определенные частоты, вы можете использовать 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 кГц. См. теорема выборки Найквиста-Шеннона).

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

data = fft(orignal_samples)

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

new_samples = inverse_fft(data)

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


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

Удачи!

Ответ 2

Похоже, вы хотите узнать больше о PCM audio

В основном каждое 32-битное значение представляет уровень напряжения в указанное время. Поскольку частота выборки равна 44100 Гц, вы получаете 441000 32 бит в секунду на канал (* 2, поскольку у вас есть стерео)

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

Ответ 3

Чтобы понять, что представляют собой массивы из 32-битных поплавков, вам нужно прочитать хорошее введение в Digital Audio.

Если вы находитесь рядом с библиотекой "Учебное пособие по компьютерной музыке" Curtis Roads, может быть полезно. В частности, глава 1 "Цифровые аудио-концепции". (Я давно не читал эту книгу).

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

Форум Dsp + Plugin Development на KVR Audio - это одно из вопросов, которое задают вопросы. Сообщения здесь, как правило, разделены между общими темами DSP и VST.

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

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

Ответ 4

Недавно я опубликовал аналогичный вопрос: хорошие аудиоуроки dsp.

Золотая ссылка, безусловно, The Audio EQ Cookbook, если вы хотите написать и отсортировать EQ, но в более общем плане архив musicdsp.org - лучший ресурс, который я нашел для кодирования аудио DSP.

Здесь видео из синтезатора ( "Soundoid" ), соавтором которого я был в Flash: http://www.youtube.com/watch?v=O-1hHiA7y4o

И вы можете играть здесь: http://www.zachernuk.com/2011/03/28/soundoid-audio-synthesizer-v0-5/