Задать вопрос
Ответы пользователя по тегу C++
  • Что такое Байт Бит и как это работает не много о звуке?

    @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).
    Ответ написан
    Комментировать