Содержание страницы
39.3. cd – доступ к CD-ROM на системах SGI¶cd – 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. Объекты Parser¶Parser 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()следует вызывать после замены диска.