function Звуки(ключники, события) {
    this.создать = function() {
        this.задано = {};
        this.аудио = {};
        события.подписать(this);
        var тут = this;
        ключники.push(function(ключ, путь, значение) {
            тут.обработатьКлюч(ключ, путь, значение);
        });
    };

    this.обработатьКлюч = function(ключ, путь, значение) {
        if (!путь[0].startsWith("звуки"))
        {
            return;
        }

        var имя = путь[1];
        var свойство = путь.slice(2).join(".");
        
        if (!this.задано[имя])
        {
            this.задано[имя] = {};
        }
        this.задано[имя][свойство] = значение;
    };

    this.обработатьСобытие = function(событие) {
        for (var имя in this.задано)
        {
            var значения = this.задано[имя];
            if (!значения.файл)
            {
                continue;
            }
            for (var свойство in значения)
            {
                if (свойство.startsWith("события"))
                {
                    var значение = значения[свойство];
                    if (событие == значение)
                    {
                        this.воспроизвести(значения.файл, значения.повторять);
                        return;
                    }
                }
            }
        }
    };

    this.воспроизвести = function(файл, повторять)
    {
        if (!this.аудио[файл])
        {
            this.аудио[файл] = new Audio(файл);
        }
        var звук = this.аудио[файл];
        звук.pause();
        звук.currentTime = 0;
        звук.play();

        if (повторять)
        {
            звук.onended = function() {
                звук.play();
            }
        }
    };

    // Конструктор.
    this.создать();
}
