
Я часто рассказываю о временах, когда домашние компьютеры 1980-х годов только обретали звуковые возможности, и о различных формах ранней компьютерной музыки, создаваемой на этих машинах программными синтезаторами, специализированными звуковыми чипами, или проигрывателями оцифровок реальных звуков.
Уделял я внимание и такому базовому звуковому устройству, как PC Speaker — его наследие до сих пор присутствует в современных ПК. В прошлый раз, однако, речь шла про его способности в области имитации многоголосия в монофонических квадратно-волновых мелодиях.
Сегодня же я коснусь такой темы, как воспроизведение реалистичных звуков, «оцифровок», привычных нам в современности. Это нота ностальгии по техническому чуду, когда ПК, обычно издававший звуки не сильно лучше карманного Тетриса, вдруг начинал убедительно говорить человеческим голосом и играть полноценные музыкальные композиции. Причём совершенно бесплатно, без покупки звуковой карты.
О том, как это работало «под капотом», а также о памятных примерах в играх и программах, и пойдёт речь в сегодняшнем материале.
Классический спикер
Для начала коротко пройдёмся по базовым вопросам: что такое PC Speaker, зачем нужен и каковы его базовые возможности. Повторение — мать учения, да и материал сам собой воды не наберёт!

Собственно, «Спикер» («динамик», «пищалка», «хрипер») представляет собой самое древнее и поначалу единственное звуковое устройство, которым был оборудован самый первый компьютер линейки IBM PC, модель 5150 образца 1981 года. Без каких-либо изменений он перекочевал в более известные XT и AT, все последующие оригинальные модели IBM, и далее в миллионы их клонов. Есть он и в любом современном компьютере.
Как и в большинстве компьютеров той эпохи, звук выводился не на колонки, которых просто не было, а на встроенный в корпус компьютера динамик, собственно сам «спикер». Раньше это была настоящая, хоть и небольшая динамическая головка. Теперь же чаще это малюсенький пьезодинамик, болтающийся на разъёме где-нибудь на материнской плате.
Изначально это устройство было предназначено для подачи сигналов об ошибках, возникающих в процессе начальной загрузки компьютера, когда вывод изображения ещё недоступен — так называемых POST-кодов. Также оно применялось для подачи сигналов в программах. За отсутствием лучшего, спикер задействовали и разработчики ранних игр для ПК, выводя на него примитивные звуковые эффекты. Его поддержка во вновь выходящих играх оставалась почти до середины 1990-х годов, когда звуковые карты наконец-таки удалось продать всем желающим и нежелающим.
Что отличает PC Speaker от подобных ему устройств во многих других, более дешёвых компьютерах, но также роднит с меньшей их частью — это не просто однобитный порт вывода, к которому подключён динамик, как на Apple II или ZX Spectrum. На IBM PC помимо однобитного порта к динамику также подключён выход одного из каналов таймера Intel 8253. Это позволяет генерировать звук простейшего тембра, «квадратную волну» или «меандр», без участия центрального процессора — он лишь задаёт нужную частоту и дальше занимается своими делами.
Это обстоятельство позволило разработчикам игр воспроизводить простенькие одноголосные мелодии без остановки действия на экране. Разработчики игр на упомянутых Apple II и Спектруме пошли по пути усложнения программного синтеза в играх, выдавая впечатляющие результаты. На PC это не прижилось — подобные упражнения требуют точного расчёта скорости выполнения кода, а производительность разных компьютеров могла быть очень разной, и обеспечить одинаковое звучание на всех них было сложно. Некоторые пытались, но дело быстро сошло на нет. К тому же, вскоре на ПК подвезли звуковые карты.
Поэтому типичными атрибутами звучания музыки на PC Speaker стала простейшая квадратная волна и один голос, с редкими попытками имитации полифонии. Лучшее, что можно было услышать в среднем по палате — мелодии в играх Lucasfilm Games, в таких играх, как The Secret of Monkey Island.
Эту технику тоже можно довести до совершенства, что я продемонстрировал несколько лет назад в различных проектах System Beeps Planet X3 и Area 5150, но всё же, это не идёт ни в какое сравнение с возможностями специализированных звуковых чипов и звуковых карт.
И вот на дворе самый конец 1980-х, у вас есть IBM-совместимый компьютер без звуковой карты, и вы уже привыкли к тому, что он пиликает одним голосом простенькие мелодии. И тут вдруг в очередной новой игре вы слышите, как из недр компьютера доносится это:
Что это за достаточно продвинутая технология, неотличимая от магии? Срочно разбираемся!
Оцифровка звука
Идея, лежащая в основе цифровой звукозаписи на компьютере, предельно проста по своей сути. Для записи звука нужно измерять амплитуду сигнала на входе несколько тысяч раз в секунду и сохранять последовательность результатов измерений. Для воспроизведения нужно с той же скоростью устанавливать на выходе ранее измеренные значения амплитуды. Этот простейший алгоритм действий позволяет захватить сколь угодно сложное содержание записываемого сигнала, хоть базовые формы волны, хоть человеческую речь и музыку.

