Что такое Байт Бит и как это работает не много о звуке?

1 Байт это 8 бит бит может принимать 1 или 0 (в курсе про вики). В 1 байт можно записать максимальное число 255 или FF в 16-ти ричной системе счисления. Вроде как все понятно но если подумать я даже не могу кратко и понятно описать проблему.
Сей час пытаюсь работать с изображениями и звуком на низком уровне (как раз по байтовое чтение) с форматами без сжатия (пока что).
Что я знаю о изображениях это RGB от 0 до 255 то есть выходит на каждый пиксель идет 3 байта, так ?
Что я знаю о звуке (тут не много темный лес для меня) есть колебания это ГЦ к примеру 10 то есть 10 колебаний за 1 с и есть разное так сказать качество звука 8-16 байт как я понимаю , возьмем 8 байт . То есть в 1 секунде звука при 10Гц получается 80 байт. Ну это как мне кажется. =)
То есть что бы перевести колебания в 10-ричную систему счисления надо разбить файл по 8 или 16 байт и как то вывести эти числа в консоль в дальнейшим построить из них осциллограмму.
В общем я запутался
Как понять какое качество звука ? То есть по сколько байт читать за раз.
Мы получили эти 8 или 16 байт и как их перевести в 10-ричную систему счисления ? То есть в Hex редакторе он отображает по байтно в 16-ричной системе 8 байт будут как FF FF FF FF FF FF FF FF это к примеру но как понять какое число записано сразу в 8 или 16 байтах ? Сей час залез посмотрел Целое (тип данных) вики и окончательно запутался. А не много ли 8 байт для записи звука =) походу все же в битах .
Как вывести эти данные в консоль ?
В общем где можно почитать про побитовый или байтовый способ работы с файлами . Где расскажут то что я хочу знать.
Фух написал полный бред заранее извиняюсь, но подсказать мне не кому. Поставьте мои мозги на место !
Принимается все от пинка под задницу в виде ссылки на гугл с набранным запросом =) и до oldschool книг.
P.s спасибо всем .
  • Вопрос задан
  • 2121 просмотр
Пригласить эксперта
Ответы на вопрос 5
usdglander
@usdglander
Yipee-ki-yay
У цифрового звука есть 2 параметра: Частота дискретизации и битрейт. При кодировании основная задача записать аналоговую кривую колебаний с помощью столбиков. Частота дискретизации указывает на ширину столбика (сколько столбиков в секунде), а битрейт - сколькими БИТАМИ кодируется высота столбика. Понятно что чет выше частота дискретизации, тем столбики уже, а чем больше битрейт, тем точнее можно указать высоту столбика. Поэтому при увеличении этих двух параметров дискретная кривая приближается к аналоговой.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Что я знаю о изображениях это RGB от 0 до 255 то есть выходит на каждый пиксель идет 3 байта, так ?

Нет. Закодировать можно и в 1 бит на пиксел (чёрно-белое), и в 32 бита на пиксел (RGBA), и в любом другом варианте, например R3G3B2 - три бита на красный, три на зелёный, два на синий. Кроме того, практически никто не хранит в файле RAW-изображение, его, как правило, сжимают (JPEG, PNG, GIF, и т.д.), после чего для получения пикселов необходимо использовать специальные алгоритмы декодирования.
Что я знаю о звуке (тут не много темный лес для меня) есть колебания это ГЦ к примеру 10 то есть 10 колебаний за 1 с и есть разное так сказать качество звука 8-16 байт как я понимаю , возьмем 8 байт

