Главная » Программирование звука » Система UNIX и звук в сети

0

Запуская  программу  на  настольном  компьютере,  обычно  можно  быть  уверенным в том, что дисплей и громкоговорители подключены к нему. Для систем UNIX это не  всегда  так.  Широко  распространена  ситуация,  когда  монитор  компьютера,  выполняющего задачу, находится в соседней комнате или даже в другой стране. B системе  X  window  отлично  реализована  поддержка  подобных  подключений.  При  любом запуске Х-программы сначала устанавливается сетевое подключение к машине, использующейся  в  качестве  терминала.  Подобный  подход оказался  особенно полезен  для  работы  исследователей,  которым  необходимо  проводить  сложные  расчеты на удаленных высокоскоростных суперкомпьютерах, а изображение результатов вычислений получать на установленной у них на столе графической рабочей станции.

Если  работа  вашей  программы  производит  звуки,  то  вам,  очевидно,  надо  сделать   так,   чтобы   звуки   воспроизводились   через   громкоговорители,   подключенные к дисплею, а не к компьютеру, где запущена программа. K сожалению, X window не  поддерживает  работу  со  звуком.  Чтобы  дополнить  X window,  создав  аналогичную сетевую модель для аудиосерверов, корпорацией NCD была разработана Network Audio System (NAS, система работы со звуком в сети).

NAS позволяет иметь на разных компьютерах работающую со звуком программу и громкоговорители. Эта программа устанавливает связь с аудиосервером, после чего может посылать запросы на проведение различных операций. Передачи звуковых данных по сети для выполнения многих операций не требуется: сервер может хранить  звуки  локально  и воспроизводить  их,  либо воспроизводить  звуки,  пользуясь другими источниками. Ha практике сервер NAS часто устанавливается на один компьютер с клиентом. C сервера  ftp.x.org можно загрузить модули поддержки NAS для многих распространенных систем (в том числе Solaris, Linux и FreeBSD).

Еслй вы не очень хорошо знакомы с моделью X window, вам может показаться, что  термины  сервер  и  клиент  имеют  значения,  противоположные  привычным, B  рассматриваемом  случае  сервер  работает  на  вашем  настольном  компьютере, а клиентская часть может работать в сети где угодно. Обычно и сервер, и клиент запускаются  на  одном  компьютере.  Возможно,  ситуация  станет  более  понятной, если вспомнить, что термин «сервер» просто обозначает «программу, которая предоставляет  некоторый  сервис».  Сервер  NAS  обеспечивает  сервис  управления  физическими громкоговорителями.

Рассматриваемый  здесь  класс  проигрывателя  для  NAS  аналогичен  соответствующим классам для Mac OS и Windows. Отличает их, во-первых, то, что предлагаемый  мной  цикл  событий  обрабатывает  события,  источником  которых  является аудиосервер (в Х-программе эти события обрабатывались бы посредством

Х-обработчика  событий).  Другое  отличие  заключается  в  том,  что  моя  програм-

ма необязательно должна быть многопотоковой.

Вся  поддержка  двойной  буферизации  осуществляется  аудиосервером,  мне  при-

ходится только передавать ответы на запросы дополнительных порций данных.

Листинг 8.1. Программа nasplayr.h

/* Класс проигрывателя для  сетевых  аудиосистем */

#ifndef NASPLAYER_H_INCLUDED

#define NASPLAYER_H_INCLUDED

#include "audio.h"

#include "aplayer.h"

extern "C" { /* объявления NAS */

#include <audio/audiolib.h>

}

class NasPlayer : public AbstractPlayer {

private:

bool _finished;    // Истина, если  все  данные воспроизведены.

public:

NasPlayer(AudioAbstract *a):AbstractPlayer(a) {

_finished = false;

} ;

~NasPlayer() {};

void Play();       // Собственно  воспроизведение.

};

#endif

Листинг 8.2. Программа nasplayr.cpp

#include <typeinfo>

#include <iostream>

#include <fstream>

#include "audio.h"

#include "aplayer.h"

#include "nasplayr.h"

Источник: Кинтцель Т.  Руководство программиста по работе со звуком = A Programmer’s Guide to Sound: Пер. с англ. М.: ДМК Пресс, 2000. 432 с, ил. (Серия «Для программистов»).

По теме:

  • Комментарии