Синтаксиса С# не знаю, но на VB .NET делаю так:
В стандартном компоненте SerialPort есть событие ComPort_PinChanged
Задаю параметры, открываю COM-порт, проверяю жив ли модем и отвечает (AT-команда: "AT", ответ: "OK") и жду.
По событию ComPort_PinChanged обрабатываю тип события.
Событиями могут быть CD, Cts, Dsr, Break и Ring то же.. .
Получаем, например, три Ring, AT-командой к модему поднимаем трубку.
Как проиграть музыку не "войсовскому" модему не знаю, не пробовал, но говорят, что можно.
Зависит от модели модема.
Как отследить входящий звонок, поднять трубку и проиграть аудио файл?
пишу на C#