• Главная
  • Скачать
  • Курсовик РАБОТА С АУДИОФАЙЛОМ В ФОРМАТЕ WAV


    Предмет: Программирование. Добавлен: 05.12.2017. Год: 2015. Страниц: 22. Оригинальность по antiplagiat.ru: < 30%


    Введение……….3
    1. Описание структуры WAV файла………...………3
    2. Математическое представление задачи………..………5
    3. Описание используемых алгоритмов………7
    4. Блок – схемы используемых алгоритмов………9
    5. Результат работы программы………15
    Заключение………..17
    Список литературы……….17
    Приложение А……….18

    Работа с wav файлами - это непременный атрибут современной информационной жизни. Работа с WAV файлами связана с программами для воспроизведения звука, таких как Windows Media Player и других программ, доступных для вашей операционной системы. Эти файлы содержат любые звуки, такие как звуковые эффекты, музыка или произнесенные слова. Они были созданы и разработаны компанией IBM и Microsoft, но в отличие от MP3-и MP4, формат WAV не использует сжатие с потерями.
    Целью курсовой работы является ознакомление с типизированными файлами на примере формата wav и отработка навыка работы со структурами, методами обработки данных файла, считывание заголовка и данных исходного wav файла, определение параметров звукового файла и вывод их на экран.
    Также необходимо написать программу на языке С/C++, осуществляющую следующие действия:
    - реализация функции, объединяющей два wav файла в один, путем добавления отсчетов второго в конец первого, параметры BitRate, SamplesPerSec соответствуют первому файлу; поля nChannels и blockAlign для входных файлов должны быть одинаковы;
    - реализация метода генерации шума и треугольного сигнала по входным параметрам: протяженность сигнала в секундах, частота дискретизации, амплитуда сигнала в процентах от максимального уровня;
    - реализация метода увеличения частоты дискретизации звукового сигнала с использованием интерполяции;
    - реализация квантования входной последовательности по уровню сигнала.
    1. Описание структуры WAV файла
    Для большинства wav файлов может быть использована следующая структура заголовка:
    struct WAVEHEADER
    {
    char chunkId[4];
    unsignedlong chunkSize;
    char format[4];
    char subchunk1Id[4];
    unsignedlong subchunk1Size;
    unsignedshort wFormatTag;
    unsignedshort nChannels;
    unsignedlong SamplesPerSec;
    unsignedlong AvgBytesPerSec;
    unsignedshort blockAlign;
    unsignedshort BitsPerSample;
    charsubchunk2Id[4];
    unsignedlong subchunk2Size;
    };

    Поле chunkId[4] содержит информацию о формате файла для wav файла это RIFF (RIFF – Resource Interchange File Format, то есть контейнер для потоковых данных). По типу формата файла определяется смещение остальных полей и самих данных.
    Поле chunkSize содержит размер в байтах оставшейся части файла, то есть, за исключением полей chunkId[4] и chunkSize. Таким образом, общий размер файла равен chunkSize+8.
    Поле format[4] указывает на конкретный формат потоковых данных, так как формат RIFF может быть использован для хранения данных avi или rmi. Для wav файла значение этого поля равно “WAVE”.
    Поле subchunk1Id[4] представляет собой заголовок fmt-чанка, то есть той части заголовка, где описываются параметры wav файла.
    В поле subchunk1Size содержится размер подструктуры subchunk1, то есть 16 байт для формата PCM (Pulse Code Modulation).
    Поле wFormatTag определяет аудиоформат: значение 0 используется для неизвестного формата, значение 1 для формата PCM. На данный момент количество существующих форматов превышает 200.
    Поле nChannels определяет количество каналов. Чаще всего это Mono(1)или Stereo(2).
    Поле SamplesPerSec определяет частоту дискретизации в Гц, например 16000 Гц. Сэмпл – это блок звуковых данных, включающий оба канала.
    Поле AvgBytesPerSec или ByteRate определяет количество передаваемых байт в секунду воспроизведения.
    Поле blockAlign содержит размер сэмпла в байтах. Может принимать значения 1, 2, 4 и т.д.
    Поле BitsPerSample содержит размер сэмпла в битах.
    Поле subchunk2Id[4] обозначает начало чанка данных, то есть непосредственно отсчетов звукового сигнала. Содержит символы “data”.
    Поле subchunk2Size содержит размер области данных в байтах.
    Количество сэмплов в файле можно определить следующим образом subchunk2Size*8/Bits erSample.
    Использование данной структуры корректно для формата PCM, но для других форматов может привести к ошибкам, так как структура подзаголовков может отличаться. После заголовка WAVEHEADER следуют непосредственно чередующиеся отсчеты звукового сигнала: Sample[0],Sample[1], ample[2],Sample[3] и т. д.
    Для Mono звука Sample[0] содержит Сhannel0[0], так как в данном случае в сэмпле содержится один канал. Для Stereo звука Sample[0] содержит СhannelLeft[0] и СhannelRight[0], так как в данном случае в сэмпле содержится два канала.
    2. Математическое представление задачи
    Для реализации функции, объединяющую два wav файла в один, путем добавления отсчетов второго в конец первого, сначала необходимо пересчитать размер данных для нового файла. Вычисление размера области данных нового файла (header_head.subchun 2Size) выполняется по формуле (2.1), где header.subchunk2Size – размер области данных дописываемого файла. Вычисление общего размера текущего файла (header_head.chunkSi e) выполняется по формуле (2.2).

    header_head.subchunk Size += header.subchunk2Size (2.1)

    header_head.chunkSiz = sizeof(header_head.c unkSize)
    + header_head.subchunk Size (2.2)

    Для реализации треугольного сигнала, необходимо учитывать то, что треугольный сигнал может быть задан по формуле (2.3), где l – 2 в степени BitsPerSample (максимальное значение сэмпла).

    Data[i]=(i%(-l) * Amplitude)-Amplitude 2 (2.3)

    Сигнал шума формируется согласно формуле (2.4).

    data[i]=(2*((rand()/( double)RAND_MAX))-0.5 )*Period* mplitude*l (2.4)

    При интерполяции происходит перерасчёт размера текущего файла (header_head.chunkSi e) по формуле (2.5) и размера области данных файла (header_head.subchun 2Size) по формуле (2.6).

    header2.chunkSize+=h ader2.subchunk2Size (2.5)
    header2.subchunk2Siz *=2 (2.6)
    Для выполнения квантования необходимо сначала пересчитать количество передаваемых байт в секунду воспроизведения по формуле (2.7), где SamplesPerSec определяет частоту дискретизации в Гц, а BitsPerSample содержит размер сэмпла в битах.

    header6.AvgBytesPerS c=header6.SamplesPer ec*
    (header6.BitsPerSamp e/8) (2.7)

    Для нахождения коэффициента перевода применятся формула (2.8), где y – максимальное значение исходного сэмпла, а header6.BitsPerSampl – текущее.
    Koef=pow(2.0, y)/ pow(2.0, header6.BitsPerSampl ) (2.8)


    ...
    1. Фролов И. Г. Мультимедиа для Windows. СПб: Наука, 2011. 192 с.
    2. Мешков В.П. Работа с аудио/видео файлами. М.: Сокол, 2012. 354 с.
    3. ИНТУИТ: Работа с медиафайлами, URL studies/courses/10468 1075/lecture/16552?pa e=4
    4. Формат WAV-файлов, URL oldgr/courses/cg02b/a signs/hw-2/help/wavfm 2.htm


    Перейти к полному тексту работы