Как некоторые отметили в комментариях, то, что вы хотите посмотреть, это 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)
Этот пример увеличивает нижнюю четверть частотных компонентов звука, что приводит к низким частотам, чтобы стать громче.
Существует немало вещей, которые можно сделать с образцами для управления аудио. Просто продолжайте экспериментировать! Это самый захватывающий способ узнать.
Удачи вам!
PCM аудио: HTTP: //en.wikipedia .org/wiki/Pulse-code_modulation – some 2008-12-14 05:37:19
В основном каждое 32-битное значение представляет уровень напряжения в указанное время.Поскольку частота выборки равна 44100 Гц, вы получаете 441000 32 бит в секунду на канал (* 2, поскольку у вас есть стерео) – some 2008-12-14 05:41:57