Как аудио представлено с числами в компьютерах?

Мне нравится думать о том, как все может быть и представлено числами. Например, простой текст представлен кодом как ASCII, и изображения представлены значениями RGB. Это самые простые способы представить текст и изображения.

Каков самый простой способ, которым аудио может быть представлено с числами? Я хочу изучить, как записать программы, которые работают с аудио и думали, что это будет хорошим способом запуститься. Я, может казаться, не нахожу хороших объяснений в Интернете, все же.

44
задан Ciro Santilli 新疆改造中心法轮功六四事件 18 August 2019 в 10:13
поделиться

7 ответов

Physically, as you probably know, audio is a vibration. Typically, we're talking about vibrations of air between approximitely 20Hz and 20,000Hz. That means the air is moving back and forth 20 to 20,000 times per second.

If you measure that vibration and convert it to an electrical signal (say, using a microphone), you'll get an electrical signal with the voltage varying in the same waveform as the sound. In our pure-tone hypothetical, that waveform will match that of the sine function.

Now, we have an analogue signal, the voltage. Still not digital. But, we know this voltage varies between (for example) -1V and +1V. We can, of course, attach a volt meter to the wires and read the voltage.

Arbitrarily, we'll change the scale on our volt meter. We'll multiple the volts by 32767. It now calls -1V -32767 and +1V 32767. Oh, and it'll round to the nearest integer.

Now, we hook our volt meter to a computer, and instruct the computer to read the meter 44,100 times per second. Add a second volt meter (for the other stereo channel), and we now have the data that goes on an audio CD.

This format is called stereo 44,100 Hz, 16-bit linear PCM. And it really is just a bunch of voltage measurements.

92
ответ дан 26 November 2019 в 21:46
поделиться
  • DOM - это стандартный, независимый от языка API для иерархических данных, таких как XML, который был стандартизирован W3C. Это богатый API с большим количеством функций. Он основан на объектах в том смысле, что каждый узел является объектом.

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

  • SimpleXML - это специфичный для PHP API, который также основан на объектах, но должен быть гораздо менее «кратким», чем DOM: простые задачи, такие как поиск значения узел или поиск его дочерних элементов занимают намного меньше кода. Его API не так богат, как DOM, но он по-прежнему включает в себя такие функции, как поиск XPath, и базовую возможность работы с документами с несколькими пространствами имен. А также, важно, что он по-прежнему сохраняет все функции вашего документа, такие как разделы XML CDATA и комментарии, даже если он не включает в себя функции для их манипулирования.

    SimpleXML очень хорош только для чтения: если все, что вы хотите сделать, это прочитать XML-документ и преобразовать его в другую форму, тогда это сэкономит вам много кода. Также неплохо, когда вы хотите сгенерировать документ или выполнить базовые манипуляции, такие как добавление или изменение дочерних элементов или атрибутов, но это может усложнить (но не сделать невозможным) много манипуляций с существующими документами. Например, нелегко добавить дочерний элемент между двумя другими; addChild вставляет только после других элементов. SimpleXML также не может выполнять преобразования XSLT. У него нет таких вещей, как «getElementsByTagName» или «getElementById», но если вы знаете XPath, вы все равно можете делать подобные вещи с SimpleXML.

    Объект SimpleXMLElement несколько «волшебен». Свойства, которые он предоставляет, если вы var_dump / printr / var_export не соответствуют его полному внутреннему представлению. Он предоставляет некоторые из своих дочерних элементов, как если бы они были свойствами, доступ к которым можно получить с помощью оператора ->, но при этом он сохраняет внутренний документ полностью, и вы можете делать такие вещи, как доступ к дочернему элементу, имя которого является зарезервированным словом с помощью [] оператор, как если бы это был ассоциативный массив.

Вам не нужно полностью фиксировать один или другой, потому что PHP реализует функции:

  • simplexml_import_dom (DOMNode)
  • dom_import_simplexml (SimpleXMLElement)

This полезно, если вы используете SimpleXML и вам нужно работать с кодом, который ожидает DOM-узел или наоборот.

PHP также предлагает третью библиотеку XML:

  • XML Parser (реализация SAX , независимого от языка интерфейса, но не упоминаемого этим именем в руководстве) является намного более низкая библиотека уровня, которая служит совсем другой цели. Он не строит объекты для вас. Это в основном просто облегчает написание вашего собственного синтаксического анализатора XML, потому что он выполняет работу по переходу на следующий токен и выясняет тип токена, например, какое имя тега и является ли он открывающим или закрывающим тегом, для вас. , Затем вы должны написать обратные вызовы, которые должны запускаться при каждом обнаружении токена. Все задачи, такие как представление документа в виде объектов / массивов в дереве, манипулирование документом и т. Д., Должны быть реализованы отдельно, поскольку все, что вы можете сделать с помощью синтаксического анализатора XML, - это написать анализатор низкого уровня.

    Функции XML Parser по-прежнему весьма полезны, если у вас есть определенные требования к памяти или скорости. С его помощью можно написать синтаксический анализатор, который может анализировать очень длинный XML-документ без одновременного хранения всего его содержимого в памяти. Кроме того, если вы не заинтересованы во всех данных и не хотите или не хотите, чтобы они помещались в дерево или набор объектов PHP, тогда это может быть быстрее. Например, если вы хотите отсканировать документ XHTML и найти все ссылки, а вам не нужна структура.

