Вы можете сделать это, используя библиотеку System.Speech . взгляните на этот пример
Более простой подход ...
Я предполагаю, что сохранение в дереве объектов происходит в транзакции. Вы можете изменить таблицы аудита, чтобы добавить уникальный идентификатор для каждой транзакции.
Таким образом, вы сможете просматривать историю аудита как набор наборов изменений - например, увидеть все изменения, внесенные в одну транзакцию.
Не совсем то, о чем вы просите, но было бы намного легче достичь и дать много преимуществ. То, что вы просите, было бы очень сложно реализовать.