INTRODUCTION
Hey everyone! In this tutorial im gonna be showing you how you can access the player’s voice chat volume permitting you to make the player do actions like jump and etc.
STEP 1 : Enabling Voice Chat
- To enable voice chat you must open Game Settings which you can find in Home.
- Click on Communication.
- Enable Enable Microphone.
→ →
STEP 2 : VoiceChatService
If you dont have VoiceChatService in your explorer you can get it by following these steps :
- Go to Home and then Service.
- Select VoiceChatService.
- Click Insert.
→ →
STEP 3 : Enabling UseAudioApi
In order to access the Player’s microphone we have to use roblox’s Audio API here
- Select the VoiceChatService that we just inserted into the explorer.
- In the Properties make sure EnableDefaultVoice and UseAudioApi are both enabled.
STEP 4 : AudioAnalyzers
Almost Done!
- Create a folder in ReplicatedStorage and name it Analyzers.
- Create a Script in ServerScriptService.
game.Players.PlayerAdded:Connect(function(player)
local audiodeviceinput = player:WaitForChild("AudioDeviceInput")
local Analyzer = Instance.new("AudioAnalyzer")
Analyzer.Name = player.Name.."'s Analyzer"
Analyzer.Parent = game.ReplicatedStorage.Analyzers
local Wire = Instance.new("Wire")
Wire.Parent = Analyzer
Wire.SourceInstance = audiodeviceinput
Wire.TargetInstance = Analyzer
end)
This script will create an AudioAnalyzer for every player that joins which will take measurements by wiring it to the player’s AudioDeviceInput that we got by enabling the UseAudioApi.
Making a Speak to Jump System :
Step 1 :
To avoid players from jumping manually you should create a localscript and unbind the Jump Action.
local ContextService = game:GetService("ContextActionService")
ContextService:UnbindAction("jumpAction")
Step 2 :
Make a Localscript for example in StarterPlayerScripts which will handle the Jumping when a player speaks.
NOTE : THIS IS JUST AN EXAMPLE
local Player = game.Players.LocalPlayer
local Analyzer = game.ReplicatedStorage.Analyzers:WaitForChild(Player.Name.."'s Analyzer")
local Debounce = false
while task.wait(0.1) do
local PeakLevel = math.floor(Analyzer.PeakLevel * 100)
if PeakLevel >= 40 then -- feel free to change this to what you think suits you the most
if Debounce == true then continue end
Debounce = true
local char = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = char:WaitForChild("Humanoid")
if Humanoid.Health <= 0 then continue end
if Humanoid:GetState() ~= Enum.HumanoidStateType.Freefall then
Humanoid.JumpHeight = PeakLevel / 7 -- feel free to change this to what you think suits you the most
Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
task.wait(1)
Debounce = false
end
end
In this example we’re gonna be using the PeakLevel Property of the AudioAnalyzer you can use the RmsLevel Aswell.
there is a statement to check if the PeakLevel is greater or equal to 40 just to avoid any low sounds caused by the user you can change that number to what you think suits you the most.
Conclusion
I hope that you enjoyed reading this tutorial and found it both beneficial and helpful.