По теореме Котельникова для сигнала с максимальной частотой 22КГц (стандартное качество звука) необходима частота дискретизации не менее 44КГц. На один сэмпл, как правило используют 8 или 16 бит (не байт), при этом в файле может быть не одна дорожка. И, опять же, при записи в файл звук обычно сжимают (MP3, OGG, FLAC, и т.д.), соответственно для его воспроизведения тоже нужны специальные алгоритмы декодирования.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
По части звука недавно отвечал здесь, со ссылками и примерами: Работа со звуком С++ как?
Ответ написан
riky
@riky
Laravel
по поводу картинок это действует только для примитивных форматов типа bmp. там реально чтобы получить N пикселей достаточно прочитать 3*N байт. все остальные форматы графики (за редким исключением) сжимают изображение, очень часто даже с потерями (особенно jpeg).

маленький опыт чтобы проверить это. возьмите 2 картинки одинакового размера и сохраните их в разных форматах. в bmp размер будет одинаковый, во всех остальных - будет отличаться, порой очень сильно.
если бы каждый пиксель занимался ровно 3 байта или любое другое но фиксированное число байт - то размер картинок с одинаковым рзарешением должен быть одинаковым, тк он строго пропорционален количеству пикселей, но это в основном только у bmp.

со звуком аналог bmp это vaw. он также хранит информацию пропорционально времени. тут лучше открыть вики хотя бы и посомтреть как vaw хранит звук, что такое частота дискретизации. но записи одинаковые по времени будут иметь одинаковый размер.

bmp и vaw простые форматы удобные для простой потоковой записи и чтения. но используются крайне редко из-за большого размера, поэтому используются гораздо более сложные форматы, для того чтобы размер файла был меньше. но их довольно сложно читать, без специальных готовых функций для их чтения и преобразования в понятный набор 3 байт например.
Ответ написан
@mikluha
ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
Про изображение все примерно так. Про звук все не совсем так.
Как уже сказали выше, у цифрового звука в формате ИКМ (PCM) есть 2 основные характеристики: разрядность и частота дискретизации.
Разрядность встречается до 32 бит (бит а не байт!!! до 32 бит это до 4х байт). Например в CD - 16 бит (2 байта) на каждый сэмпл, в телефонии 8 бит (1 байт) на сэмпл, современную музыку кодируют в 24 бита а иногда и в 32. Чем выше разрядность тем больше градаций амплитуды может быть воспроизведено (амплитуда воспроизводится с большей точностью). Например в телефонии 8 бит (256 значений) а на CD 16 бит (65536 значений).

Частота дискретизации это сколько таких сэмплов в секунду захватывается (хранится/воспроизводится).
Чем выше частота дискретизации тем лучше сохраняются высокие частоты. Как известно максимальная частота, которая может быть передана равна половине частоты дискретизации. Для CD это 44100Гц (т.е. максимальная частота звука на на аудио диске может быть около 22кгц а в телефоне частота дискретизации всего 8000Гц и например, звучание скрипки, он передаст очень плохо, поскольку частоты выше 4кгц будут отрезаны).

Как вывести данные в консоль зависит от того, в каком контейнере эти данные лежат (формат файла). Кроме того, следует еще учесть, что 16/24/32 битные числа (а звуковые сэмплы это в любом случае числа) могут быть знаковые (положительные и отрицательные) или беззнаковые (только положительные), целые или дробные (с плавающей точкой, обычно это 32 битный звук такой) а так же какой порядок байт используется (так называемый endianness, например число 65536 в файле может храниться как 01 00 00 а может как 00 00 01).
Т.е. одни и те же байты в файле могут быть интерпретированы по разному в зависимости от этих параметров.

Если тебе надо читать данные из файла и отображать их - читай документацию по нужному тебе формату.
Отобразить в виде осциллограммы - дело не хитрое, берешь столько сэмплов из файла, сколько точек ты хочешь нарисовать по горизонтали и каждый сэмпл (число) будет обозначать отклонение по оси Y (ноль будет внизу или по середине в зависимости от "знаковости" формата). Учти, что файл может быть стерео, тогда сэмплы двух каналов будут чередоваться.
Однако для анализа звука осциллограммы редко используюся, гораздо нагляднее анализировать его спектр (для этого нужно сделать преобразование Фурье, гуглить по слову FFT).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы