Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

    }

 

/* Считываем данные – заголовок и дескриптор трека (рис. 12) */

    memset(data_buff, 0, 12);

    for(n = 0; n < 12; n += 2) {

           IN_P_W(a, 0x170);

           memcpy((void *)(data_buff + n), (void *)&a, 2);

    }

 

/* Отобразим размер данных TOC и номер первого и последнего трека */

    if (i == 1) {

           memcpy((void *)&a, (void *)(data_buff), 2);

           printf("TOC lenght - %d ", __swab16(a));

           printf("First: %d ", data_buff[2]);

           printf("Last: %d ", data_buff[3]);

           max_track_num = data_buff[3];

    }

 

/* Копируем дескриптор трека в структуру struct toc */

    memcpy((void *)t, (data_buff + 4), 8);

    t->lba = __swab32(t->lba);

 

/* Считываем дескриптор следующего трека. Если треков больше нет, считываем дескриптор Lead-Out области последней сессии. */

    i += 1;

    if(i == (max_track_num + 1)) i = 0xAA;

 

    t->next = read_toc();

    return t;

}

Просмотр содержимого TOC выполняет рекурсивная функция view_toc( ):

void view_toc(struct toc *t)

{

    if(t == NULL) return;

 

    if(t->trk_num == 0xAA) printf("lead out: ");

    else printf("track: %d ", t->trk_num);

    printf("lba: %u ", t->lba);

 

    view_toc(t->next);

}

Извлечь из сформированного списка дескриптор трека можно при помощи следующей функции:

struct toc_entry * get_toc_entry(int trk_num, struct toc *t)

{

    struct toc_entry *t_entry;

    int i = 1;

 

    for(;i < trk_num; i++) t = t->next;

    t_entry = (struct toc_entry *) ї

           malloc(sizeof(struct toc_entry));

    t_entry->start_lba = t->lba;

    t_entry->end_lba = t->next->lba;

 

    return t_entry;

}

Входные параметры функции – номер трека и указатель на начало списка с данными TOC. Результат сохраняется в структуре struct toc_entry следующего вида:

struct toc_entry {

    __u32 start_lba; // стартовый адрес трека

    __u32 end_lba; // конечный адрес трека

};

Полный листинг программы, выполняющей чтение TOC, приведен в файле RAW/read_toc.c.

Если скомпоновать вместе функции read_cd и read_toc, можно написать программу чтения треков с компакт-диска. В файле RAW/read_cdda_track.c находится листинг программы, которая считывает треки с Audio-CD и сохраняет их в файле track.cdr. Детально изучать этот листинг мы не будем, т.к. только что подробно рассмотрели его основные составляющие. Единственное замечание – в отличие от ранее рассмотренной функции read_cd при считывании сектора с аудиодиска соседние байты меняются местами. Это связано с порядком расположения аудиоданных в секторе:

for(i = 0; i < 2352; i += 2) {

    IN_P_W(a, 0x170);


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100