This is my little Crew Chief application, which works for PCars and RaceRoom.
A massive thankyou to the guys here who have provided some terrific bug reporting, suggestions, feedback, donations, and moral support. This is still a work-in-progress (it always will be) so will be continue to improve and mature - there might be bugs, but it should work.
Here's a grotty video of it in action on the PC. I make a few voice commands in this video, but because the crew chief voice is me, it makes it sound like crew chief is talking to himself
Here's one of the Android app
And another, with pit stuff and weather transitions
Here's a quick guide on how to get the app running. *This is for version 3. Version 4 works in a similar way but handles the downloading and installation of sound packs for you*:
This application runs in the background while you play Project Cars. It reads data from the Shared Memory block that PCars writes to, and it uses it to trigger audio messages. It's intended to replace the built in race engineer, providing a different (and hopefully better) take on the proceedings. To run this windows 7 and 8 / 8.1 users will need to install the .Net framework version 4.5. Then just install app and run it, and click the two 'download' buttons (for sounds and driver names). Once that's done, restart the app.
Enable 'shared memory' from the Project Cars visual settings options.
Download the installer for the app here:
CrewChief version 4.
Version 188.8.131.52: Initial (working...) release of Version 4. Lots of improvements and additions
Known Issues Which Aren't Fixable
Project Cars doesn't send opponent laptime data, so the app has to time their laps. In practice and qual sessions this is fairly reliable (because the app can use the time remaining in the session, sent by the game, for its 'clock' when timing). In race sessions with a fixed number of laps the app has nothing it can use as a clock to time the laps, so times them itself. This can lead to opponent lap / sector time inaccuracies if the player pauses the game (the app's clock is still running).
Joining a session part way through (practice or qualify session online) will result in the app having an incomplete set of data for opponent lap and sector times. In such cases the best opponent lap and sector data is inaccurate. For Project Cars, there's nothing I can do about this. The opponent lap and sector times aren't in the shared memory (the app has to time their laps), so the pace and sector delta reports may be inaccurate (they use the fastest lap completed while the app is running). For Raceroom we can get the fastest opponent lap time, but if this lap was completed before the app was running, the sectors within that lap aren't accessible. In this case the pace report will include the lap time delta, but there'll be no sector delta reports.
In both cases as soon as an opponent sets a faster lap, the app will have up to date best lap data so the pace and sector reports will be accurate and complete.
Project Cars doesn't send opponent car class data, so the app has to assume that all drivers in the race are in the same car class. For multiclass races, all pace and other reports will be relative to the overall leader / fastest car.
Project Cars doesn't have a distinct pre-start procedure phase. I've added some more messages before the 'get ready' but there's a risk here that they might delay the 'get ready' message.
Detecting 'good' passes isn't really feasible. I've tried to limit the 'good pass' messages to overtakes that are reasonably 'secure', don't result in the other car slowing excessively, and don't involve the player going off-track. I can't, for example, tell the difference between a clean pass and a bump-and-run punt, so you might get congratulated for driving like a berk.
Windows 7 and 8 / 8.1 users will need to install .net 4.5 to use the app. This is already part of windows 10. Download the installer, run it, start the app and download the sound packs from the app. Enable share memory or UDP in PCars (both work well). Select a game from the list at the top right. Click the "Start Application" button. Then fire up the game and be amazed at my poor voice acting.
Running with voice recognition
If you want to use voice recognition, download the correct speech recognition installers for your system (speech_recognition_32bit.zip or speech_recognition_64bit.zip).
The 64 bit installers are here:
The 32 bit installers are here:
Alternatively, the Microsoft download links are, for the runtime installer (do this one first)
For the language packs (use which ever en-XX best suits your location / accent)
Run SpeechPlatformRuntime.msi (this is the MS speech recognition engine), then run MSSpeech_SR_en-GB_TELE.msi or MSSpeech_SR_en-US_TELE.msi depending on your preferred accent (these are the 'cultural info' installers). If you want to use US speech recognition (MSSpeech_SR_en-US_TELE.msi) you must modify the "speech_recognition_location" property to "en-US". This can be done by modifying the property value in the application's Properties area. If you're happy with en-GB you don't need to do anything other than run the 2 speech recognition installers.
For speech recognition, you need a microphone configured as the default "Recording" device in Windows.
To get started, run the app and choose a "Voice recognition mode". There are 3 modes (the radio buttons at the bottom right). "Disabled" means that the app won't attempt any speech recognition. "Hold button" means you have to hold down a button while you speak, and release the button when you're finished. "Toggle button" means you press a button once to start the speech recognition, and the app will continue to listen and process your spoken requests until you press the button again to switch it off (while the app is listening you can make as many voice requests as you like, you don't need to toggle speech recognition off and back on again if you want to ask another question). "Always on" means the app is always listening for and processing speech commands. Selecting "Disabled" or "Always on" from this list makes the app ignore the button assigned to "Talk to crew chief".
If you want to use Hold button or Toggle button mode, select a controller device ("Available controllers" list, bottom left), choose "Talk to crew chief" in the "Available actions" list and click "Assign control". Then press the button you want to assign to your radio button.
You need to speak clearly and your mic needs to be properly set up - you might need to experiment with levels and gain (Microphone boost) in the Windows control panel. If he understood he'll respond - perhaps with helpful info, perhaps with "we don't have that data". If he doesn't quite understand he'll ask you to repeat yourself. If he can't even tell if you've said something he'll remain silent. There's some debug logging in the main window that might be useful.
I've not finished implementing this but currently the app understands and responds to the following commands:
"how's my [fuel / tyre wear / body work / aero / engine / transmission / suspension / pace ]"
"how are my [tyre temps / tyre temperatures / brakes / brake temps / brake temperatures / engine temps / engine temperatures]"
"what's my [gap in front / gap ahead / gap behind / last lap / last lap time / lap time / position / fuel level]"
"keep quiet / I know what I'm doing / leave me alone" (switches off messages)
"keep me informed / keep me posted / keep me updated" (switches messages back on)
"how long's left / how many laps are left / how many laps to go"
"spot / don't spot" (switches the spotter on and off - note even in "leave me alone" mode the spotter still operates unless you explicitly switch it off)
"do I still have a penalty / do I have a penalty / have I served my penalty"
"do I have to pit / do I need to pit / do I have a mandatory pit stop / do I have a mandatory stop / do I have to make a pit stop"
"where's [opponent driver last name]"
"what's [opponent driver last name]'s last lap"
"what's [opponent driver last name]'s best lap"
"what's [opponent race position]'s last lap" (for example, "what's p 4's best lap", or "what's position 4's last lap")
"what's [opponent race position]'s best lap"
"what's [the car in front / the guy in front / the car ahead / the guy ahead]'s last lap"
"what's [the car in front / the guy in front / the car ahead / the guy ahead]'s best lap"
"what's [the car behind / the guy behind]'s last lap"
"what's [the car behind / the guy behind]'s best lap"
"what tyre(s) is [opponent driver last name / opponent race position] on" (DTM 2014 only - reports "options" or "primes")
"what are my sector times"
"what's my last sector time"
"who's leading" (this one only works if you have the driver name recording for the lead car)
"who's [ahead / ahead in the race / in front / in front in the race / behind / behind in the race]" (gives the name of the car in front / behind in the race or on the timing sheet for qual / practice. This one only works if you have the driver name recording for that driver)
"who's [ahead on track / in front on track / behind on track]" (gives the name of the car in front / behind in on track, regardless of his race / qual position. This one only works if you have the driver name recording for that driver)
"tell me the gaps / give me the gaps / tell me the deltas / give me the deltas" (switch on 'deltas' mode where the time deltas in front and behind get read out on each lap. Note that these messages will play even if you have disabled messages)
"don't tell me the gaps / don't tell me the deltas / no more gaps / no more deltas" (switch off deltas mode)
"repeat last message / say again" (replays the last message)
"What's the air temp / what's the air temperature / what's the track temp / what's the track temperature" (current air / track temps in celsius)
[TODO] version 4 voice recognition additions, e.g. "what are my brake temps"
Other button assignments
You can assign the 'toggle spotter on/off' and 'toggle race updates on/off' to separate buttons if you want to be able to toggle the spotter function and toggle the crew chief's updates on or off during the race. This doesn't require voice recognition to be installed - simply run the app, assign a button to one or both of these functions, and when in-race pressing that button will toggle the spotter or crew chief on and off.
The settings can be accessed by clicking the "Properties" button in the app. This displays a popup window where you can tweak stuff if you want to. This interface is a bit rubbish but should let you tweak settings if you want to, although the properties are all (currently) undocumented. If you do change something in this interface, the app needs to restart to pick up the change - the "Save and restart" button should do this.
Each property has a "reset to default" button, or if you get completely stuck you can close the app and delete the user configuration folder and it should reset everything.
This is untested. If your controller doesn't show up in the list of available controllers you can set the "custom_controller_guid" property to the GUID of your controller device. If this is a valid controller GUID the app will attempt to initialise it an add it to the list of available controllers.
Program start arguments
If you want to have the game pre-selected, start the app like this for PCars: [full path]\CrewChiefV4.exe PCARS_64BIT. Or use R3E or PCARS_32BIT.
This can be used in conjunction with the launch_pcars / launch_raceroom / [game]_launch_exe / [game]_launch_params and run_immediately options to set crew chief up to start the game selected in the app launch argument, and start its own process.
If you want to run Crew Chief on your 4th CPU core only, and want have the application launch project cars (64bit) and start running immediately (i.e. just launch Crew Chief and everything else is done for you, no need to click anything else to start Crew Chief listening or launch PCars) you first need to make a couple of Properties changes. Go to the properties screen and set the "pcars64_launch_exe" property to c:/games/steam/steamapps/common/pCars/pCARS.exe (assuming steam is installed in c:/games), check the "launch_pcars" option, and check the "run_immediately" option. Then create a shortcut to CrewChiefV4.exe with the parameters cpu4 and PCARS_64BIT, so the "target" field in the short cut properties looks like this:
"C:\games\CrewChiefV4\CrewChiefV4.exe" cpu4 PCARS_64BIT
Running on a single CPU
You can set the processor affinity for Crew Chief in TaskManager, but this will have to be done each time you start the app. Alternatively, you can start the app with an addition argument "cpu1", "cpu2", ... "cpu8", like this:
[full path]\CrewChiefV4.exe cpu4
this will set the processor affinity to the 4th CPU in your system (usually referred to as CPU3 - they're zero-indexed).
Updating the app
The app will tell you if there's a new version and will download and run the updater. If there's a sound pack update or a driver name update the 'download sound pack' and / or 'download driver names' buttons will be enabled.
I made this because I wanted to make it and I enjoy making stuff. Working with the various quirks, errors and omissions in the shared data which the games provide hasn't been much fun, but it's all part of the challenge. Having said that, there are many many hours of hard work invested in this.
If you use it and like it and it becomes a regular and positive part of your sim racing, I'd be grateful if you would consider making a small donation. If only to stop my wife from complaining at me.
My paypal address is firstname.lastname@example.org
Or you can now use this handy donate button. Assuming it works...
Would be great to recoup some of the investment in making this, but the most important thing is that the app is used 'in anger' and enjoyed as part of the sim racing experience. To this end, I'm always on the lookout for bug reports and feature suggestions.
One final point. If the app says "Jim is faster than you", let him through