Документация Python неофициальный перевод
Содержание страницы

39.3. cd – доступ к CD-ROM на системах SGIcd – CD-ROM access on SGI systems

Устарело с версии 2.6: Модуль cd удалён в Python 3.

Этот модуль предоставляет интерфейс к библиотеке CD от Silicon Graphics. Он доступен только на системах Silicon Graphics.

Библиотека работает следующим образом. Программа открывает устройство CD-ROM с помощью open() и создаёт синтаксический анализатор для разбора данных с CD с помощью createparser(). Объект, возвращаемый open(), можно использовать для чтения данных с CD, а также для получения информации о состоянии устройства CD-ROM и получения информации о CD, например, оглавления. Данные с CD передаются анализатору, который разбирает фреймы и вызывает все ранее добавленные колбэк-функции.

Аудио CD делится на дорожки или программы (термины используются как синонимы). Дорожки можно подразделять на индексы. Аудио CD содержит оглавление, в котором указаны начала дорожек на CD. Индекс 0 – это обычно пауза перед началом дорожки. Начало дорожки, указанное в оглавлении, обычно является началом индекса 1.

Позиции на CD могут быть представлены двумя способами: номер фрейма или кортеж из трёх значений: минуты, секунды и фреймы. Большинство функций используют второе представление. Позиции могут быть как относительно начала CD, так и относительно начала дорожки.

Модуль cd определяет следующие функции и константы:

cd.createparser()

Создаёт и возвращает непрозрачный объект синтаксического анализатора. Методы объекта анализатора описаны ниже.

cd.msftoframe(minutes, seconds, frames)

Преобразует тройку (minutes, seconds, frames), представляющую время в абсолютном временном коде, в соответствующий номер фрейма CD.

cd.open([device[, mode]])

Открывает устройство CD-ROM. Возвращаемое значение – непрозрачный объект проигрывателя; методы объекта проигрывателя описаны ниже. Устройство – это имя файла SCSI-устройства, например '/dev/scsi/sc0d4l0' или None. Если оно опущено или равно None, производится опрос аппаратной конфигурации для поиска привода CD-ROM. Параметр режим, если не опущен, должен быть строкой 'r'.

Модуль определяет следующие переменные:

exception cd.error

Исключение, возбуждаемое при различных ошибках.

cd.DATASIZE

Размер одного фрейма аудиоданных. Это размер аудиоданных, передаваемых колбэку типа audio.

cd.BLOCKSIZE

Размер одного неинтерпретированного фрейма аудиоданных.

Следующие переменные – это состояния, возвращаемые getstatus():

cd.READY

Привод готов к работе, загружен аудио CD.

cd.NODISC

В приводе нет загруженного CD.

cd.CDROM

В привод загружен CD-ROM. Последующие операции воспроизведения или чтения будут возвращать ошибки ввода-вывода.

cd.ERROR

Произошла ошибка при попытке чтения диска или его оглавления.

cd.PLAYING

Привод находится в режиме CD-плеера, воспроизводя аудио CD через его аудиоразъёмы.

cd.PAUSED

Привод находится в режиме CD-плеера с приостановленным воспроизведением.

cd.STILL

Эквивалент PAUSED на старых (не 3301) моделях приводов CD-ROM Toshiba. Такие приводы никогда не поставлялись SGI.

cd.audio
cd.pnum
cd.index
cd.ptime
cd.atime
cd.catalog
cd.ident
cd.control

Целочисленные константы, описывающие различные типы колбэков синтаксического анализатора, которые можно установить с помощью метода addcallback() объектов синтаксического анализатора CD (см. ниже).

39.3.1. Объекты проигрывателяPlayer Objects

Объекты проигрывателя (возвращаемые open()) имеют следующие методы:

CD player.allowremoval()

Разблокирует кнопку извлечения на приводе CD-ROM, позволяя пользователю извлечь кадди при желании.

CD player.bestreadsize()

Возвращает наилучшее значение для использования в качестве параметра num_frames метода readda(). Наилучшим считается значение, обеспечивающее непрерывный поток данных с привода CD-ROM.

CD player.close()

Освобождает ресурсы, связанные с объектом проигрывателя. После вызова close() методы объекта больше не следует использовать.

CD player.eject()

Извлекает кадди из привода CD-ROM.

CD player.getstatus()

Возвращает информацию о текущем состоянии привода CD-ROM. Возвращаемая информация представляет собой кортеж со следующими значениями: state, track, rtime, atime, ttime, first, last, scsi_audio, cur_block. rtime – это время относительно начала текущей дорожки; atime – это время относительно начала диска; ttime – это общее время на диске. Для получения дополнительной информации о значении этих полей см. man-страницу CDgetstatus(3dm). Значение state – одно из следующих: ERROR, NODISC, READY, PLAYING, PAUSED, STILL или CDROM.

CD player.gettrackinfo(track)

