This project presents a plugin for VoiceAttack which integrates with the iRacing SDK to monitor race events and build a list of event markers to be used for replay review.
The iRacing telemetry data is monitored constantly and markers are recorded when any driver has an offtrack incident, overtake, undertake, or radio broadcast. The race start and driver finishes are also entered as markers.
The replay marker data can be reviewed and filtered by car and/or marker type. This makes it easy to go through the replay seeing all the events that were recorded for a specific car, all the events of a particular marker type for any car, or any marker type for any car.
For example:
-
"Filter markers by the current car" Then stepping forward or backward through the next/previous markers will keep the focus on the current car. This alone is an improvement over the native iRacing next/previous incident review.
-
"Filter markers by overtakes" Then only overtake markers will be presented, and still focus will be on the current car.
-
"Clear the marker filters" Return to the default state where all marker types for all cars will be presented.
The provided profile has commands that can be used with speech, but is also intended to work with a gamepad/controller so the use of speech recognition is not required.
Here's a video overview:
This is the controller configuration I use, and what is in the provided VoiceAttack profile. The goal is to make it easy to use the controller to review the replay data. If you are not using voice commands, you will still need to interact with the standard iRacing UI to change cameras. Also note that NUMLOCK on your keyboard will interfere with some of the controls, if things do not appear to be working try toggling NUMLOCK.
The analog stick and trigger inputs are not assigned. You might experiment with mapping those to control the iRacing camera position/orientation to be able to fly the camera around as well. I've tried this with some success but your mileage may vary.
Of course you do not have to use a controller at all. You can bind keyboard/mouse/speech to any command and configure your system however you like.
These are the high level commands in the provided profile:
Spoken Command | Button | Category ▾ |
---|---|---|
Car ahead |
Joystick 1 Button 10 |
A1 Replay Controller |
Car behind |
Joystick 1 Button 9 |
A1 Replay Controller |
Cycle Marker [Type] Filter |
Joystick 1 Button 2 |
A1 Replay Controller |
End of recording |
A1 Replay Controller |
|
Fast forward |
Joystick 1 POV 2 |
A1 Replay Controller |
Frame backward |
A1 Replay Controller |
|
Frame forward |
A1 Replay Controller |
|
Next camera |
A1 Replay Controller |
|
Next iRacing incident |
A1 Replay Controller |
|
Next lap |
Joystick 1 Button 6 |
A1 Replay Controller |
Next marker |
Joystick 1 Button 3 |
A1 Replay Controller |
Play Pause |
Joystick 1 POV 1 |
A1 Replay Controller |
Previous camera |
A1 Replay Controller |
|
Previous iRacing incident |
A1 Replay Controller |
|
Previous lap |
Joystick 1 Button 5 |
A1 Replay Controller |
Previous marker |
Joystick 1 Button 1 |
A1 Replay Controller |
Race Start |
Joystick 1 Button 7 |
A1 Replay Controller |
Rewind |
Joystick 1 POV 4 |
A1 Replay Controller |
Show my car |
Joystick 1 Button 9 + Joystick 1 Button 10 |
A1 Replay Controller |
Slow motion |
Joystick 1 POV 3 |
A1 Replay Controller |
Toggle Car [Marker] Filter |
Joystick 1 Button 4 |
A1 Replay Controller |
Clear [the;] Marker Car [Filter;] |
A2 Markers |
|
Clear [the;] Marker [Filters; filter] |
Joystick 1 Button 8 |
A2 Markers |
Clear [the;] Marker Type [Filter;] |
A2 Markers |
|
Filter markers [by; for; with;] car number |
A2 Markers |
|
Filter Markers [by; for; with;] Incidents |
A2 Markers |
|
Filter Markers [by; for; with;] manual |
A2 Markers |
|
Filter markers [by; for; with;] [my car; me] |
A2 Markers |
|
Filter Markers [by; for; with;] Overtakes |
A2 Markers |
|
Filter Markers [by; for; with;] Radio [broadcasts; salt; chatter; talk; transmissions;] |
A2 Markers |
|
Filter markers [by; for; with;] [the;] [current; this] [car; driver] |
A2 Markers |
|
Filter Markers [by; for; with;] Undertakes |
A2 Markers |
|
[Marker summary; Summarize markers] |
A2 Markers |
|
Set [a; new;] marker |
A2 Markers |
|
[change; set;] [camera;] [to;] blimp [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] chase [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] cockpit [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] far chase [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] gearbox [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] gyro [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] left front [suspension;] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] left rear [suspension;] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] nose [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] pit lane 2 [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] pit lane [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] rear chase [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] right front [suspension;] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] right rear [suspension;] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] [rollbar; roll bar] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] scenic [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] [the;] chopper [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] [tv 1; tv1] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] [tv 2; tv2] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] [tv 3; tv3] [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] TV mixed [camera;] |
A3 Cameras |
|
[change; set;] [camera;] [to;] TV static [camera;] |
A3 Cameras |
|
[jump; go; switch; watch; return; show] [to;] [the;] [race;] [start; beginning] |
A4 Focus |
|
[jump;go;switch;watch;return;show] [to;] [whats happening;] [live;real time;now;the present moment] |
A4 Focus |
|
[show; watch] most exciting |
A4 Focus |
|
Watch car number |
A4 Focus |
|
Watch car position |
A4 Focus |
|
Watch [my car; me] |
A4 Focus |
|
Watch [the;] car ahead |
A4 Focus |
|
Watch [the;] car behind |
A4 Focus |
|
Toggle [say soething; say nothing; speech] |
A5 Speech |
|
Toggle [say;] announcements |
A5 Speech |
|
Print Cameras |
B1 Debug |
|
Print Drivers |
B1 Debug |
|
Print Info |
B1 Debug |
|
Toggle num lock |
C1 iRacing Keypress |
|
[Initialize; reset; re-initialize] [Pit Girl;] [plugin; data;] |
Robertsmania Replay Plugin Commands |
This is a basic set of commands that demonstrates the features of the plugin. Feel free to create your own, modify these or start from scratch.
The provided profile does have the commands setup for speech recognition and it will have the system confirm things like camera changes with speech synthesis.
There are two boolean variables set on initialization that control the speech synthesis. Both of those get set to true by default, but you can easily change that in the Initialize command.
- SayAnything - Controls whether anything is said. If this is true, the system will speak. If it is false it will not say anything.
- SayAnnouncements - Secondary value to determine whether announcements like "Kris Roberts had an Overtake" are made when replay markers are played (but if SayAnything is false, then SayAnnouncements has no effect).
In the default logic for [Next Marker] and [Previous Marker] announcements are made when there is no marker car filter and no marker type filter - it announces the driver and the marker type. If the marker car filter is set but the maker types are on wildcard, it will announce the marker type. If the marker type filter is set, it does not announce anything since that seems like it would get annoying to just call out driver names. Feel free to modify the logic for speech to suit your taste.
Listening - the way I use the system, I have VoiceAttack set to not listen by default. That makes it so I can talk on stream about whatever and have no fear that it will accidently execute commands if I say words that would otherwise trigger actions. In the profile options I specify "Pit Girl" on the Profile General tab as the value to "Override listening if my spoken command begins with:". I encourage you to consider using a different name or identifier for your system.
The plugin provides these commands to be used within a VoiceAttack profile:
RobertsmaniaReplay commands:
Print_Info
Print_Cameras
Print_Drivers
Set_Camera | {TXT:~~NewCamera}
Get_Camera | {TXT:~~HoldCamera}!
Watch_MyCar
Watch_MostExciting
Watch_CarNumber | {TXT:~~CarNumber}
Watch_CarPosition | {TXT:~~CarPosition}
Check_CarNumber | {TXT:~~CarNumber}!
Check_CarPosition | {TXT:~~CarPosition} {TXT:~~CarNumber}!
Jump_ToLive
Jump_ToBeginning
Marker_Add
PlayMarker_Next | {TXT:MarkerCarFilter} {TXT:MarkerTypeFilter} {INT:~~ReplayBufferSecs}
| {TXT:~~MarkerDriver}! {TXT:~~MarkerType}!
PlayMarker_Previous | {TXT:MarkerCarFilter} {TXT:MarkerTypeFilter} {INT:~~ReplayBufferSecs}
| {TXT:~~MarkerDriver}! {TXT:~~MarkerType}!
PlayMarker_Last
PlayMarker_First
SeekMarker_First
iRacingIncident_Next
iRacingIncident_Previous
Marker_Count | {INT:~~MarkerCount}!
Marker_Summary | {TXT:~~MarkerSummary}! {TXT:~~MostOvertakesCarNum}!
{TXT:~~MostIncidentsCarNum}! {TXT:~~MostBroadcastsCarNum}!
{INT:~~IncidentMarkerCount}! {INT:~~OvertakeMarkerCount}!
{INT:~~RadioMarkerCount}! {INT:~~ManualMarkerCount}!
{INT:~~UndertakeMarkerCount}!
Marker_Summary_CarNumber | {TXT:~~CarNumber} {INT:~~CarNumberMarkerCount}!
{INT:~~CarNumberIncidentMarkerCount}! {INT:~~CarNumberOvertakeMarkerCount}!
{INT:~~CarNumberRadioMarkerCount}! {INT:~~CarNumberManualMarkerCount}!
{INT:~~CarNumberUndertakeMarkerCount}!
Start VoiceAttack with the RobertsmaniaReplay profile/plugin setup.
Join an iRacing session.
Participate.
Use the features of the profile/plugin to review the markers of events that happened in the race:
- Go to the start of the race
- Set the Marker Car Filter to follow your car
- Cycle through the race markers showing all the events recorded for your car
- Go back to the start
- Clear the Marker Filters
- Set the Marker Type Filter to something specific like Overtakes
- Cycle through the markers seeing all the overtakes in the session
- Or whatever you like...
Leave that session and join another. Repeat.
Enjoy.
You must own a license for VoiceAttack to be able to use this (or any other) plugin: https://voiceattack.com/purchase.aspx.
Download the RobertsmaniaReplay.vax file from the Releases Page on this repository.
In the VoiceAttack options, disable plugin support if it is currently enabled and restart VoiceAttack.
Import the RobertsmaniaReplayReplay.vax. This will install the plugin and sample profile.
Enable plugin support in the VoiceAttack options. Restart VoiceAttack.
Select the RobertsmaniaReplayReplay profile. The plugin should be initialized and the commands in the profile are available.
If you are new to VoiceAttack, be sure to run through the training to get the windows speech recognition to recognize your voice.
Check out "Train your speech engine" and the other helpful tips: VoiceAttack Tips and How-To - https://voiceattack.com/howto.aspx