Sorry for butting in when John has answered the question, but when I glanced at this I remembered that the question arose before, but then the poster wanted the event title spoken, rather than just the fact of an alarm. Here is a script to do that.
AK
click here to
open this script in your editor
<pre style="font-family: 'Monaco', 'Courier New', Courier, monospace; overflow:auto; color: #222; background: #DDD; padding: 0.2em; font-size: 10px; width:400px">(*
called from iCal as on alarm, will speak the title of the alarm event
won't work for repeating events
AK ITCarlow Nov 2004
*)
set Now to current date
-- Adjust FuzzSeconds to suit; if too big, close events will speak several times
set FuzzSeconds to 30
tell application "iCal"
set MyEvents to every event of every calendar where ((start date of it) ≥ (current date))
repeat with SubEvents in MyEvents --separate list for each calendar
repeat with ThisEvent in SubEvents --scan the list looking for events that have triggered us
if (count of open file alarm of ThisEvent) = 1 then
set MinutesBefore to (trigger interval of open file alarm of ThisEvent) as number
set TriggerInt to (Now - ((start date of ThisEvent) + 60 * MinutesBefore)) --notionally 0 for firing event
if (TriggerInt < FuzzSeconds) and (TriggerInt > (-FuzzSeconds)) then
say (summary of ThisEvent as text)
--could say other fields too eg location, description ...
end if
end if
end repeat
end repeat
end tell
</pre>