Разумеется, в жизни всё несколько сложнее. Процесс «оцифровки» или «дискретизации» сигнала имеет довольно сложную и неочевидную математику, а также он полон заблуждений, например, что при восстановлении сигнал превращается в некие «ступеньки». Углубляться во всё это сейчас нет нужды. Достаточно сказать, что для более точной реконструкции исходного сигнала в процессе оцифровки важны два параметра: частота измерений и точность записи значений амплитуды.
Частота измерений, она же «частота дискретизации» или «sample rate», влияет на предельную частоту гармонических составляющих записываемого сигнала. Вы наверняка слышали про теорему Котельникова: для записи сигнала с частотой F нужно оцифровывать его с частотой 2F, то есть вдвое большей. Гармоники с частотой, превышающей половину частоты дискретизации (так называемая частота Найквиста), исчезнут из восстановленного сигнала или приведут к появлению посторонних призвуков, непохожих на исходный сигнал.
Для практических применений в звукозаписи приняты частоты дискретизации порядка 40 килогерц, так как предел воспринимаемых человеческим ухом частот лежит в области 20 килогерц. Но во времена старых компьютеров, когда внедрение цифрового звука только начиналось, а быстродействия и памяти не хватало, приходилось идти на компромиссы, и понижать частоту дискретизации до 10-20 килогерц. Это приводит к потерям в верхней части частотного спектра, звук становится заметно глуше, но остаётся вполне узнаваемым.
Точность записи значений амплитуды, она же «глубина дискретизации», или даже «динамический диапазон», влияет на соотношение уровня полезного сигнала и шума. Чем выше точность, тем менее зашумлен реконструируемый сигнал. В современных ПК применяются точность 16 и 24 бит (65536 или 16777216 «ступенек» амплитуды), этого достаточно с головой для очень высокого качества звучания. На старых компьютерах часто использовалась точность 8 бит, что давало 256 «ступенек» — результат одиночного измерения помещался в один байт. Звучание таких оцифровок было довольно шумным, но вполне сравнимым с записью на кассетный магнитофон.

Для практической реализации цифровой звукозаписи нужен компьютер, много памяти, и два устройства-преобразователя — аналого-цифровой преобразователь, АЦП, и его антипод, цифро-аналоговый преобразователь, ЦАП. Первый переводит аналоговые значения амплитуды в цифровую форму, а второй наоборот, создаёт на выходе напряжение или ток нужной величины. При записи звука компьютер регулярно опрашивает АЦП и помещает последовательность считанных значений в память. При воспроизведении компьютер отправляет последовательность значений из памяти в ЦАП.
Можно объяснять процесс «на пальцах». В момент считывания АЦП видит входную моментальную амплитуду, например, в 0.5 вольта, и выдаёт на выходе число 128. В следующее считывание амплитуда оказалась 0.25 вольта, и АЦП выдаёт 64. Подобные измерения производятся с постоянной скоростью несколько тысяч раз в секунду. Считанные значения сохраняются в память в виде списка — это и есть звуковой файл. Для реконструкции сигнала в ЦАП по очереди записывается вся последовательность записанных ранее значений. Например, 128, и ЦАП выдаёт напряжение в 0.5 вольта, потом 64, и ЦАП выдаёт напряжение 0.25 вольта, и так далее.

