Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК МПСС.doc
Скачиваний:
38
Добавлен:
09.11.2019
Размер:
11 Mб
Скачать

2. Работа с файлами по средствам функций языка с

Необходимо запустить ИСР CCS в режиме симуляции. Создать новый проект под именем «exp_2» в папке «laba_2».

Теперь нужно создать и добавить к проекту исходный код программы, который находится в файле «main.c» (листинг 2.1). Суть исходного кода состоит в том, что входной файл «inStereo.wav» (необходимо создать папку «Data» и скопировать этот файл в нее) открывается для чтения, а в выходные файлы «outLeftCh.wav» и «outRightCh.wav», будет записан звуковой моно сигнал, полученный разложением входного файла на левый и правый канал.

Листинг 2.1.

#include <stdio.h>

#include "fiel_wav.h"

void main()

{

FILE *inFile; // File pointer of input signal

FILE *outLeftFile; // File pointer of left channel output signal

FILE *outRightFile; // File pointer of right channel output signal

short x[4];

char wavHd[44];

inFile = fopen("..\\data\\inStereo.wav", "rb");

if (inFile == NULL)

{

printf("Can't open inStereo.wav");

exit(0);

}

outLeftFile = fopen("..\\data\\outLeftCh.wav", "wb");

outRightFile = fopen("..\\data\\outRightCh.wav", "wb");

// Skip input wav file header

fread(wavHd, sizeof(char), 44, inFile);

// Add wav header to left and right channel output files

fwrite(wavHeader, sizeof(char), 44, outLeftFile);

fwrite(wavHeader, sizeof(char), 44, outRightFile);

// Read stereo input and write to left/right channels

while( (fread(x, sizeof(char), 4, inFile) == 4) )

{

fwrite(&x[0], sizeof(char), 2, outLeftFile);

fwrite(&x[2], sizeof(char), 2, outRightFile);

}

fclose(inFile);

fclose(outLeftFile);

fclose(outRightFile);

}

Перед тем как записывать данные в wav файл, в него нужно записать заголовок, состоящий из 44 байт, этот заголовок по своей цели аналогичен заголовку подключаемого файла через точку зондирования, и содержит основную информацию о «теле» файла. Описание wav заголовка приведено в таблице 2.1

Таблица 2.1.

Номера байт

Описание

12 байтный заголовок RIFF файла

0 - 3

Коды символов 'R' 'I' 'F' 'F' в ASCII.

4 - 7

Длина файла минус первые 8 байт заголовка RIFF (4 байта для слова "WAVE" + 24 байтный заголовок, описывающий формат записанных данных + 8 байт для блока, описывающего данные + актуальный размер блока данных)

8 - 11

Коды символов 'W' 'A' 'V' 'E' в ASCII.

24 байтный заголовок, описывающий формат записанных данных

0 - 3

Коды символов 'f' 'm' 't' ' ' в ASCII (последний пробел).

4 - 7

Длина блока, описывающего формат записанных данных (всегда 16).

8 - 9

Заполнение файла. Всегда 1.

10- 11

Число каналов. 1 - моно, 2 - стерео.

12- 15

Частота дискретизации

16- 19

Число байт в секунду.

20- 21

Байт в образце (sample). 1 для 8 бит моно, 2 для 8 бит стерео или 16 бит моно, 4 для 16 бит стерео.

22- 23

Количество бит которыми кодируется при оцифровки сигнала.

Блок данных

0 - 3

Коды символов 'd' 'a' 't' 'a' в ASCII.

4 - 7

Длина данных в байтах.

Заголовок файлов «outLeftCh.wav» и «outRightCh.wav» описывается в заголовочном файле «fiel_wav.h» и представлен в листинге 2.2. Файл «fiel_wav.h» должен находится в одной директории с прокутом.

Листинг 2.2.

// This wav file header is pre-calculated

// It can only be used for this experiment

short wavHeader[44]={

0x52, 0x49, 0x46, 0x46, // RIFF

0x2E, 0x8D, 0x01, 0x00, // 101678 (36 bytes + 101642 bytes data)

0x57, 0x41, 0x56, 0x45, // WAVE

0x66, 0x6D, 0x74, 0x20, // Formatted

0x10, 0x00, 0x00, 0x00, // PCM audio

0x01, 0x00, 0x01, 0x00, // Linear PCM, 1-channel

0x40, 0x1F, 0x00, 0x00, // 8 kHz sampling

0x80, 0x3E, 0x00, 0x00, // Byte rate = 16000

0x02, 0x00, 0x10, 0x00, // Block align = 2, 16-bit/sample

0x64, 0x61, 0x74, 0x61, // Data

0x0A, 0x8D, 0x01, 0x00}; // 101642 data bytes

Следующим шагом нужно подключить к проекту командный файл «lnk.cmd» из первой лабораторной работы (никаких изменений вносить не требуется).

После того как файлы «main.c», «lnk.cmd» и «fiel_wav.h» добавлены к проекту, необходимо, добавить к проекту библиотеку «rts55.lib», находится: С:\CCStudio_v3.1\C5500\cgtools\lib\.

После всех действий проект компилируется и запускается на выполнения. Работа программы будет продолжаться некоторое время, о завершении работы будет свидетельствовать изменение надписи «ANIMATING» в нижнем левом углу на ту, что показана на рисунке 2.1

Рисунок 2.1 – Завершение выполнения программы.