(yes this is a bit late but who cares)
Introducing Audify!
Audify is a lightweight framework for the new Audio API, which allows you to manage your audio easier. It is used to construct a Source-Middlewares-Output-structured AudioSystem which connects the audio source, middlewares (such as an AudioReverb), and the audio output (not necessarily added if no need).
Middlewares are arranged in a prioritized sequence and connected with wires (automatically!), which will affect the how the audio ultimately plays.
Download it
- Creator Store
- Local FIle (2.9 KB)
Benefits of Audify
- Allows coexistence of AudioAnalyzers and other middlewares and Output device.

- Simple and elegant.

- Mostly strictly typechecked.

- Wires are created and connected automatically.

Usage Examples
Basic Usage
local SoundPart = workspace:WaitForChild("SoundPart") -- Any part under workspace local Audify = require(path.to.Audify) local AudioSystem = Audify(SoundPart, "AudioPlayer", "AudioEmitter") local source = AudioSystem.Source :: AudioPlayer -- Get the created AudioPlayer (Source) source.Asset = "rbxassetid://1848354536" -- This will play "Relaxed Scene" from the toolbox. local output = AudioSystem.Output :: AudioEmitter -- Get the created AudioEmitter (Output) local modifier = system:AddMiddleware("AudioReverb", 1) :: AudioReverb -- Add an AudioReverb with priority set to 1 (middleware) modifier.WetLevel = 10 -- Modify its properties however you like. AudioSystem:Finalize() -- You must call this before playing the audio. Otherwise, it won't work as expected. source:Play() -- Play the audio -- ONLY DESTROY IT AFTER YOU DON'T NEED THE AUDIO ANYMORE! AudioSystem:Destroy() Integration with VC + AudioAnalyzer
--!! SERVER SCRIPT (credits to @int3rv4l for this code) function connectDevices(src, target) local wire = Instance.new("Wire") wire.Parent = target wire.SourceInstance = src wire.TargetInstance = target end game.Players.PlayerAdded:Connect(function(player) local micIn = Instance.new("AudioDeviceInput") micIn.Name = "MyVoiceInputDevice" micIn.Parent = player micIn.Player = player micIn.Muted = false player.CharacterAdded:Connect(function(character) local emitter = Instance.new("AudioEmitter") emitter.Parent = character connectDevices(micIn, emitter) end) end) --!! CLIENT SCRIPT local Players = game:GetService("Players") local player = Players.LocalPlayer local myMic = player:WaitForChild("MyVoiceInputDevice") local Audify = require(game.ReplicatedStorage:WaitForChild("Audify")) local AudioSystem = Audify(nil, myMic, "AudioEmitter") local analyzer = AudioSystem:AddMiddleware("AudioAnalyzer", 1) :: AudioAnalyzer analyzer.Parent = myMic task.spawn(function() while task.wait(1) do if analyzer.RmsLevel > 0.01 then print("VOICE") end end end) AudioSystem:Finalize() Types in this module
type AudioSystem = { AddMiddleware: (self: AudioSystem, AudioMiddleware) -> (AudioMiddlewareInst), Finalize: (self: AudioSystem) -> (), Destroy: (self: AudioSystem) -> (), Source: AudioSourceInst, Output: AudioOutputInst } type AudioSourceInst = AudioPlayer | AudioListener | AudioDeviceInput type AudioOutputInst = AudioEmitter | AudioDeviceOutput type AudioMiddlewareInst = AudioFlanger | AudioLimiter | AudioTremolo | AudioChorus | AudioReverb | AudioFilter | AudioFader | AudioGate | AudioEcho | AudioAnalyzer | AudioEqualizer | AudioCompressor | AudioDistortion | AudioPitchShifter | AudioChannelMixer | AudioChannelSplitter type AudioSource = "AudioPlayer" | AudioPlayer | "AudioListener" | AudioListener | "AudioDeviceInput" | AudioDeviceInput type AudioMiddleware = "AudioFlanger" | AudioFlanger | "AudioLimiter" | AudioLimiter | "AudioTremolo" | AudioTremolo | "AudioChorus" | AudioChorus | "AudioReverb" | AudioReverb | "AudioFilter" | AudioFilter | "AudioFader" | AudioFader | "AudioGate" | AudioGate | "AudioEcho" | AudioEcho | "AudioAnalyzer" | AudioAnalyzer | "AudioEqualizer" | AudioEqualizer | "AudioCompressor" | AudioCompressor | "AudioDistortion" | AudioDistortion | "AudioPitchShifter" | AudioPitchShifter | "AudioChannelMixer" | AudioChannelMixer | "AudioChannelSplitter" | AudioChannelSplitter type AudioOutput = "AudioEmitter" | AudioEmitter | "AudioDeviceOutput" | AudioDeviceOutput API Documentation
NOTE: MAKE SURE YOU READ THE TYPES FIRST, OR YOU CAN GET EASILY OVERWHELMED!
Audify(source: AudioSource?, output: AudioOutput?): AudioSystem, AudioSourceInst?, AudioOutputInst? Registers an AudioSystem object with given parameters. AudioSystem.Source: AudioSourceInst -- The Source object of the AudioSystem. This is either AudioPlayer or AudioListener or -- AudioDeviceInput. AudioSystem.Output: AudioOutputInst -- The Output object of the AudioSystem. This is either AudioDeviceOutput or AudioEmitter. AudioSystem:AddMiddleWare(middleware: AudioMiddleware, priority: number?): AudioMiddlewareInst -- Adds a Middleware into the AudioSystem. The number of middlewares are not limited. If -- middleware is an AudioAnalyzer, it is thrown into a standalone list that will work -- along the original list of middlewares. AudioSystem:Finalize(): void -- Finalize the AudioSystem and connects all the components. No modifications to the -- structure is allowed once this has been called. AudioSystem:Destroy(): void -- Destroy the AudioSystem. Purging all objects and data and ending the audio instantly. Wait, before you leave..
Rate Audify! (1 = lowest, 5 = highest)
- 1
- 2
- 3
- 4
- 5
0 voters
Will you use Audify?
- Yes, this seems good!
- No, I don’t think I need it yet.
- No, this is bad to be used.
0 voters
Please leave suggestions and report bugs if there are any, happy coding!