Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Прикладное программирование на CC++ с нуля до мультимедийных и сетевых приложений

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Коммуникации по телефонным линиям 131
комментировать не будем, а остановимся только на принципиальных осо­бенностях.
Итак, при конструировании формы производится обновление телефон­ной книги, что вполне естественно. При нажатии стрелки в компоненте
ComboBox и выборе имени из списка срабатывает функция-обработчик ComboBox1Change. Здесь выполняется функция RasGetEntryProperties, которая
получает общие свойства выбранного соединения. Как можно видеть из тек­ста, и здесь функция вызывается дважды — такова специфика задачи. Подоб­ная функция RasGetCredentials также работает со свойствами соединения, но уже не общими, а определенными пользователем. В результате производится заполнение полей Edit значениями соответствующих свойств, а сами свойства сохраняются в соответствующих структурах.
Функция-обработчик нажатия кнопки Button1 — Редакт св-ва вызывает функцию RasEditPhonebookEntry, которая, как следует из ее названия, занима­ется изменением свойств выбранного соединения. После редактирования тре­буется обновить телефонную книгу, что и делается в обработчике. Кнопка
Button2 — Выход закрывает программу, и здесь все ясно.
Button3 — Подключиться выполняет непосредственное подключение к
удаленному компьютеру. Здесь размещается в памяти и заполняется несколь­ко структур, из которых далее извлекаются данные о вызывающем соедине­нии, а после успешного подключения — о вызванном хосте. Производятся необходимые операции над этими данными функциями RasGetEapUserData è RasGetProjectionInfo, в частности, определяются и выводятся в информацион­ные поля IP-адреса соединенных машин. Непосредственное же подключение выполняется функцией RasDial.
Отключение от удаленного компьютера выполняется обработчиком кноп­ки Button4 — ÎÒÊË. Здесь главным персонажем является функция RasHangUp, что означает «ПОЛОЖИТЬ ТРУБКУ». Заметим, что предвари­тельно снова анализируется телефонная книга, и отключение производится в цикле для всех возможных соединений. После этого программа остается в ра­бочем состоянии, то есть готовой к новому подключению. В связи с этим в конце обработчика очищаются все текстовые поля и восстанавливаются неко­торые значения переменных по умолчанию.
В функции FormCreate устанавливаются начальные параметры доступно­сти ряда кнопок, запрещающие, в частности, некоторые несвоевременные операции. Кнопка Button5 — Создать соединение инициирует выполнение функции RasCreatePhonebookEntry, которая как раз и создает новую запись в телефонной книге. После этого, естественно, требуется выполнить обновле­ние книги.
Ïðè нажатии кнопки Button6 — Обновить вызывается функция RefreshConnList, обновляющая список соединений. Удаление выбранного со­единения из телефонной книги (Button7 — Удалить) производится с помощью обращения к функции RasDeleteEntry с первым аргументом, содержащим на­звание соединения, и нулевым вторым аргументом, после чего снова обновля ется список.
-
132 Глава 3. Передача информации в сетях
Теперь на очереди обработка установки отметки в поле CheckBox4. Если отметка поставлена, то переименовывается кнопка Выбрать файл и становят­ся доступными элементы Button9 è Edit10. Тем самым открывается возмож­ность выбора файла для передачи. Пересылку файла выполняет обработчик нажатия кнопки Button8 — Передать. Здесь используется знакомый нам аппа­рат потоковой транспортировки данных. Следует отметить, что если в преды­дущих разделах мы рассмотрели потоковую передачу строки, то здесь произ­водится пересылка целого файла, помещаемого в поток с помощью метода LoadFromFile.
Далее по тексту главного модуля следует ряд функций-обработчиков не­которых событий, происходящих с потоком. Не будем их пояснять, поскольку многое здесь уже знакомо, а остальное вполне понятно. В основном эти функции занимаются выдачей сообщений в информационное поле. Остано­вимся только на событии NMStrmServ1MSG, которое произойдет на удален­ном компьютере при получении файла. Полученные данные копируются из потока в файл, вызывается диалог сохранения файла, где пользователь при­сваивает файлу имя и указывает место, где файл будет сохранен.
И последней в тексте описана функция-обработчик нажатия кнопки Button9 — Выбрать файл. Здесь сначала открывается диалог выбора файла для отправки — имя файла заносится в поле Edit11. Далее с помощью метода CreateFile выбранный файл открывается для использования (в данном слу­чае — для помещения в поток). Соответствующая текстовая информация ото­бражается в окне. На этом описание программы будем считать законченным. Мы отдаем себе отчет в том, что описание это сделано довольно бегло, но на­деемся, что читатель, который к этому моменту уже приобрел нужный опыт, разберется с возможными вопросами самостоятельно.
Глава 4
ЗАПИСЬ, ОБРАБОТКА
И ВОСПРОИЗВЕДЕНИЕ ЗВУКА
Аналоговый и цифровой звук
Как известно еще из школьного курса физики, звук представляет собой волну, распространяющуюся в среде — газе, жидкости, твердом теле. В зави­симости от среды распространения в волне меняются во времени и в про­странстве давление газа, механические напряжения или другие характеристи­ки. Человеческое (и не только человеческое) ухо воспринимает колебания плотности воздуха, которые преобразуются в механические колебания бара­банной перепонки. Изменения указанных характеристик, будь то давление воздуха или смещение перепонки относительно некоторого положения, про­исходят непрерывно. Имеется в виду то, что параметры пробегают все свои возможные значения последовательно во времени, так сказать, без скачков. Такие процессы принято называть непрерывными, в контексте информаци­онно-компьютерной тематики — аналоговыми. В противоположность этому процессы, в которых некая величина изменяется скачкообразно от одного фиксированного значения к другому, можно назвать дискретными. Если дис­кретные состояния характеризуются числовыми значениями, то говорят о цифровом представлении процесса. Эта же терминология применяется к сиг­налам и формам представления информации.
Итак, звуковая волна в воздухе и колебания барабанной перепонки — аналоговые процессы. Звук, воспринимаемый микрофоном, в конечном итоге преобразуется в непрерывно изменяющийся во времени электрический ток в цепи микрофона. Ток в данном случае также является аналоговым процессом или сигналом. Но даже далекие от компьютерной тематики люди знают или, по крайней мере, слышали, что вычислительная техника оперирует с инфор­мацией, представляемой в цифровой форме. По этой причине первое, с чем мы должны разобраться, это то, как происходит преобразование аналогового звукового сигнала в цифровой, который мо­жет обрабатываться компьютером. Процесс преобразования любого сигнала из аналого­вого представления в цифровое называется оцифровкой, в данном случае — оцифров­кой звука (рис. 4.1).
Ðèñ. 4.1
134 Глава 4. Запись, обработка и воспроизведение звука
Смысл оцифровки легче всего пояснить графически, как это представле­но на приведенном выше рисунке. Непрерывная кривая в левой части рисун­ка, отображающая зависимость некоторой физической величины от времени (например, тока в цепи микрофона), заменяется последовательностью отрез­ков в правой части рисунка, сохраняющих постоянные значения на протяже­нии небольших интервалов времени и скачкообразно меняющих значение при переходе от одного интервала к следующему. Разумеется, последователь­ность отрезков только приблизительно описывает гладкую кривую, и это фун­даментальное обстоятельство: аналого-цифровое преобразование, как и обрат­ное цифроаналоговое преобразование — это преобразование приближенное. Возможно, этот факт имеет некоторый негативный оттенок, но зато мы пере­ходим в некое новое качество. Для описания непрерывного процесса необхо­димо бесконечное множество значений, например, силы тока. Для цифрового описания процесса необходимо конечное число значений.
Интуитивно ясно, что чем короче интервалы постоянства цифровой вели­чины, приближенно представляющей непрерывную кривую, тем точнее вы­полняется преобразование. Величина, характеризующая точность воспроизве­дения исходной кривой при ее оцифровке, называется частотой дискретиза­ции. Размерность этой характеристики — обратное время. Следовательно, единицей измерения здесь могут служить герцы (Гц), килогерцы (кГц) и так далее. Таким образом, если оцифровка производится с частотой дискретиза­ции, допустим, 800 Гц, то каждую восьмисотую долю секунды производится определение величины сигнала. Очевидно, что чем выше частота дискретиза­ции, тем большее количество памяти потребуется для запоминания оцифро­ванного сигнала заданной длительности: за высокое качество приходится рас­плачиваться дополнительным расходованием памяти.
Цифровое представление информации предполагает, что в любой времен­ной точке, в которой произведена оцифровка, величина сигнала запоминается с некоторой ошибкой — сохраняется значение, ближайшее к измеренному из диапазона значений, представленных набором числовых данных. Этот диапа­зон значений, разумеется, конечен. В цифровой технике набор возможных значений оцифрованной величины определяется параметром, называемым разрядностью оцифровки. Разрядность измеряется в битах или байтах. Так, например, разрядность оцифровки 8 битов (1 байт) означает, что для пред­ставления измеренной величины в нашем распоряжении имеется 2
8
= 256 раз­личных значений. Диапазон возможных изменений аналоговой величины раз­бивается на 255, как правило, одинаковых отрезков, и измеренная величина округляется до ближайшего значения из набора от 0 до 255. Чем больше раз­рядность оцифровки, тем более точно она выполняется и тем больше памяти расходуется для запоминания сигнала.
Применительно к аналого-цифровому преобразованию звука использует­ся еще одна характеристика — количество каналов. При оцифровке монофо­нического сигнала этот параметр, естественно, равен 1. Для стереозвука он равен 2, для квадро — 4.
Комбинация (произведение) частоты дискретизации, разрядности оциф­ровки и количества каналов задает важнейшую характеристику — интенсив
-
Аналоговый и цифровой звук 135
ность потока цифровых данных. Из английского языка пришло новое, в ка­кой-то степени жаргонное, слово — битрайт (bit rate), как раз и определяющее интенсивность. Количественно битрайт равен произведению указанных пара­метров, а измеряется он в байтах в секунду. Таким образом, способность ап­паратных или программных средств компьютера «переваривать» (преобразо­вывать, передавать) поток данных определяется битрайтом.
С какими же значениями битрайта нам приходится иметь дело, когда мы работаем со звуком? Прежде всего, отметим, что «средний человек» способен воспринимать звуковые волны в диапазоне от нескольких герц до, примерно, 20 килогерц. Самые низкочастотные колебания, которые не только не вос­принимаются человеческим ухом, но и представляют определенную угрозу для здоровья, называются инфразвуком. Высокочастотные волны, которые также не слышит человек, лежат в ультразвуковом диапазоне. Хотя указанная цифра в 20 килогерц вполне реальна, высококачественная звуковая цифровая техника обеспечивает перекрытие воспринимаемого диапазона частот с неко­торым запасом.
Математика и физика дают ответ на вопрос о том, как следует выбирать частоту дискретизации. Ответ содержится в утверждении, которое известно как теорема Котельникова. Эта теорема, применительно к нашему рассмотре­нию, говорит примерно следующее: для качественной оцифровки звукового сигнала необходимо, чтобы частота отсчетов вдвое превышала максимальную частоту колебаний, присутствующих в сигнале. Поскольку мы считаем, что верхняя граница диапазона частот звука, воспринимаемого человеком, состав­ляет примерно 20 кГц, частота дискретизации, обеспечивающая хорошее ка­чество звука, должна составлять примерно 40 кГц.
Разрядность оцифровки звука обычно выбирается в пределах от 8 до 24 битов. Восьмиразрядное кодирование соответствует весьма низкому каче­ству. При передаче голоса такое качество считается приемлемым, но, напри­мер, для оцифровки музыки один байт явно недостаточен. Трехбайтовое ко­дирование используется только в исключительных случаях. Оно, конечно, обеспечивает высочайшее качество, но, как правило, явно избыточно. Будем считать, что оптимальная разрядность оцифровки составляет 16 битов, отме­тив также, что используются системы с разрядностью, не равной целому чис­лу байтов — например 12 разрядов. Ну и, наконец, если речь идет о записи и воспроизведении стереозвука, то, перемножив представленные параметры, мы приходим к оценке битрайта для работы с качественным звуком. Величина интенсивности потока данных составляет 150 кбайт/с. Теперь, воспользовав­шись понятием битрайт, можно оценивать размер файла, в который будет за­писан некоторый звуковой фрагмент с заданным уровнем качества. Так, на­пример, для сохранения в файле музыкального произведения с высоким каче­ством стереофонического звучания длительностью 2 минуты размер этого файла составит примерно 10 мегабайт — весьма значительное число!
Приведенные простые расчеты соответствуют созданию файла именно с оцифровкой по указанной методике, называемой импульсно-кодовой модуля­цией (РСМ — соответствующая английская аббревиатура). Файлы со звуко­выми данными такого сорта обычно имеют расширение .wav (от английского
136 Глава 4. Запись, обработка и воспроизведение звука
wave — волна) и называются волновыми. Мы уже убедились, что wav-файлы очень расточительно обходятся с дисковой памятью компьютера. По этой причине волновые файлы, хотя и находят некоторое применение, серьезно для хранения аудиоданных не используются. Дело в том, что существуют ме­тоды эффективного сжатия звуковых файлов с незначительной потерей каче­ства или даже вообще без таковой. Компрессия файлов, в зависимости от ис­пользуемой методики, приводит к уменьшению размера звукового файла как минимум в несколько раз. Так, наиболее популярный в настоящее время фор­мат mp3 сжимает звуковые данные в 5—10 раз. Далее в нашей книге мы пого­ворим о сжатии звуковых (и не только звуковых) файлов весьма подробно, а теперь перейдем к рассмотрению аппаратных средств работы со звуком на персональном компьютере.
Звуковое оснащение компьютера
Основную работу при записи и воспроизведении звука на персональном компьютере выполняет специальное электронное устройство, называемое зву­ковой платой или звуковой картой. Это устройство занимается, в первую оче­редь, аналого-цифровым и цифроаналоговым преобразованием, то есть одно­временно является АЦП и ЦАП — два в одном. Конструктивно звуковая кар­та может быть интегрирована в материнскую плату компьютера или представлять собой отдельный модуль, который подключается к слоту расши­рения материнской платы. Второй вариант предпочтительнее с точки зрения качества звукового устройства. Интегрированные платы, как правило, высо­ким качеством не отличаются.
Различные типы устройств могут быть снабжены и различными наборами входов и выходов. Нас будут интересовать микрофонный вход, обычно марки­руемый как Mic In, и выход для головных телефонов (наушников) или звуко­вых колонок, маркируемый как Speaker. Это, естественно, аналоговые входы и выходы. Цифровая часть платы подключена к системной шине. Микрофон­ный вход достаточно чувствителен для восприятия слабых сигналов даже для недорогих устройств, а вот выходная мощность звуковой платы не велика — для воспроизведения звука обычно требуется усилитель мощности.
В зависимости от типа звукового адаптера его возможности могут быть самыми разнообразными. Ознакомиться с различными параметрами вашей аудиоплаты и изменить ее настройки можно через свойства регулятора гром­кости, обычно выведенного на панель задач (трэй) рабочего стола Windows, или через разделы Çâóê è Мультимедиа на странице Настройки Панели управ- ления. Здесь можно обнаружить возможности, например, раздельной регули­ровки громкости в каналах, включение специальных эффектов типа эхо или объемного звука и многое другое. Некоторые звуковые карты имеют аппарат­ный регулятор громкости. Для других регулировка осуществляется программ­но. Все особенности отдельных устройств описать здесь просто невозможно, но одно свойство упомянуть необходимо. Речь идет о возможности работы платы в дуплексном или полудуплексном режиме. Эти термины пришли из
Звуковое оснащение компьютера 137
практики радиосвязи. Связные радиостанции, поддерживающие дуплексный (точнее — полнодуплексный) режим, могут одновременно работать как на прием, так и на передачу. В полудуплексном режиме станция в данный мо­мент либо принимает сообщение, либо передает. То же самое имеет место и для звуковых плат. Еще раз подчеркнем, что дуплексные устройства работают в обоих направлениях именно синхронно: аналого-цифровое и цифроаналого­вое преобразование сигналов производятся независимо друг от друга и не ме­шают друг другу. Далее в книге мы увидим, что наличие полнодуплексного режима принципиально важно, например, для систем IP-телефонии.
Некоторые характеристики звуковой карты, установленной на вашем компьютере,
можно
установить с помощью специальной программы диагно­стики аудиоустройств. Программа разработана А. В. Фроловым и представляет собой исполняемый файл drvlist.exe. Более точно следует считать, что про­грамма производит диагностику драйверов соответствующих устройств. Сама программа будет объектом нашего внимания позднее, когда мы расскажем о ее структуре, а пока посмотрим на результаты работы программы, которые выводятся в текстовый файл drvlist.txt, листинг которого представлен ниже.
* ================================= * * DRVLIST, (C) Frolov A.V., 1994 * * ================================= *
ESS AudioDrive Playback (9C00), v. 406, wMid=46, wPid=46, wChannels=2 11025 КГц, моно, 8 бит 11025 КГц, стерео, 8 бит 11025 КГц, моно, 16 бит 11025 КГц, стерео, 16 бит 22050 КГц, моно, 8 бит 22050 КГц, стерео, 8 бит 22050 КГц, моно, 16 бит 22050 КГц, стерео, 16 бит 44100 КГц, моно, 8 бит 44100 КГц, стерео, 8 бит 44100 КГц, моно, 16 бит 44100 КГц, стерео, 16 бит Регулировка громкости Раздельная регулировка громкости
Игровое устройство, v. 400, wMid=1, wPid=89, wChannels=1
Voice Modem Wave #00 Line, v. 400, wMid=1, wPid=81, wChannels=1
Как можно видеть из этого листинга, программа диагностики обнаружила на компьютере драйвер звуковой платы из семейства ESS, обеспечивающей двухканальную (стерео) обработку звука. Далее представлен список режимов записи и воспроизведения звука. Низшее качество соответствует частоте дис­кретизации 11 025 Гц (в листинге указано кГц — это «опечатка») и разрядно­сти оцифровки 8 бит. Высшее качество — 44 100 Гц и 16 бит соответственно. На самом деле допустима работа и с другими сочетаниями разрядности и час тоты, но будем считать остальные наборы «нештатными». Среди возможно-
-
138 Глава 4. Запись, обработка и воспроизведение звука
стей звуковой платы отмечены регулировка громкости и раздельная регули­ровка по каналам. Интересно отметить, что диагностирующая программа от­носит к звуковым аппаратным средствам и игровые устройства (джойстики) и голосовые модемы, что и указано в листинге.
Тот факт, что звуковая карта является, по сути, аналого-цифровым преоб­разователем, находит для нее интересное применение не совсем по назначе­нию. Входной сигнал, оцифрованный платой, может быть представлен графи­чески на экране монитора в виде зависимости входного напряжения от време­ни. Таким образом, компьютер, снабженный звуковой картой, превращается в цифровой осциллограф. Эта возможность была подмечена достаточно давно. В результате появились программы, реализующие такой виртуальный осцил­лограф.
Мы представляем здесь условно-бесплатную программу «Осциллограф», разработанную В. А. Мещеряковым. В условно-бесплатной программе забло­кированы некоторые полезные режимы работы осциллографа, в связи с чем на следующем рисунке представлена «визитная карточка», с помощью кото­рой можно связаться с разработчиком и приобрести коммерческую полно­функциональную версию (рис. 4.2).
Ðèñ. 4.2
Теперь инсталлируем программу, подключим к звуковой карте микрофон и запустим приложение. Скажите или спойте что-нибудь в микрофон и по­смотрите на экран программы. Вы увидите нечто похожее на то, что изобра­жено ниже. Это — осциллограмма звукового сигнала, полученного со входа звуковой платы, оцифрованного ею и представленного в виде временной за­висимости (рис. 4.3).
Поэкспериментировать с сигналом очень познавательно. Попробуйте по­менять тон звука, который вы передаете в микрофон, громкость звука. Графи­ческое отображение сигнала очень показательно.
Заметим, что, поскольку звуковое устройство, как правило, двухканальное (стереофоническое), наш виртуальный осциллограф можно сделать двулуче­вым. При этом программа может быть настроена на отображение так называе мых фигур Лиссажу, когда один сигнал развертывается по горизонтальной
-
Звуковое оснащение компьютера 139
Ðèñ. 4.3
оси, а другой — по вертикальной. Можно настраивать чувствительность вхо­дов, частоту обновления экрана и ряд других характеристик. Осциллограмму можно сохранить в графическом файле для дальнейшей демонстрации, на­пример, в презентациях. Напомним, однако, что большинство настроек дос­тупно только в коммерческой версии.
В состав звукового оснащения персонального компьютера принято вклю-
дисковод компакт-диска (CD ROM drive). В настоящее время эти приво-
чать ды могут быть действительно устройствами только для чтения либо записы­вающими устройствами. В свою очередь, последние, в зависимости от типа носителя, могут выполнять запись или запись и перезапись диска — CD-R или CD-RW. Основной технической характеристикой привода является ско­рость работы. Она измеряется в единицах кратности, то есть в скорости от­носительно некоторой базовой производительности. Так, например, ваш CD-ROM может быть 48-скоростным или 16-скоростным приводом. Каза­лось бы, чем больше кратность скорости, тем лучше. Это, конечно, в основ­ном так, но опыт показывает, что высокоскоростные устройства могут не справляться с обработкой некоторых старых или не очень качественно изго­товленных компакт-дисков.
Для работы со звуком, естественно, необходимы средства воспроизведе­ния. Таковыми могут быть специализированные компьютерные акустические колонки или головные телефоны (наушники). Разумеется, выход звуковой карты через усилитель может быть подключен и к обычным колонкам. Отме тим, что для работы с системами IP-телефонии, о которых мы будем гово
-
-
140 Глава 4. Запись, обработка и воспроизведение звука
рить, предпочтительнее использовать наушники. При этом исключается воз­никновение эффекта эха, обусловленного громко работающими колонками. Что касается источников звука, то они могут быть самыми разнообразными — бытовые магнитофоны и проигрыватели, радио и телевизионные приемники. Для нас наибольший интерес представляет запись звука с микрофона. За ред­кими исключениями для подключения к входу звуковой платы годится любой микрофон. Наиболее удобным в использовании следует считать микрофон, объединенный с головными телефонами, — так называемая гарнитура, хотя нужно иметь в виду, что качество такого микрофона не высокое. Для записи же стереофонического звука потребуется, естественно, два микрофона.
После физического подключения аппаратных средств мультимедиа и ус­тановки граммные установки. Во-первых, имеет смысл установить весь комплекс про­грамм мультимедиа, входящий в стандартный дистрибутив Windows. Если вы этого еще не сделали, то откройте Панель управления, активируйте Установку и удаление программ, выберите вкладку Установка Windows и поставьте флажок в пункте Мультимедиа. После перезагрузки системы цель будет достигнута.
Мультимедиа, вкладку Аудио. Здесь можно настроить различные параметры работы со звуком. Не будем вдаваться в подробности настроек. Во-первых, их довольно много, во-вторых, смысл и назначение настроек вполне понятен, а самое главное заключается в том, что возможные опции определяются типом звуковой карты, установленной на компьютере, и могут сильно различаться. Для некоторых карт, например, возможно задать увеличение чувствительно­сти по микрофонному входу. В других случаях можно установить так называе­мый режим объемного звука. Одним словом, рекомендуем поподробнее разо­браться с этими настройками.
необходимых драйверов можно сделать некоторые первичные про-
Теперь имеет смысл в той же Панели управления активировать значок
Основы программирования звукозаписи
Перед началом непосредственного программирования работ со звуком необходимо четко представлять всю «идеологию» записи и воспроизведения аудио. В зависимости от инструментальных средств, используемых для про­граммирования, существует несколько подходов к разработке приложений. Здесь мы рассмотрим подход, основанный на применении функций системы Windows API — набора инструментов разнообразного назначения от корпора­ции Microsoft, ориентированных на разработку 32-разрядных приложений. В этой системе сосредоточено большое количество процедур работы с муль­тимедиа. Информацию о функциях Windows API можно получить непосредст­венно из Builder'а, вызвав справку (Help) из главного меню — раздел Windows SDK. Более подробное описание и примеры использования находятся на диске MSDN, свободно распространяемом корпорацией Microsoft. Разраба­тывая программы, мы будем следовать рекомендациям, предлагаемым А. В. Фроловым, которые были обнаружены в одном из html-документов в Интернете.