--------- 121 -------- 3613713- ---

Если вы решите пойти по пути сериализации в POCO (Простой старый объект CLR), то есть несколько инструментов, которые могут помочь вам сгенерировать ваши объекты.

  • Вы можете использовать xsd.exe , чтобы сгенерировать. cs-файл, основанный на вашем определении XML
  • В WCF REST Starter Kit Preview 2 появилась новая функция, которая называется Paste as Html. Эта функция действительно хороша и позволяет вам взять блок HTML, который находится в буфере обмена, а затем, когда вы вставляете его в файл cs, он автоматически преобразует XML в объект CLR для сериализации.
-------- -121 -------- 984699 ----

Звук может быть представлен цифровыми сэмплами. По сути, сэмплер (также называемый аналого-цифровым преобразователем) получает значение аудиосигнала каждые 1 / фс, где фс - частота сэмплирования. АЦП затем квантует сигнал, который является операцией округления. Таким образом, если ваш сигнал колеблется от 0 до 3 Вольт (полный диапазон шкалы), то выборка будет округлена до, например, 16-разрядного числа. В этом примере 16-битное число записывается один раз каждые 1 / фс /

. Например, большинство WAV / MP3 сэмплируют звуковой сигнал с частотой 44 кГц. Я не знаю, сколько деталей вы хотите, но есть такая вещь, называемая «Частота дискретизации Найквиста», которая говорит, что частота дискретизации должна быть как минимум вдвое больше желаемой частоты. Таким образом, в вашем WAV / MP3-файле вы в лучшем случае сможете услышать частоту до 22 кГц.

В этой области можно найти много деталей. Простейшей формой, безусловно, будет формат WAV. Это несжатый звук. Форматы, такие как mp3 и ogg, должны быть распакованы, прежде чем вы сможете работать с ними.

Таким образом, в вашем WAV / MP3-файле вы в лучшем случае сможете услышать частоту до 22 кГц.

В этой области можно найти много деталей. Простейшей формой, безусловно, будет формат WAV. Это несжатый звук. Форматы, такие как mp3 и ogg, должны быть распакованы, прежде чем вы сможете работать с ними.

Таким образом, в вашем WAV / MP3-файле вы в лучшем случае сможете услышать частоту до 22 кГц.

В этой области можно найти много деталей. Простейшей формой, безусловно, будет формат WAV. Это несжатый звук. Форматы, такие как mp3 и ogg, должны быть распакованы, прежде чем вы сможете работать с ними.

8
ответ дан devin 26 November 2019 в 21:46
поделиться

Я думаю, что выборки формы волны на определенной частоте выборки были бы самым основным представлением.

3
ответ дан Jimmy 26 November 2019 в 21:46
поделиться

Вы когда-нибудь смотрели на форму волны крупным планом? Ось Y просто представлена ​​как целое число, обычно в 16 битах.

2
ответ дан Chris 26 November 2019 в 21:46
поделиться

Посмотрите на такие вещи, как аналого-цифровое преобразование. Это должно начать вас. Эти устройства могут преобразовывать аудиосигнал (синусоиды) в цифровые представления. Итак, 16-разрядный АЦП мог бы представлять синус от -32768 до 32768. Это с фиксированной запятой. Это также возможно сделать с плавающей запятой (хотя это не рекомендуется из соображений производительности, но может быть необходимо из соображений диапазона). Обратное (цифроаналоговое преобразование) происходит, когда мы конвертируем числа в синусоидальные волны. Это обрабатывается чем-то, что называется ЦАП.

2
ответ дан sybreon 26 November 2019 в 21:46
поделиться

Я думаю, что хороший способ начать играть со звуком был бы с Processing и Minim . Эта программа будет извлекать частотный спектр звука из вашего микрофона!

import ddf.minim.*;
import ddf.minim.analysis.*;

AudioInput in;
FFT fft;

void setup()
{
  size(1024, 600);
  noSmooth();
  Minim.start(this);
  in = Minim.getLineIn();
  fft = new FFT(in.bufferSize(), in.sampleRate());
}

void draw()
{
  background(0);
  fft.forward(in.mix);
  stroke(255);
  for(int i = 0; i < fft.specSize(); i++)
    line(i*2+1, height, i*2+1, height - fft.getBand(i)*10);
}

void stop()
{
  in.close();
  Minim.stop();
  super.stop();
}
3
ответ дан Nathan 26 November 2019 в 21:46
поделиться

The simplest way to represent sound as numbers is PCM (Pulse Code Modulation). This means that the amplitude of the sound is recorded at a set frequency (each amplitude value is called a sample). CD quality sound for example is 16 bit samples (in stereo) at the frequency 44100 Hz.

A sample can be represented as an integer number (usually 8, 12, 16, 24 or 32 bits) or a floating point number (16 bit float or 32 bit double). The number can either be signed or unsigned.

For 16 bit signed samples the value 0 would be in the middle, and -32768 and 32767 would be the maximum amplitues. For 16 bit unsigned samples the value 32768 would be in the middle, and 0 and 65535 would be the maximum amplitudes.

For floating point samples the usual format is that 0 is in the middle, and -1.0 and 1.0 are the maximum amplitudes.

The PCM data can then be compressed, for example using MP3.

4
ответ дан 26 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

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