Звуковые карты для ПК в их современном понимании, какое определил Creative Sound Blaster в 1989 году, как раз и являются комбинацией этих двух устройств. Причём для игровых и мультимедийных применений нужно только воспроизводить ранее созданные звуковые файлы, то есть достаточно, чтобы компьютер должен быть оснащён ЦАП. На ранних звуковых картах набортный АЦП мог быть и поначалу был заметно менее качественным, чем ЦАП.
Вопрос воспроизведения цифрового звука на компьютере, обладающем достаточным объёмом памяти и ЦАП в виде звуковой карты или хотя бы простейшего устройства типа Covox, решается весьма тривиально. Но что делать, если никакой звуковой карты или самого завалящего ЦАП у компьютера нет?
Спикер в роли ЦАП
Если ЦАП в компьютере нет, нужно просто поискать его получше! Ведь на самом деле самый примитивный ЦАП присутствует всегда, в совершенно любом компьютере. Даже если этот компьютер совершенно не обладает никакими звуковыми устройствами. А IBM PC таковым обладает из коробки, значит, дело в шляпе!
Для начала, у PC Speaker есть бит разрешения его работы. Он работает практически как любой другой однобитный бипер, аналогично тому же Спектруму: на динамик не идёт напряжение, если установить в порте 0, и идёт, если установить 1. По сути это и есть самый простейший из возможных, однобитный ЦАП. А имея даже однобитный ЦАП и достаточно скорости и памяти, можно проигрывать очень даже качественный звук. Или, если ресурсов мало, можно проигрывать хоть какой-нибудь звук.
Самый простой и наивный способ — преобразовать исходный файл в однобитный и просто выводить эти биты в порт спикера. Сделать это можно по-разному, проще всего — взять некий порог, значения ниже которого считать нулём, а выше — единицей. Это будет работать, но качество звучания будет очень низким, очень высокий уровень шума. Нужно больше бит. К тому же, если выводить биты в основном потоке исполнения кода, процессор не сможет делать ничего другого, пока играет звук.
Другой популярный способ — постоянно менять 0 и 1, но изменять задержку между изменениями. Это требует особого кодирования файла — в нём нужно хранить не амплитуду выборок, а время между ними, но оно, как правило, более компактное. Шум примерно такой же. Этот способ использовался на ZX Spectrum в программах типа SpeakEasy. Толку от него немного, но это полезный промежуточный шаг для понимания следующего способа.

Значительно улучшить качество звука можно применением метода широтно-импульсной модуляции (ШИМ) он же Pulse-Width Modulation (PWM). Идея очень проста. Выходной бит устанавливается в 1 через равные промежутки времени с некоторой высокой частотой, и сбрасывается в 0 через определённое время после установки. Чем дольше он оставался в 1, тем больше энергии в выходном сигнале, выше среднее напряжение.
Если сгладить выход фильтрующей цепочкой в виде резистора и конденсатора, или хотя бы инерцией электромагнитной системы в громкоговорителе, отфильтровав ненужную высокочастотную составляющую, возможно получить весьма неплохой ЦАП, используя всего один бит. Этот принцип используется повсеместно. В наше время его особенно любят в стане ардуинщиков.
Метод ШИМ способен дать очень высокое качество, но всё упирается в реализацию его на практике. Задержки нужно выставлять с очень высокой точностью, чтобы получить больше возможных значений напряжения на выходе, а также нужно делать это с частотой выше порога слышимости. Для слабых компьютеров 1980-х годов это была довольно сложная, но всё же решаемая задача. И именно в способе её решения средствами аппаратуры IBM PC скрывается секрет говорящего спикера.
Скрытые таланты таймера
Конечно, можно выдерживать нужные периоды времени точным расчётом времени исполнения кода, как на многих 8-битных компьютерах. Но на IBM PC снова возникает проблема разнообразия конфигураций, очень сильно отличающихся по производительности. И опять же, это занимает всё время процессора, не давая воспроизводить звук одновременно с игровым процессом.

И тут как нельзя кстати пришлось то, как именно используется программируемый таймер 8253 в IBM PC, являющийся в том числе основой PC Speaker’а, а именно, как и в каких целях задействованы три его канала.
Как уже говорилось выше, лишь один из каналов таймера управляет динамиком. Другой канал занимался регенерацией ОЗУ в первых моделях IBM PC и далее перестал использоваться. Наконец, последний канал генерирует программируемое маскируемое прерывание с заданной частотой — процессор периодически останавливает выполнение основной программы и запускает короткую процедуру (обработчик прерывания), а потом продолжает выполнять основной код.
Процедура прерывания таймера используется в MS-DOS для отслеживания реального времени в часах и календаре. Это прерывание имеет частоту в 18.2 Гц, наименьшую из возможных, но ничто не мешает сделать её выше. И если в компьютере установлен достаточно мощный процессор — ну хотя бы самый быстрый 286-ой на 25 мегагерцах, или младшая трёхшка — чтобы успеть выполнять обработчик прерывания так часто, это могут быть даже десятки килогерц. И может быть даже останется время между прерываниями на работу основной программы!
Другой важный факт про таймер 8253 — его каналы имеют много разных режимов работы. Помимо режима 2, генерирующего «меандр», который используется и для запуска маскируемых прерываний, и для генерации «квадратного» тона на системном динамике без участия процессора, есть и другие. Один из них, режим 0, позволяет выдавать одиночный импульс заданной длительности: сначала выход устанавливается в 1, заданное время остаётся неизменным, и по прошествии заданного количества тактов таймера сбрасывается в 0.

