• Replacing entity:EmitSound with sound.PlayURL?
    2 replies, posted
I have some code here borrowed from swamp onions. I would like to stream files in .mp3 rather than fastdl'ing wav files to clients. Anyone know how to modify this code to use PlayURL rather than EmitSound? Thanks for your time. [CODE]function SWEP:Reload() if self.reloading then return end self.reloading=true timer.Simple(3, function() self.reloading=false end) local pitch = 100 + (self.SoundPitchMod or 0) + (self.Owner:Crouching() and 40 or 0) self:EmitSound("mywavfile.wav", 90, pitch + math.Rand(-5,5)) if SERVER then net.Start("VapeTalking") net.WriteEntity(self.Owner) net.WriteFloat(CurTime() + (2.2*100/pitch)) net.Broadcast() end end[/CODE]
IGModAudioChannel, which is what sound.PlayURL uses for in-game manipulation, cannot alter pitch to my knowledge, so changing to use that will strip away that feature. Either way, PlayURL should only be used for streaming dynamic audio files (TTS, radio) -- FastDL should be for sounds you use consistently, like weapon sounds. This guarantees they are played (a website being down could prevent PlayURL from functioning) and played without delay. At the very least, you should almost never use anything but Entity:EmitSound() for entities to maintain proper sound networking/PAS management. Also, the code you posted isn't properly predicted and could be a lot more structurally cohesive. I went ahead and refactored it, although, I don't have access to the full code, so more refactoring would have to be done to the entire base. [code]SWEP.ReloadCooldown = 3 -- Cooldown time between Reload function calls SWEP.ReloadSound = { Sound = "mywavfile.wav", -- Sound file/scape to play Level = 90, -- Sound range. 90 is actually quite loud ("Screaming child, passing motorcycle, convertible ride on freeway") PitchModifier = {-5, 5}, -- Can be table to randomly select a float in-between, or a number CrouchAdditive = 40 -- Pitch to add while crouched } function SWEP:Initialize() -- Other initialize code here, call baseclass if necessary self.m_flSoundPitchMod = 0 end -- Could use NW(2)Var instead function SWEP:SetupDataTables() -- Other datatable code here, call baseclass and adjust slot if necessary self:NetworkVar("Float", 0, "NextReload") end function SWEP:CanReload() return self:GetNextReload() <= CurTime() and self:GetOwner():IsValid() end function SWEP:Reload() if (self:CanReload()) then local tReloadSound = self.ReloadSound local flPitch = 100 + self.m_flSoundPitchMod local pPlayer = self:GetOwner() if (pPlayer:Crouching()) then flPitch = tReloadSound.CrouchAdditive end local PitchModifier = self.PitchModifier -- Support table and number modifiers if (istable(PitchModifier)) then -- util.SharedRandom guarentees flPitch = flPitch + util.SharedRandom(self:GetClass(), PitchModifier[1], PitchModifier[2], self:EntIndex()) elseif (isnumber(PitchModifier)) then flPitch = flPitch + PitchModifier end -- Would be better to use a sound script, but that would take away -- The ability change the pitch on the fly (m_flSoundPitchMod) self:EmitSound(tReloadSound.Sound, tReloadSound.Level, flPitch) local flCurTime = CurTime() self:SetNextReload(flCurTime + self.ReloadCooldown) if (SERVER) then net.Start("VapeTalking") net.WriteEntity(self:GetOwner()) net.WriteFloat(flCurTime + flPitch) net.Broadcast() -- This could definitely be done better end end end[/code]
Thanks so much man, Ill try and learn from your code to the best of my ability.
Sorry, you need to Log In to post a reply to this thread.