Возвращает информацию о заданном треке. Возвращаемая информация представляет собой кортеж из двух элементов: время начала трека и его длительность.

CD player.msftoblock(min, sec, frame)

Преобразует тройку (минуты, секунды, кадры), представляющую время в абсолютном временном коде, в соответствующий номер логического блока для указанного привода CD-ROM. Для сравнения времени следует использовать msftoframe(), а не msftoblock(). Номер логического блока отличается от номера кадра на смещение, необходимое для некоторых приводов CD-ROM.

CD player.play(start, play)

Начинает воспроизведение аудиодиска в приводе CD-ROM с заданного трека. Аудиовыход появляется на разъёмах для наушников и аудиоразъёмах привода CD-ROM (если они имеются). Воспроизведение останавливается в конце диска. начало – номер трека, с которого начать воспроизведение CD; если воспроизведение равно 0, CD переводится в начальное состояние паузы. Затем метод togglepause() можно использовать для начала воспроизведения.

CD player.playabs(minutes, seconds, frames, play)

Аналогично play(), но начальная позиция задаётся в минутах, секундах и кадрах, а не номером трека.

CD player.playtrack(start, play)

Аналогично play(), но воспроизведение останавливается в конце трека.

CD player.playtrackabs(track, minutes, seconds, frames, play)

Аналогично play(), но воспроизведение начинается в заданное абсолютное время и заканчивается в конце указанного трека.

CD player.preventremoval()

Блокирует кнопку извлечения на приводе CD-ROM, предотвращая произвольное извлечение каретки.

CD player.readda(num_frames)

Считывает указанное количество кадров с аудиодиска, установленного в приводе CD-ROM. Возвращаемое значение – строка, представляющая аудиокадры. Эту строку можно передать без изменений методу parseframe() объекта парсера.

CD player.seek(minutes, seconds, frames)

Устанавливает указатель, определяющий начальную точку следующего чтения цифровых аудиоданных с CD-ROM. Указатель устанавливается на позицию абсолютного временного кода, заданную в минутах, секундах и кадрах. Возвращаемое значение – номер логического блока, на который установлен указатель.

CD player.seekblock(block)

Устанавливает указатель, определяющий начальную точку следующего чтения цифровых аудиоданных с CD-ROM. Указатель устанавливается на заданный номер логического блока. Возвращаемое значение – номер логического блока, на который установлен указатель.

CD player.seektrack(track)

Устанавливает указатель, определяющий начальную точку следующего чтения цифровых аудиоданных с CD-ROM. Указатель устанавливается на заданный трек. Возвращаемое значение – номер логического блока, на который установлен указатель.

CD player.stop()

Останавливает текущую операцию воспроизведения.

CD player.togglepause()

Приостанавливает CD, если он играет, и запускает воспроизведение, если он на паузе.

39.3.2. Объекты ParserParser Objects

Объекты Parser (возвращаемые createparser()) имеют следующие методы:

CD parser.addcallback(type, func, arg)

Добавляет колбэк для парсера. У парсера есть колбэки для восьми различных типов данных в потоке цифровых аудиоданных. Константы для этих типов определены на уровне модуля cd (см. выше). Колбэк вызывается следующим образом: func(arg, type, data), где аргумент – переданный пользователем аргумент, тип – конкретный тип колбэка, а данные – данные, возвращаемые для этого типа колбэка. Тип данных зависит от типа колбэка следующим образом:

Тип

Значение

audio

Строка, которую можно передать без изменений в al.writesamps().

pnum

Целое число, задающее номер программы (трека).

index

Целое число, задающее номер индекса.

ptime

Кортеж, состоящий из времени программы в минутах, секундах и кадрах.

atime

Кортеж, состоящий из абсолютного времени в минутах, секундах и кадрах.

catalog

Строка из 13 символов, задающая каталожный номер диска.

ident

Строка из 12 символов, задающая идентификационный номер ISRC записи. Строка состоит из двух символов кода страны, трёх символов кода владельца, двух символов, задающих год, и пяти символов, задающих серийный номер.

control

Целое число, задающее управляющие биты из субкодовых данных CD.

CD parser.deleteparser()

Удаляет парсер и освобождает используемую им память. Объект не должен использоваться после этого вызова. Этот вызов выполняется автоматически, когда последняя ссылка на объект удаляется.

CD parser.parseframe(frame)

Разбирает один или несколько кадров цифровых аудиоданных с CD, например, возвращённых методом readda(). Определяет, какие субкоды присутствуют в данных. Если с момента последнего кадра эти субкоды изменились, то parseframe() выполняет колбэк соответствующего типа, передавая ему субкодовые данные, обнаруженные в кадре. В отличие от C-функции, этому методу можно передать более одного кадра цифровых аудиоданных.

CD parser.removecallback(type)

Удаляет колбэк для заданного типа.

CD parser.resetparser()

Сбрасывает поля парсера, используемые для отслеживания субкодов, в начальное состояние. resetparser() следует вызывать после замены диска.