Дальше идея, как можно применить эти возможности для реализации ШИМ, лежит на поверхности. С помощью режима 2 вызывать прерывания с нужной частотой порядка десятка килогерц, а в обработчике прерывания с помощью режима 0 можно генерировать в канале динамика импульсы разной длительности.
Возможности этой техники ограничены тактовой частотой таймера и точностью счёта. Частота на входе микросхемы 8253 составляет 1193182 герц, а разрядность счётчиков-делителей — 16 бит. Для реализации ЦАП нужно как-то разделить эти такты на частоту дискретизации и длительность импульса, то есть условное разрешение ЦАП. При этом частота дискретизации должна быть выше порога слышимости человеческим ухом, иначе она будет ощущаться как фоновый высокочастотный свист, а длительность импульса желательно уложить в 8-битное значение, чтобы запускать импульс записью только одного байта.
На практике оптимальным значением является 64 такта на импульс максимальной длительности — это даёт 64 условных «уровня громкости» или «ступеньки». Деление 1193182/64 даёт предельно возможную частоту дискретизации для такого разрешения: 18643 герц, что чуть-чуть ниже порога слышимости. Можно повысить частоту дискретизации, снизив динамический диапазон ЦАП до 32 или даже 16 «ступенек», но это повышает шум и требует больше ресурсов компьютера для обеспечения более высокой частоты дискретизации. Увеличивать же разрешение не имеет смысла, так как тогда несущая частота уже полностью попадает в слышимый диапазон и будет слышна как постоянный высокочастотный свист.
Игры и программы
С унылой технической частью статьи мы наконец-то покончили. Самое время обмазаться ностальгией и вспомнить, в каких же играх и программах использовалась эта техника воспроизведения цифрового звука на спикере!
К сожалению, их не так уж много. И возможно, помимо скорого пришествия звуковых карт, на это есть ещё одна, странная и досадная причина.
Сейчас это сложно уложить в голове, но описанная выше технология воспроизведения оцифровок на таймере с применением ШИМ, весьма очевидная даже в те годы, была запатентована Стивом Витезлом в 1989 году (патент US5054086A), и под названием RealSound лицензирована разным компаниям для использования в играх.

