Мммм... с психиатра =) Или с университета по соответствующей специальности (программирование).
Ядро отвечает за обработку прерываний от клавиатуры. Дальше сканкоды клавиатуры переводятся и наименования клавиш добавляется информация о состоянии модификаторов и это отдается на уровень выше. Это все чем является драйвер клавиатуры. (ну там плюс некоторая инициализация по мелочи, но оно отрабатывает 1 раз при старте системы)
Уровнем выше лежит драйвер терминала. Это он отвечает за рисование буковок на экране и интерпритацию имен клавиш+модификаторов в циферки и буковки в нужной кодировке. как это ни странно но драйвер терминала тоже находится в ядре (хотя не странно linux это изначально "маленькая терминальная программка" которую Торвальдс написал для того чтобы коннектиться к настоящим UNIX'ам в университете, учите историю)
read/write - это работа с терминалом (с дескриптором его устройства).
printf/scanf - это уже стандартная C'шная библиотека (пользуется read/write)
это было немного теории
а теперь ложка дегтя. на сколько я помню обычная клавиатура (а в ноуте обычная клавиатура) аппаратно не может обрабатывать нажатие скольки то там клавиш одновременно (если я не прав поправьте меня). так что синтезатор врядли получится. ну разве что по одной/две ноты за раз.