Releases: theRTB/ForzaShiftTone
ForzaShiftTone v0.90
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport and Forza Horizon 4/5.
Enable Data Out in Forza Motorsport / Forza Horizon 4/5
To configure Data Out (remote telemetry) in supported Forza games on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom (HUD and Gameplay in Forza Horizon 5)
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash' for Forza Motorsport
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
- If it works, enter the IP address of your laptop instead of 127.0.0.1
TL;DR
- Per gear: Drive around on flat tarmac until you hear a double beep
- Maintain fixed speed if it has trouble locking the gear ratio
- On a flat straight: Hold full throttle starting from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin but able to hit revlimit before the end of the straight
- Try again if you hit the rev limiter for several consecutive seconds with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Current release
ForzaShiftTone.vbs: to launch the application (Preferred)
ForzaShiftTone-debug.bat: to launch the application with an additional commandline window that shows debug information
forzabeep.py: for python users
Changes:
- Large back-end rewrite
- Added shift history window for the past 10 shifts
- Updated shift logic to include the latest FM style shift
Known issues
- Application will on rare occasions crash: related to the UI library and cannot be fixed
- Due to noise in the power curve it is not always possible to derive a correct peak power value in terms of rpm. It can be off by 100 rpm.
- Gear ratios may not reasonably match in-game values for AWD: Front/rear tires may have different sizes
- Probably more, will be added later.
ForzaShiftTone v0.78
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport and Forza Horizon 4/5.
TL;DR
- Per gear: Drive around on flat tarmac until you hear a double beep
- Maintain fixed speed if it has trouble locking the gear ratio
- On a flat straight: Hold full throttle starting from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin but able to hit revlimit before the end of the straight
- Try again if you hit the rev limiter for several consecutive seconds with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out in Forza Motorsport / Forza Horizon 4/5
To enable remote telemetry in Forza Motorsport 8 on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom (HUD and Gameplay in Forza Horizon 5)
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash' for Forza Motorsport
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
Current release
ForzaShiftTone.vbs: to launch the application (Preferred)
ForzaShiftTone-debug.bat: to launch the application with an additional commandline window that shows debug information
Changes:
- Moved from displaying absolute drivetrain ratios to relative ratios between gears
- Removed zipped PyInstaller executables; they are considered a virus to due over-zealous machine-learning detection algorithms.
- Added statistics to power graph: Peak power, power at respected revlimit, 90% power range, relative ratio for >90% power
Known issues
- Application will on rare occasions crash: related to the UI library and cannot be fixed
- Due to noise in the power curve it is not always possible to derive a correct peak power value in terms of rpm. It can be off by 50 or 100 rpm.
- The application assumes at least one frame of negative power as the first frame of shifting
- Some cars shift so fast that power never goes negative: dynamic shift tone will not function properly
ForzaShiftTone v0.77
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport and Forza Horizon 4/5.
TL;DR
- Per gear: Drive around on flat tarmac until you hear a double beep
- Maintain fixed speed if it has trouble locking the gear ratio
- On a flat straight: Apply full throttle starting from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin but able to hit revlimit before the end of the straight
- Try again if you hit the rev limiter for several consecutive seconds with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out in Forza Motorsport / Forza Horizon 4/5
To enable remote telemetry in Forza Motorsport 8 on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom (HUD and Gameplay in Forza Horizon 5)
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash' for Forza Motorsport
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
Current release
ForzaShiftTone.vbs: to launch the application (Preferred)
ForzaShiftTone-debug.bat: to launch the application with an additional commandline window that shows debug information
Changes:
- Removed zipped PyInstaller executables; they are considered a virus to due over-zealous machine-learning detection algorithms.
- Added button to display the power graph:
- Added statistics to power graph: Peak power, power at revlimit, 90% power range, relative ratio for >90% power
Known issues
- Application will on rare occasions crash: related to the UI library and cannot be fixed
- The application assumes at least one frame of negative power as the first frame of shifting
- Some cars shift so fast that power never goes negative: dynamic shift tone will not function properly
- The power curve is not filtered. Noisy data can cause target shift rpm that are incorrect.
ForzaShiftTone v0.76
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport and Forza Horizon 4/5.
TL;DR
- Per gear: Drive around on flat tarmac until you hear a double beep
- Maintain fixed speed if it has trouble locking the gear ratio
- On a flat straight: Apply full throttle starting from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin
- Try again if you hit the rev limiter with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out in Forza Motorsport / Forza Horizon 4/5
To enable remote telemetry in Forza Motorsport 8 on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom (HUD and Gameplay in Forza Horizon 5)
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash' for Forza Motorsport
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
Current release
ForzaShiftTone.vbs: to launch the application (Preferred)
ForzaShiftTone.bat: to launch the application with an additional commandline window that shows debug information
Changes:
- Removed zipped PyInstaller executables; they are considered a virus to due over-zealous machine-learning detection algorithms.
- Added button to display the power graph:
Known issues
- The power curve is not filtered. Noisy data can cause target shift rpm that are incorrect.
ForzaShiftTone v0.75
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport and Forza Horizon 4/5.
TL;DR
- Drive around on tarmac per gear until gear ratio locks
- You will hear a double beep when gear is done
- Maintain fixed speed if it has trouble locking the gear ratio
- On flat tarmac: Apply full throttle from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin
- Try again if you hit the rev limiter with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out in Forza Motorsport
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash'
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
Current release
If you are unsure which file to pick, download the ForzaShiftTone.v0.75.zip file.
The ForzaShiftTone.v0.75_debug.zip file will open a commandline prompt with extra debug information alongside the GUI.
Browser/Windows warnings
The current release is a Pyinstaller package that is not signed. This means various browsers and Smartscreen inside Windows are going to complain the file is unsafe or an uncommon download. Future releases will remain unsigned as it is not worthwhile.
Windows Defender Firewall may also pop up. The program has no ability to send packets, unsure why the firewall still asks for permission. You do not have to allow access if the game runs on the same device.
Changes:
- Revlimit guess disabled by default: program will not beep until gear ratios plus power curve have been collected.
- Added Forza Motorsport support
- Added display of peak Power with associated rpm value
- Power curve locks if it's three or more seconds long
- Hysteris defaults to percentage of engine_max_rpm
- Updated debug target shift rpm to be dynamic (Only for _debug build)
- PI changes now cause a reset
- Respected rev limit at 98.5% by default
- Additional tone offset to 100ms from 83ms for revlimit time distance trigger
- Hysteresis defaults to 0.5% of engine_max_rpm
Enable remote telemetry / Data out in Forza Horizon 5
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox Data Out is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
- For the Microsoft Store version, install the Loopback Utility found on the internet.
Known issues
- The tone offset may not update: Slowing down and shifting up/down to first seems to work best
- The python variant will on rare occasions crash: seems to be mttkinter related and is unlikely to be fixed
- The power curve is not filtered. Noisy data can cause target shift rpm that are incorrect.
ForzaShiftTone v0.7-beta
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Motorsport or Forza Horizon 4/5.
TL;DR
- Drive around on tarmac per gear until you hear a double beep
- Maintain fixed speed if it has trouble locking the gear ratio
- On flat tarmac: Apply full throttle from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin
- Try again if you hit the rev limiter with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out in Forza Motorsport
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> Gameplay & HUD -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- The Data Out Packet Format should be set to 'Car Dash'
- The Microsoft Store version may require a 3rd party Loopback Utility
- It is unknown whether the Data Out functions on the consoles at all
Current release
If you are unsure which file to pick, download the ForzaShiftTone.v0.7-beta.zip file.
The ForzaShiftTone.v0.7-beta_debug.zip file will open a commandline prompt with extra debug information alongside the GUI.
Changes:
- Revlimit guess disabled: program will not beep until gears plus power curve have been collected.
- Added Forza Motorsport support
- Added display of peak Power with associated rpm value
- Power curve locks if it's three or more seconds long
- Hysteris defaults to percentage of engine_max_rpm
- Updated debug target shift rpm to be dynamic (Only for _debug build)
- PI changes now cause a reset
- Respected rev limit at 98.5% by default
- Additional tone offset to 100ms from 83ms for revlimit time distance trigger
- Hysteresis defaults to 0.5% of engine_max_rpm
Considerations
While it is intended to run in the background without consideration while driving once calibrated, there are some requirements to having accurate shift tones:
- The gear ratio per gear requires one second of consistent data. This is best achieved by driving on flat tarmac.
- If the gear ratio for that gear turns green there is no further data collection, it is locked in place.
- Road surfaces are far more accurate than dirt/off-road
- For AWD cars: maintain throttle at a fixed amount at speed for the first gear or two
- The power curve requires a sweep from low RPM all the way to the rev limiter.
- Starting from a low to medium RPM accelerate at full throttle all the way to rev limit. Rev limit should normally be avoided, but must be hit once for accurate data. Avoid impacts. There will be a short triple beep if succesful.
- At minimum the power at the start must be equal or lower than power at revlimit. For most cars this is easy to achieve by starting at around halfway redline
- Boost is taken into account. Some cars with very high boost may require a run at relatively low rpm in a relatively high gear to ensure enough data points at peak boost
- Flat tarmac is preferable.
Browser/Windows warnings
The current release is a Pyinstaller package that is not signed. This means various browsers and Smartscreen inside Windows are going to complain the file is unsafe or an uncommon download. Future releases will remain unsigned as it is not worthwhile.
Windows Defender Firewall may also pop up. The program has no ability to send packets, unsure why the firewall still asks for permission. Untested whether blocking still allows ForzaShiftTone to function.
Implementation
The Tone Offset is dynamic. The program keeps track of the time between a shift tone and an initiated shift, and modifies the running Tone Offset if the tone is early or late.
There are three triggers:
- Shift RPM: The RPM value at which power in the current becomes lower than the power in the next gear: the ideal time to upshift. If the application predicts shift RPM is reached in the defined tone offset time, trigger a beep
- Percentage of revlimit: Uses the tone offset distance as predicted distance to current RPM hitting the listed percentage of rev limit
- Example: A rev limit of 7500 and a value of 98.5% triggers a beep if it predicts 7387.5 rpm will be reached in 283 milliseconds
- Time distance to revlimit: uses the tone offset value plus the revlimit ms value as predicted distance to current RPM hitting the defined revlimit. Defaults to 100 milliseconds, which leads to a prediction distance of 383ms.
The delay between beep triggers is currently set to 0.5 seconds. This time-out is shared between the three triggers.
If you choose to not shift and remain above the trigger rpm, the program will not beep again even if revlimit is hit.
Enable remote telemetry / Data out in Forza Horizon 5
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox Data Out is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
- For the Microsoft Store version, install the Loopback Utility found on the internet.
Settings
The settings are saved to config.json on exit. This includes Tone offset, Hysteresis, Revlimit %, Revlimit ms and Volume.
Remote telemetry sends data at 60 packets per second. The offset variables (Tone offset, revlimit ms) while defined in milliseconds currently use packet counts in the backend.
There is one packet per 16.667 milliseconds, approximately.
Per gear:
- Target: Derived shift rpm value. This requires the ratio of the current gear and the next gear to be determined (green background)
- Ratio: Derived gear ratio including final ratio. Final ratio cannot be separately derived and for AWD the ratio is not identical to the in-game gearing values.
General configuration:
- Revlimit: The limit on engine RPM by its own power. Revlimit is derived upon finishing a full throttle sweep up to revlimit.
- Tone offset: Predicted distance between the beep trigger and the trigger rpm value. This should not be taken as reaction time and minimized. It should be regarded as the time you can consistently respond to the tone with the least amount of mental effort. Defaults to 283 ms.
- Revlimit %: The respected rev limit in percentage of actual rev limit. This is to create a buffer for transients that could cause the engine to cut out due to hitting actual rev limit. Defaults to 98.5%.
- Revlimit ms: The minimum predicted distance to actual rev limit. This is to create a buffer for fast changes in RPM that would otherwise lead to hitting actual rev limit, such as in first gear. Defaults to 100ms.
- Hysteresis: Hysteresis may be set as another layer to smooth rpm. An intermediary rpm value is updated only if the change in rpm is larger than the hysteresis value, which is then used for the shift beep tests. Defaults to 0.5% of maximum engine RPM.
- Volume: Adjusts the volume of the beep in four steps total. Each step is about half as loud as the previous, where the second loudest is the default.
- Active tickbox: If unticked, application will not track incoming packets and therefore not beep or update.
- Edit tickbox: If unticked, the up and down arrows for the Tone offset, Revlimit ms/% and Hysteresis values do not function. This is to avoid accidental clicks.
- Reset button: If pressed, reset revlimit and all values for all gears. Configuration values are unchanged. If the UI is unresponsive, restart the application.
Known issues
- The tone offset will not update: Slowing down and shifting up/down to first seems to work best
- The python variant will on rare occasions crash: seems to be mttkinter related and is unlikely to be fixed
- The power curve is not filtered. Noisy data can cause target shift rpm that are incorrect.
ForzaShiftTone v0.65
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Horizon 5.
TL;DR
- Drive around on tarmac per gear until you hear a double beep
- On flat tarmac: Apply full throttle from low rpm until you hear a triple beep
- Use a gear with low/no wheelspin
- Try again if you hit the rev limiter with no triple beep
- Be aware that false positives exist: not every beep is an upshift.
Enable remote telemetry / Data out
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox Data Out is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
- For the Microsoft Store version, install the Loopback Utility found on the internet.
Current release
If you are unsure which file to pick, download the ForzaShiftTone.v0.65.zip file.
The ForzaShiftTone.v0.65_debug.zip file will open a commandline prompt with extra debug information alongside the GUI.
Changes:
- Revlimit guess disabled: program will not beep until gears plus power curve have been collected.
- Power curve locks if it's three or more seconds long
- Hysteris defaults to percentage of engine_max_rpm
- Updated debug target shift rpm to be dynamic (Only for _debug build)
- PI changes now cause a reset
- Respected rev limit at 98.5% by default
- Additional tone offset to 100ms from 83ms for revlimit time distance trigger
- Hysteresis defaults to 0.5% of engine_max_rpm
Considerations
While it is intended to run in the background without consideration while driving once calibrated, there are some requirements to having accurate shift tones:
- The gear ratio per gear requires one second of consistent data. This is best achieved by driving on flat tarmac.
- If the gear ratio for that gear turns green there is no further data collection, it is locked in place.
- Road surfaces are far more accurate than dirt/off-road
- For AWD cars: maintain throttle at a fixed amount at speed for the first gear or two
- The power curve requires a sweep from low RPM all the way to the rev limiter.
- Starting from a low to medium RPM accelerate at full throttle all the way to rev limit. Rev limit should normally be avoided, but must be hit once for accurate data. Avoid impacts. There will be a short triple beep if succesful.
- At minimum the power at the start must be equal or lower than power at revlimit. For most cars this is easy to achieve by starting at around halfway redline
- Boost is taken into account. Some cars with very high boost may require a run at relatively low rpm in a relatively high gear to ensure enough data points at peak boost
- Flat tarmac is preferable.
Browser/Windows warnings
The current release is a Pyinstaller package that is not signed. This means various browsers and Smartscreen inside Windows are going to complain the file is unsafe or an uncommon download. Future releases will remain unsigned as it is not worthwhile.
Implementation
The Tone Offset is dynamic. The program keeps track of the time between a shift tone and an initiated shift, and modifies the running Tone Offset if the tone is early or late.
There are three triggers:
- Shift RPM: The RPM value at which power in the current becomes lower than the power in the next gear: the ideal time to upshift. If the application predicts shift RPM is reached in the defined tone offset time, trigger a beep
- Percentage of revlimit: Uses the tone offset distance as predicted distance to current RPM hitting the listed percentage of rev limit
- Example: A rev limit of 7850 and a value of 99.2% triggers a beep if it predicts 7787.2 rpm will be reached in 283 milliseconds
- Time distance to revlimit: uses the tone offset value plus the revlimit ms value as predicted distance to current RPM hitting the defined revlimit. Defaults to 100 milliseconds, which leads to a prediction distance of 383ms.
The delay between beep triggers is currently set to 0.5 seconds. This time-out is shared between the three triggers.
If you choose to not shift and remain above the trigger rpm, the program will not beep again even if revlimit is hit.
Settings
The settings are saved to config.json on exit. This includes Revlimit %, Revlimit ms, Tone offset, Hysteresis, and Volume.
Remote telemetry sends data at 60 packets per second. The offset variables (Tone offset, revlimit ms) while defined in milliseconds currently use packet counts in the backend.
There is one packet per 16.667 milliseconds, approximately.
Per gear:
- Target: Derived shift rpm value. This requires the ratio of the current gear and the next gear to be determined (green background)
- Ratio: Derived gear ratio including final ratio. Final ratio cannot be separately derived and for AWD the ratio is not identical to the in-game gearing values.
General configuration:
- Revlimit: The limit on engine RPM by its own power. Revlimit is derived upon finishing a full throttle sweep up to revlimit.
- Tone offset: Predicted distance between the beep trigger and the trigger rpm value. This should not be taken as reaction time and minimized. It should be regarded as the time you can consistently respond to the tone with the least amount of mental effort. Defaults to 283 ms.
- Revlimit %: The respected rev limit in percentage of actual rev limit. This is to create a buffer for transients that could cause the engine to cut out due to hitting actual rev limit. Defaults to 99.2%.
- Revlimit ms: The minimum predicted distance to actual rev limit. This is to create a buffer for fast changes in RPM that would otherwise lead to hitting actual rev limit, such as in first gear. Defaults to 83ms.
- Hysteresis: Hysteresis may be set as another layer to smooth rpm. An intermediary rpm value is updated only if the change in rpm is larger than the hysteresis value, which is then used for the shift beep tests. Defaults to 0.5% of maximun engine RPM.
- Volume: Adjusts the volume of the beep in four steps total. Each step is about half as loud as the previous, where the loudest is the default.
- Active tickbox: If unticked, application will not track incoming packets and therefore not beep or update.
- Edit tickbox: If unticked, the up and down arrows for the Tone offset, Revlimit ms/% and Hysteresis values do not function. This is to avoid accidental clicks.
- Reset button: If pressed, reset revlimit and all values for all gears. Configuration values are unchanged. If the UI is unresponsive, restart the application.
ForzaShiftTone v0.6
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Horizon 5.
Enable remote telemetry / Data out
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox Data Out is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
- For the Microsoft Store version, install the Loopback Utility found on the internet.
Current release
If you are unsure which file to pick, download the ForzaShiftTone.v0.6.zip file.
The ForzaShiftTone.v0.6_debug.zip file will open a commandline prompt with extra debug information alongside the GUI.
Changes:
- Double beep on locking gear ratio per gear
- Triple beep if the power curve has been succesfully collected the first time
- Adjustments to filtering for boost to fix some cars never passing the various checks for the power curve
- Revlimit turns green if a power curve has been collected
- Various settings have been softcoded into config.json
- First attempt to fix scaling according to Windows DPI scaling
Considerations
While it is intended to run in the background without consideration while driving, there are some requirements to having accurate shift tones:
- Drive for over one second in a single gear on road. After this the gear values will lock and turn green. There will be a short double beep.
- Road surfaces are far more accurate than dirt/off-road
- For AWD cars: maintain throttle at a fixed amount at speed
- Starting from a low to medium RPM accelerate at full throttle all the way to rev limit. Rev limit should normally be avoided, but must be hit once for accurate data. Avoid impacts and ignore the shift beep. There will be a short triple beep if succesful.
- At minimum the power at the start must be equal or lower than power at revlimit. For most cars this is easy to achieve by starting at around halfway redline
- Boost is taken into account. Some cars with very high boost may require a run at relatively low rpm in a relatively high gear to ensure enough data points at peak boost
- a more accurate rev limit is derived from the required run. Defaults to maximum engine rpm minus 750
Browser/Windows warnings
The current release is a Pyinstaller package that is not signed. This means various browsers and Smartscreen inside Windows are going to complain the file is unsafe or an uncommon download. Future releases will remain unsigned as it is not worthwhile.
Implementation
The Tone Offset is dynamic. The program keeps track of the time between a shift tone and an initiated shift, and modifies the running Tone Offset if the tone is early or late.
There are three triggers:
- Shift RPM: The RPM value at which power in the current becomes lower than the power in the next gear: the ideal time to upshift. If the application predicts shift RPM is reached in the defined tone offset time, trigger a beep
- Percentage of revlimit: Uses the tone offset distance as predicted distance to current RPM hitting the listed percentage of rev limit
- Example: A rev limit of 7850 and a value of 99.6% triggers a beep if it predicts 7818.6 rpm will be reached in 283 milliseconds
- Time distance to revlimit: uses the tone offset value plus the revlimit ms value as predicted distance to current RPM hitting the defined revlimit. Defaults to 83 milliseconds, which leads to a prediction distance of 367ms.
The delay between beep triggers is currently set to 0.5 seconds. This time-out is shared between the three triggers.
If you choose to not shift and remain above the trigger rpm, the program will not beep again even if revlimit is hit.
Settings
The settings are saved to config.json on exit. This includes Revlimit %, Revlimit ms, Tone offset, Hysteresis, and Volume.
Remote telemetry sends data at 60 packets per second. The offset variables (Tone offset, revlimit ms) while defined in milliseconds currently use packet counts in the backend.
There is one packet per 16.667 milliseconds, approximately.
Per gear:
- RPM: Derived shift rpm value. This requires the ratio of the current gear and the next gear to be determined (green background)
- Ratio: Derived gear ratio including final ratio. Final ratio cannot be separately derived and for AWD the ratio is not identical to the in-game gearing values.
General configuration:
- Revlimit: The limit on engine RPM by its own power. Initial guess is maximum engine rpm minus 750. Revlimit is derived upon finishing a full throttle sweep up to revlimit.
- Tone offset: Predicted distance between the beep trigger and the trigger rpm value. This should not be taken as reaction time and minimized. It should be regarded as the time you can consistently respond to the tone with the least amount of mental effort. Defaults to 283 ms.
- Revlimit %: The respected rev limit in percentage of actual rev limit. This is to create a buffer for transients that could cause the engine to cut out due to hitting actual rev limit. Defaults to 99.6%.
- Revlimit ms: The minimum predicted distance to actual rev limit. This is to create a buffer for fast changes in RPM that would otherwise lead to hitting actual rev limit, such as in first gear. Defaults to 83ms.
- Hysteresis: Hysteresis may be set as another layer to smooth rpm. An intermediary rpm value is updated only if the change in rpm is larger than the hysteresis value, which is then used for the shift beep tests. Defaults to 1 rpm currently.
- Volume: Adjusts the volume of the beep in four steps total. Each step is about half as loud as the previous, where the loudest is the default.
- Active tickbox: If unticked, application will not track incoming packets and therefore not beep or update.
- Edit tickbox: If unticked, the up and down arrows for the Tone offset, Revlimit ms/% and Hysteresis values do not function. This is to avoid accidental clicks.
- Reset button: If pressed, reset revlimit and all values for all gears. Configuration values are unchanged. If the UI is unresponsive, restart the application.
ForzaShiftTone v0.5
ForzaShiftTone
Windows GUI application to provide a shift tone in Forza Horizon 5. Debug version including commandline for logging purposes.
Enable remote telemetry / Data out
To enable remote telemetry in Forza Horizon 5 on Steam for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox Data Out is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
- For the Microsoft Store version, install the Loopback Utility found on the internet.
Considerations
While it is intended to run in the background without consideration while driving, there are some requirements to having accurate shift tones:
- Drive for over one second in a single gear on road. After this the gear values will lock and turn green
- Road surfaces are far more accurate than dirt/off-road
- For AWD cars: maintain throttle at a fixed amount at speed
- Starting from a low to medium RPM accelerate at full throttle all the way to rev limit. Rev limit should normally be avoided, but must be hit once for accurate data. Avoid impacts
- At minimum the power at the start must be equal or lower than power at revlimit. For most cars this is easy to achieve by starting at around halfway redline
- Boost is taken into account. Some cars with very high boost may require a run at relatively low rpm in a relatively high gear to ensure enough data points at peak boost
- a more accurate rev limit is derived from the required run. Defaults to maximum engine rpm minus 750
Anti-cheat shenanigans and browser/Windows warnings
The current release is a one-folder Pyinstaller package that is not signed. This means various browsers and Smartscreen inside Windows are going to complain the file is unsafe or an uncommon download. Future releases will move away from one-file, but remain unsigned as it is not worthwhile.
Some Python installations running matplotlib/tkinter seem to trigger FH5's anticheat mechanism and instantly crash the game, but the per-user Anaconda's installation seems to be viable. This started after the DLSS update and Playground Games is unlikely to ever care about or fix this issue. It is unknown why this behavior even applies to Python, it does not make much sense.
Implementation
The Tone Offset is dynamic. The program keeps track of the time between a shift tone and an initiated shift, and modifies the running Tone Offset if the tone is early or late.
There are three triggers:
- Shift RPM: The RPM value at which power in the current becomes lower than the power in the next gear: the ideal time to upshift. If the application predicts shift RPM is reached in the defined tone offset time, trigger a beep
- Percentage of revlimit: Uses the tone offset distance as predicted distance to current RPM hitting the listed percentage of rev limit
- Example: A rev limit of 7850 and a value of 99.6% triggers a beep if it predicts 7818.6 rpm will be reached in 283 milliseconds
- Time distance to revlimit: uses the tone offset value plus the revlimit ms value as predicted distance to current RPM hitting the defined revlimit. Defaults to 83 milliseconds, which leads to a prediction distance of 367ms.
The delay between beep triggers is currently set to 0.5 seconds. This time-out is shared between the three triggers.
If you choose to not shift and remain above the trigger rpm, the program will not beep again even if revlimit is hit.
Settings
The settings are saved to config.json on exit. This includes Revlimit %, Revlimit ms, Tone offset, Hysteresis, and Volume.
Remote telemetry sends data at 60 packets per second. The offset variables (Tone offset, revlimit ms) while defined in milliseconds currently use packet counts in the backend.
There is one packet per 16.667 milliseconds, approximately.
Per gear:
- RPM: Derived shift rpm value. This requires the ratio of the current gear and the next gear to be determined (green background)
- Ratio: Derived gear ratio including final ratio. Final ratio cannot be separately derived and for AWD the ratio is not identical to the in-game gearing values.
General configuration:
- Revlimit: The limit on engine RPM by its own power. Initial guess is maximum engine rpm minus 750. Revlimit is derived upon finishing a full throttle sweep up to revlimit.
- Tone offset: Predicted distance between the beep trigger and the trigger rpm value. This should not be taken as reaction time and minimized. It should be regarded as the time you can consistently respond to the tone with the least amount of mental effort. Defaults to 283 ms.
- Revlimit %: The respected rev limit in percentage of actual rev limit. This is to create a buffer for transients that could cause the engine to cut out due to hitting actual rev limit. Defaults to 99.6%.
- Revlimit ms: The minimum predicted distance to actual rev limit. This is to create a buffer for fast changes in RPM that would otherwise lead to hitting actual rev limit, such as in first gear. Defaults to 83ms.
- Hysteresis: Hysteresis may be set as another layer to smooth rpm. An intermediary rpm value is updated only if the change in rpm is larger than the hysteresis value, which is then used for the shift beep tests. Defaults to 1 rpm currently.
- Volume: Adjusts the volume of the beep in four steps total. Each step is about half as loud as the previous, where the loudest is the default.
- Active tickbox: If unticked, application will not track incoming packets and therefore not beep or update.
- Edit tickbox: If unticked, the up and down arrows for the Tone offset, Revlimit ms/% and Hysteresis values do not function. This is to avoid accidental clicks.
- Reset button: If pressed, reset revlimit and all values for all gears. Configuration values are unchanged. If the UI is unresponsive, restart the application.
ForzaBeep v0.4
ForzaBeep
It beeps, you shift.
GUI application to provide a shift tone in Forza Horizon 5.
Enable remote telemetry / Data out
To enable remote telemetry in Forza Horizon 5 on PC for this application:
- Head to Settings -> HUD and Gameplay -> scroll down to the bottom
- Set Data Out to On, enter 127.0.0.1 as Data out IP address and Data out IP port 12350. You may have to restart the game.
- XBox remote telemetry is to my knowledge broken, but would otherwise require the Data Out IP Address to be your laptop's IP address instead and the address modified in config.json. This is untested.
Considerations
While it is intended to run in the background without consideration while driving, there are some requirements to having accurate shift tones:
- Drive for over one second in a single gear on road. After this the gear values will lock and turn green. Road surfaces are far more accurate than dirt/off-road.
- Starting from a low to medium RPM accelerate at full throttle all the way to rev limit. Rev limit should normally be avoided, but must be hit once for accurate data. Avoid impacts.
- At minimum the power at the start must be equal or lower than power at revlimit. For most cars this is easy to achieve by starting at around halfway redline.
- Boost is taken into account. Some cars with very high boost may require a run at relatively low rpm in a relatively high gear to ensure enough data points at peak boost.
- a more accurate rev limit is derived from the required run. Defaults to maximum engine rpm minus 750.
Implementation
The Tone Offset is dynamic. The program keeps track of the time between a shift tone and an initiated shift, and modifies the running Tone Offset if the tone is early or late.
There are three triggers:
- Shift RPM: The RPM value in which power in the next gear becomes equal or higher to the power in the current gear. If the application predicts shift RPM is reached in the defined tone offset time, trigger a beep.
- Percentage of revlimit: Uses the tone offset distance as predicted distance to current RPM hitting the listed percentage of rev limit.
- Example: A rev limit of 7850 and a value of 99.6% triggers a beep if it predicts 7818.6 rpm will be reached in 283 milliseconds.
- Time distance to revlimit: uses the tone offset value plus the revlimit ms value as predicted distance to current RPM hitting the defined revlimit. Defaults to 367 milliseconds.
The delay between beep triggers is currently set to 0.5 seconds. This time-out is shared between the three triggers. If you choose to not shift, the program will not beep again even if revlimit is hit.
Settings
The settings are saved to config.json on exit. This includes revlimit %, revlimit ms, tone offset, hysteresis, and volume.
Remote telemetry sends data at 60 packets per second. The offset variables (Tone offset, revlimit ms) while defined in milliseconds currently use packet counts in the backend. There is one packet per 16.667 milliseconds, approximately.
Per gear:
- RPM: Derived shift rpm value. This requires the ratio of the current gear and the next gear to be determined (green background)
- Ratio: Derived gear ratio including final ratio. Final ratio cannot be separately derived.
General configuration:
- Revlimit: The limit on engine RPM by its own power. Initial guess is maximum engine rpm minus 750. Revlimit is derived upon finishing a full throttle sweep up to revlimit.
- Tone offset: Predicted distance between the beep trigger and the trigger rpm value. This should not be taken as reaction time and minimized. It should be regarded as the time you can consistently respond to the tone with the least amount of mental effort. Defaults to 283 ms.
- Revlimit %: The respected rev limit in percentage of actual rev limit. This is to create a buffer for transients that could cause the engine to cut out due to hitting actual rev limit. Defaults to 99.6%.
- Revlimit ms: The minimum predicted distance to actual rev limit. This is to create a buffer for fast changes in RPM that would otherwise lead to hitting actual rev limit, such as in first gear. Defaults to 83ms.
- Hysteresis: Hysteresis may be set as another layer to smooth rpm. An intermediary rpm value is updated only if the change in rpm is larger than the hysteresis value, which is then used for the shift beep tests. Defaults to 1 rpm currently.
- Volume: Adjusts the volume of the beep in four steps total. Each step is about half as loud as the previous, where the loudest is the default.
- Active tickbox: If unticked, application will not track incoming packets and therefore not beep or update.
- Edit tickbox: If unticked, the up and down arrows for the Tone offset, Revlimit ms/% and Hysteresis values do not function. This is to avoid accidental clicks.
- Reset button: If pressed, reset revlimit and all values for all gears. Configuration values are unchanged. If the UI is unresponsive, restart the application.