Возможно, существование такого патента приостановило повсеместное внедрение технологии в коммерческих продуктах американского происхождения, но, к счастью, не остановило разработчиков из других стран и энтузиастов демосцены, которые задействовали подобный способ в своих разработках.
Так или иначе, оригинальный RealSound успешно применялся в играх Access Software и Legend Entertainment, выходивших в 1987-1993 годах. Трудно сказать, какая из игр этих компаний была наиболее известной, но в качестве отличного примера, передающего дух эпохи, хочется упомянуть игру Crime Wave (1990):
Также примерно в то же самое время в своих играх активно использовала свою реализацию спикерного цифрового звука французская компания Loriciel. К слову, произошло занимательное совпадение: главным хитом этой компании является (весьма спорная) игра Jim Power, к созданию одного из портов которой я изрядно [приложил собственную руку](https://habr.com/ru/companies/ruvds/articles/804939/). А теперь вот рассказываю и про другие аспекты деятельности этой компании.
Пожалуй, самым известным примером разработок авторства Loriciel является игра Mach 3. Но видео с ней я уже вставил в начале статьи, поэтому приведу какой-нибудь другой пример. Например, игру Space Racer (1988):
Одним из наиболее заметных примеров цифрового звука на спикере является игра Pinball Fantasies (1995) компании Digital Illusions — к слову, ныне она отвечает за серию Battlefield. Впрочем, помимо спикера игра успешно поддерживала великое множество других звуковых устройств и запомнилась игрокам не только спикером, но и самой музыкой.
Этот пример показывает, что вполне возможно было реализовать цифровой звук высокого качества одновременно с игровым процессом на компьютере уровня 386DX33:
В Pinball Fantasies играет обычная четырёхканальная трекерная музыка в формате MOD, выводимая на любую выбранную звуковую карту. Основатели Digital Illusions — выходцы с демосцены, и помимо них из того же места вышли и другие выходцы, авторы разнообразных музыкальных редакторов формата «трекер». Так сложилось, что многие трекеры для MS-DOS тоже поддерживают PC Speaker в качестве одного из звуковых устройств, включая самые популярные Fast Tracker II и Impulse Tracker.
Ну и, конечно, никак нельзя не упомянуть главнейший столп всей ностальгии по цифровому звуку на спикере, про который уже сложены легенды — драйвер для Windows 3.1, также работающий и в Windows 95. Особенностью его реализации была полная остановка действия на экране, включая даже движение курсора мыши, на время проигрывания цифрового звука.
На самом деле, таких драйверов было даже два: speaker.drv разработки самой Microsoft, и альтернативный speakr.drv, разработанный Джоном Риджесом, кем бы он ни был. Аналогичный драйвер существовал и для главной альтернативы Windows тех лет — «полуоси» OS/2. Назывался он sprkdd.sys.
Из более современных примеров крутого цифрового звука на спикере мы можем обратиться к продуктам жизнедеятельности демосцены: демо Area 5150 (2022). Ваш пострел и там поспел, и рассказал об этом на Хабре, но я делал там обычный монофонический спикерный саундтрек. А вот замечательная одноканальная цифровая музыка в концовке демо принадлежит перу иного автора, cTrix:
Сделай сам
С унылой технической частью мы ещё не покончили! Ведь у нас тут не Пикабу, и ограничиться одной лишь ностальгией на техническом ресурсе было бы слишком просто. Срочно пишем коды!
Это будет простейший пример проигрывателя 8-битного звукового файла, работающий в реальном режиме под MS-DOS. Для простоты в нём не будет подгрузки с диска и буферизации, файл должен целиком помещаться в стандартные 640 килобайт ОЗУ. Также для простоты не будет никакой оптимизации.

Для простоты я написал пример на C в Borland C++, без ассемблерных вставок. Поэтому для работы он требует более производительного процессора, чем мог бы. Нормальная же реализация на ассемблере может работать даже на 8086 процессоре.
Собственно, изложенный выше принцип работы и комментарии в коде раскрывают происходящее:
#include <conio.h>
#include <stdio.h>
#include <alloc.h>
#define SPEAKER_PORT 0x61
#define PIT_CHANNEL0 0x40
#define PIT_CHANNEL1 0x41
#define PIT_CHANNEL2 0x42
#define PIT_CONTROL 0x43
void interrupt(*old_pit_isr)(...);
unsigned char* wave_data = NULL;
unsigned long wave_size = 0;
unsigned long wave_ptr = 0;
void interrupt new_pit_isr(...)
{
if(wave_ptr < wave_size)
{
outportb(PIT_CHANNEL2, wave_data[wave_ptr++]);
}
old_pit_isr();
}
int main(int argc,char *argv[])
{
if(argc < 2)
{
printf("Usage: pcspkwav.exe filename.wav (must be 8-bit mono, under 18.9 kHz)\n");
return 0;
}
/* read file into RAM */
FILE* file = fopen(argv[1], "rb");
if(!file)
{
printf("Error: Can't open %s\n", argv[1]);
return -1;
}
fseek(file, 0, SEEK_END);
wave_size = ftell(file);
fseek(file, 0, SEEK_SET);
wave_data = (unsigned char*)malloc(wave_size);
if(!wave_data)
{
printf("Error: Can't allocate RAM for sample\n");
fclose(file);
return -1;
}
fread(wave_data, 1, wave_size, file);
fclose(file);
unsigned long sample_rate = wave_data[0x18] + (wave_data[0x19] << 8) + (wave_data[0x1a] << 16) + (wave_data[0x1b] << 24);
printf("Playing %s ", argv[1]);
printf("(%lu bytes, ", wave_size);
printf("%lu hz)\n", sample_rate);
/* set play pointer, skip WAVE header */
wave_ptr = 0x2c;
/* pre-convert wave data into something suitable for direct PWM output (6-bit samples) */
for(unsigned long i = wave_ptr; i < wave_size; ++i)
{
wave_data[i] = wave_data[i] >> 2;
}
/* set custom timer interrupt handler at sample rate */
unsigned long period = 1193180 / sample_rate;
outportb(PIT_CONTROL, 0x36);
outportb(PIT_CHANNEL0, period & 255);
outportb(PIT_CHANNEL0, period / 256);
/* set PIT mode to channel 2 active, mode 0, LSB only, so it will generate pulses of required width at each LSB write */
outportb(PIT_CONTROL, 0x90);
/* enable speaker output */
outport(0x61, inport(0x61) | 3);
/* set new interrupt handler, it starts to play immediately after this */
old_pit_isr = getvect(0x08);
setvect(0x08, new_pit_isr);
/* wait while sample is playing on the interrupt, can do something else while it plays */
while(wave_ptr < wave_size)
{
printf("%lu\r",wave_ptr);
}
/* restore normal timer interrupt at ~18.2 Hz rate */
outportb(PIT_CONTROL, 0x36);
outportb(PIT_CHANNEL0, 0);
outportb(PIT_CHANNEL0, 0);
setvect(0x08, old_pit_isr);
/* disable speaker output */
outport(0x61, inport(0x61) & ~3);
/* unload wave data */
free(wave_data);
return 0;
}
И вот закономерный результат работы этой программы:
Скачать исходник и скомпилированный EXE для самостоятельного запуска можно в моём блоге на Бусти (бесплатно, без SMS и регистрации).
Заключение
Удачная комбинация возможностей таймера в IBM PC прямо-таки напрашивалась на креативное использование. Как известно, в умелых руках и один бит — балалайка, что в результате позволило получить довольно качественный цифровой звук на самом примитивном звуковом устройстве.
Жаль только, что эта технология не получила более широкого распространения, когда была действительно востребована. Тем не менее, она навсегда осталась любопытнейшим артефактом культурного слоя в истории компьютерного звука. А я, как цифровой археолог, продолжаю свои раскопки.
© 2025 ООО «МТ ФИНАНС»
Комментарии (9)
zx80
10.10.2025 10:37Подскажи код, как на C в Borland C++ написать программку воспроизводящую мелодию CHRONOS с ZX-Spectrum 48К ? Это у меня самая любимая биперная мелодия.
shiru8bit Автор
10.10.2025 10:37Это не самая тривиальная задачка, так сходу я её не смогу решить. Сам по себе движок в Chronos довольно замороченый, и его трудно положить на PC. Пожалуй, проще написать прямо целиковый эмулятор Спектрума без экрана и запускать в нём оригинальный код Z80, чем разбирать и переносить. Алгоритм синтеза там примерно такой, какой я показывал в одной из статей, только пять каналов, до пяти импульсов одновременно, а проблемы в том, что пять импульсов очень сильно влияют друг на друга, каналы расстраивают, друг друга, и ноты в композиции вручную настроены так, чтобы это компенсировать в каждом конкретном случае. Ну и сама структура трека сложная, трудно распарсить.
dlinyj
10.10.2025 10:37Громадное спасибо за статью!
Рад, что наши просьбы не прошли мимо. Очень и очень полезно. Можете, пожалуйста, скинуть exe-шник самим послушать?shiru8bit Автор
10.10.2025 10:37Пожалуйста! Да, конечно. Выложил в посте в своём блоге, там должно качаться без регистрации.
drWhy
10.10.2025 10:37"Спикеры: классический и современный"
Не, не так - спикер и пискер. Таки разные весовые категории.
Когда пошли "мультимедийные" компьютеры - со встроенным аудио и часто сидиромом, "спикер" частенько стали подключать к звуковой карте. Также у брендовых компиков встречается подобное.Covox, mod, stm - наше всё.
Синтезатор Ямаха - апогей апофеоза.
Спасибо за ностальгии сеанс.
dlinyj
10.10.2025 10:37У меня на моей сборке подключён к SB16, если нет входного канала для Speaker, то я сделал схему подключения через разъём дочерних плат Подключаем PC-speaker к звуковой карте ES1868F
rbdr
10.10.2025 10:37Наш товарищ выпускал даже мелкосерийную "постсоветскую" аудиокарту Selen Sound Card. По сути улучшенный стереоковокс в ISA-исполнении. Но звук был уже на порядок лучше, также с усилителем.
infund
В лохматые годы попадался файлец READY.COM, при запуске которого из спикера раздавался бодрый хрип "Я готова, мой повелитель!"
BiTL
мне другой "файлец" вспомнился