2008-12-14 2 views
34

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

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

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

+0

PCM аудио: HTTP: //en.wikipedia .org/wiki/Pulse-code_modulation – some 2008-12-14 05:37:19

+0

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

ответ

95

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

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

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

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

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

Я представлю образцы кода в псевдокоде.

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

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

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

Чтобы ускорить воспроизведение аудио, выбросить образцы:

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, которая делает «предположение» о том, как заполнить дополнительное пространство, которое будет добавлено.

Анализ спектра и звуки Модификация с помощью быстрого преобразования Фурье

Используя методику, которая называется Fast Fourier transform (БПФ), звуковые данные в области амплитудно-времени может быть отображен в области частотно-временной, чтобы выяснить, частотные компоненты аудио. Это можно использовать для создания spectrum analyzers, который вы можете увидеть на своем любимом аудиоплеере.

Мало того, что, так как теперь у вас есть частотные компоненты звука, если изменить количество

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

Создание high-pass filter, что позволяет частоты выше определенной частоты может быть выполнена следующим образом:

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) 

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

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

Удачи вам!

4

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

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

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

3

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

Если вы находитесь рядом с библиотекой «Учебное пособие по компьютерной музыке» Кертиса Роудса, может быть полезно. В частности, глава 1 «Цифровые аудио-концепции». (Прошло много времени с тех пор, как я прочитал эту книгу).

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

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

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

The Scientist and Engineer's Guide to Digital Signal Processing Является бесплатным онлайн-учебником, который углубляется в стандартные темы DSP. Большая часть из них также относится к цифровому аудио.

1

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

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

Вот видео синтезатора ("Soundoid") я cо-сделал вспышку: http://www.youtube.com/watch?v=O-1hHiA7y4o

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