Когда я храню данные в WAV файле в массив байтов, что означают эти значения? Я читал, что они находятся в двухбайтовых представлениях, но что именно содержится в этих двухбайтовых значениях?
Что представляют собой байты в.wav файле?
Ответ 1
Вы услышите, что аудиосигналы представлены какой-то волной. Если вы когда-либо видели эти волновые диаграммы с строкой вверх и вниз, это в основном то, что внутри этих файлов. Взгляните на это изображение файла с http://en.wikipedia.org/wiki/Sampling_rate
Вы видите свою звуковую волну (серая линия). Текущее значение этой волны неоднократно измеряется и задается как число. Это числа в этих байтах. Есть две разные вещи, которые можно настроить следующим образом: количество измерений, которое вы принимаете в секунду (частота дискретизации, заданная в Гц, - сколько раз в секунду вы захватываете). Другая корректировка - как точно вы измеряете. В двухбайтовом случае вы берете два байта для одного измерения (обычно это значения от -32768 до 32767). Таким образом, с указанными здесь числами вы можете воссоздать оригинальную волну (конечно, ограниченное качество, но это всегда так, когда вы храните вещи в цифровом виде). И воссоздание оригинальной волны - это то, что ваш динамик пытается воспроизвести.
Есть еще кое-что, что вам нужно знать. Во-первых, поскольку это два байта, вам нужно знать порядок байтов (большой эндиан, маленький конец), чтобы правильно воссоздать числа. Во-вторых, вам нужно знать, сколько каналов у вас есть, и как они хранятся. Обычно у вас будет моно (один канал) или стерео (два), но возможно больше. Если у вас несколько каналов, вам нужно знать, как они хранятся. Часто вы чередовали бы их, это означает, что вы получаете по одному значению для каждого канала за каждый момент времени, а затем все значения для следующего момента времени.
Чтобы проиллюстрировать: если у вас есть данные из 8 байтов для двух каналов и 16-разрядного номера:
abcdefgh
Здесь a
и b
составляют первое 16-битное число, первое значение для канала 1, c
и d
будет первым номером для канала 2. e
и f
являются вторым значением канала 1, g
и h
вторым значением для канала 2. Вы бы не слышали много, потому что это не приблизилось бы ко второй информации...
Если вы возьмете вместе всю эту информацию, вы можете рассчитать скорость передачи битов, которую вы имеете, что количество бит информации генерируется рекордером в секунду. В нашем примере вы генерируете 2 байта на канал для каждого образца. С двумя каналами это будет 4 байта. Вам нужно около 44000 выборок в секунду, чтобы представлять звуки, которые обычно слышит человек. Таким образом, вы получите 176000 байт в секунду, что составляет 1408000 бит в секунду.
И, конечно же, это не 2-битные значения, а два значения по 2 байта, или у вас будет очень плохое качество.
Ответ 2
Первые 44 байта обычно являются стандартным заголовком RIFF, как описано здесь: http://tiny.systems/software/soundProgrammer/WavFormatDocs.pdf и здесь: http://www.topherlee.com/software/pcm-tut-wavformat.html
Созданные WAV файлы Apple/OSX/macOS/iOS могут добавить в заголовок добавление "FLLR" и, таким образом, увеличить размер исходного RIFF заголовка от 44 байт до 4 килобайт (возможно, для лучшего выравнивания блока или хранилища исходного файла Пример данных).
Остальное - очень частое 16-битное линейное PCM в подписанном 2-в-дополнении мало-endian формате, представляющем произвольно масштабированные отсчеты со скоростью 44100 Гц.
Ответ 3
Файл WAVE (.wav) содержит заголовок, который указывает информацию о форматировании данных аудиофайла. После заголовка находятся фактические исходные данные звука. Вы можете проверить их точный смысл ниже.
Positions Typical Value Description
1 - 4 "RIFF" Marks the file as a RIFF multimedia file.
Characters are each 1 byte long.
5 - 8 (integer) The overall file size in bytes (32-bit integer)
minus 8 bytes. Typically, you'd fill this in after
file creation is complete.
9 - 12 "WAVE" RIFF file format header. For our purposes, it
always equals "WAVE".
13-16 "fmt " Format sub-chunk marker. Includes trailing null.
17-20 16 Length of the rest of the format sub-chunk below.
21-22 1 Audio format code, a 2 byte (16 bit) integer.
1 = PCM (pulse code modulation).
23-24 2 Number of channels as a 2 byte (16 bit) integer.
1 = mono, 2 = stereo, etc.
25-28 44100 Sample rate as a 4 byte (32 bit) integer. Common
values are 44100 (CD), 48000 (DAT). Sample rate =
number of samples per second, or Hertz.
29-32 176400 (SampleRate * BitsPerSample * Channels) / 8
This is the Byte rate.
33-34 4 (BitsPerSample * Channels) / 8
1 = 8 bit mono, 2 = 8 bit stereo or 16 bit mono, 4
= 16 bit stereo.
35-36 16 Bits per sample.
37-40 "data" Data sub-chunk header. Marks the beginning of the
raw data section.
41-44 (integer) The number of bytes of the data section below this
point. Also equal to (#ofSamples * #ofChannels *
BitsPerSample) / 8
45+ The raw audio data.
Я скопировал все это из http://www.topherlee.com/software/pcm-tut-wavformat.html здесь
Ответ 4
Как указывали другие, есть метаданные в wav файле, но я думаю, что ваш вопрос может быть в частности, что означают байты (данных, а не метаданные)? Если это верно, байты представляют собой значение сигнала, который был записан.
Что это значит? Ну, если вы извлечете два байта (скажем), которые представляют каждый образец (предположим, моно запись, что означает только один канал звука), тогда у вас есть 16-битное значение. В WAV 16-разрядный (всегда?) Подписанный и мало-endian (AIFF, ответ Mac OS на WAV, кстати, является сторонником большого числа). Поэтому, если вы возьмете значение этого 16-битного образца и разделите его на 2 ^ 16 (или 2 ^ 15, я думаю, если он будет подписан данными), вы получите образец, который нормализуется в пределах диапазона -1 до 1. Сделайте это для всех образцов и нарисуйте их в зависимости от времени (и время определяется количеством отсчетов/секунды в записи, например, 44,1 кГц означает 44,1 отсчета/миллисекунда, поэтому первое значение выборки будет отображаться на t = 0, 44-е место при t = 1 мс и т.д.), и у вас есть сигнал, который примерно соответствует тому, что было первоначально записано.
Ответ 5
Звук двух бит звучит не очень хорошо :) Чаще всего они представляют примерные значения как 16-разрядные номера подписей, которые представляют собой звуковую форму, выбранную на частоте, например 44,1 кГц.
Ответ 6
Я предполагаю, что ваш вопрос "Что представляют байты в блоке данных .wav файла?" Дайте нам знать все систематически.
Прелюдия: допустим, мы воспроизводим синусоидальный сигнал 5 кГц с помощью какого-либо устройства и записываем его в файл с именем "sine.wav", и запись выполняется на одном канале (моно). Теперь вы уже знаете, что представляет заголовок в этом файле. Давайте рассмотрим некоторые важные определения:
- Выборка: выборка любого сигнала означает амплитуду этого сигнала в точке, где производится выборка.
- Частота выборки: многие такие образцы могут быть взяты в течение определенного интервала времени. Предположим, что мы берем 10 образцов нашей синусоидальной волны в течение 1 секунды. Каждый образец разнесен на 0,1 секунды. Таким образом, у нас есть 10 выборок в секунду, таким образом, частота дискретизации составляет 10 Гц. Байты с 25 по 28 в заголовке обозначают частоту дискретизации.
Теперь перейдем к ответу на ваш вопрос:
Практически невозможно записать всю синусоидальную волну в файл, потому что на синусоиде есть бесконечные точки. Вместо этого мы фиксируем частоту дискретизации и начинаем дискретизацию волны с этими интервалами и записываем амплитуды. (Частота дискретизации выбирается таким образом, чтобы сигнал можно было восстановить с минимальным искажением, используя выборки, которые мы собираемся взять. Искажение в восстановленном сигнале из-за недостаточного количества выборок называется "наложение".)
Чтобы избежать наложения, частота дискретизации выбирается так, чтобы она была более чем в два раза больше частоты нашей синусоидальной волны (5 кГц) (это называется "теоремой дискретизации", а частота, в два раза превышающая частоту, называется "частотой Найквиста"). Таким образом, мы решили использовать частоту дискретизации 12 кГц, что означает, что мы будем дискретизировать нашу синусоидальную волну 12000 раз в секунду.
Как только мы начнем запись, если мы запишем сигнал, который является синусоидой частоты 5 кГц, у нас будет 12000 * 5 выборок (значений). Мы берем эти 60000 значений и помещаем их в массив. Затем мы создаем правильный заголовок, чтобы отразить наши метаданные, а затем преобразуем эти образцы, которые мы отметили в десятичном виде, в их шестнадцатеричные эквиваленты. Эти значения затем записываются в байты данных наших файлов .wav.