The sounds imported with this plugin do not work in game test mode so this plugin is pretty much useless.
Sound Importer
What is Sound Importer?
Sound Importer is a plugin that allows you to import .ogg
and .mp3
audio files from pc directly to studio as temporary assets!
Why I should use this?
-
Audio upload limit
Sound Importer does not waste your monthly audio upload thing. Thus, you can test out your audio and if you feel satisfied with it, you can upload it on Roblox and use it for the game forever. -
Time save
Sound Importer requires you just a few clicks to import audio file, while to upload to Roblox you need to get on creator marketplace, put in your audio file, click upload button, copy ID and only then paste it to Roblox. Instead, you can use Sound Importer to see if your audio fits in. If not, just make a few changes to it or try another audio, and then upload it to Roblox.
Temporary assets
Sound Importer does NOT upload audio files to Roblox. It only imports them to Roblox studio as temporary files, which means none of team create members will be able to hear it except for you. It also will be played only in studio and not on actual Roblox client. The audio file will also reset after you close Roblox studio, which means you will need to import it again every time you open Roblox studio.
Ways to import
- Through sound object: Select any sound instance, then import a sound from your pc into it.
- Create new sound in instance: Select any instance that is not sound. Then import sound your pc, plugin will automatically create a new sound instance in the selected instance.
- Create new sound in workspace: Do not select anything. Do the import sound procedure and then the plugin will automatically create a new sound instance in workspace.
Demonstration
Plugin code
This plugin uses “StudioWidgets”
Code
local StudioService = game:GetService("StudioService")
local Selection = game:GetService("Selection")
local widget = plugin:CreateDockWidgetPluginGui("Sound Importer", DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float,
true,
true,
200,
100,
100,
50
))
widget.Enabled = false
local TargetLabel = Instance.new("TextLabel")
TargetLabel.Font = Enum.Font.Arial
TargetLabel.BackgroundTransparency = 1
TargetLabel.Size = UDim2.fromScale(1, 0.374)
TargetLabel.Position = UDim2.fromScale(0, 0.064)
TargetLabel.Text = "Import to: None"
TargetLabel.TextScaled = true
TargetLabel.TextWrapped = true
TargetLabel.RichText = true
TargetLabel.Parent = widget
local InfoLabel = Instance.new("TextLabel")
InfoLabel.RichText = true
InfoLabel.Font = Enum.Font.Arial
InfoLabel.BackgroundTransparency = 1
InfoLabel.Size = UDim2.fromScale(1, 0.206)
InfoLabel.Position = UDim2.fromScale(0, 0.438)
InfoLabel.Text = ""
InfoLabel.TextScaled = true
InfoLabel.TextWrapped = true
InfoLabel.Parent = widget
local InfoCoroutine = nil
local GuiUtilities = require(script:WaitForChild("GuiUtilities"))
local ImportObject = require(script:WaitForChild("Button")).new("Import", "Import")
local ImportButton = ImportObject:GetButton()
ImportButton.Size = UDim2.fromScale(0.583, 0.177)
ImportButton.Position = UDim2.fromScale(0.208, 0.732)
ImportButton.Parent = widget
GuiUtilities.syncGuiElementBackgroundColor(ImportButton)
GuiUtilities.syncGuiElementFontColor(InfoLabel)
GuiUtilities.syncGuiElementFontColor(TargetLabel)
local PluginToolbar = plugin:CreateToolbar("alexsany plugins")
local PluginButton = PluginToolbar:CreateButton("Sound Importer", "Toggles Sound Importer menu", "rbxassetid://12930219739")
local Type_Colors = {
[1] = Color3.new(1),
[2] = Color3.new(0.0117647, 0.670588, 0)
}
function Info(Type : number, Text : string)
InfoLabel.TextColor3 = if Type == 0 then GuiUtilities.getColor(Enum.StudioStyleGuideColor.MainText) else Type_Colors[Type]
InfoLabel.Text = Text
if InfoCoroutine then coroutine.close(InfoCoroutine) end
InfoCoroutine = coroutine.create(function()
task.wait(#Text / 20)
InfoLabel.Text = ""
end)
coroutine.resume(InfoCoroutine)
end
PluginButton.Click:Connect(function()
widget.Enabled = not widget.Enabled
end)
ImportButton.MouseButton1Click:Connect(function()
local Selected = Selection:Get()
local Target = Selected[1]
if not Target then Target = workspace end
if #Selected > 1 then
Info(1, "Select only <b>1</b> object!")
return
end
local File = StudioService:PromptImportFile({"ogg", "mp3"})
if not File then
Info(0, "Cancelled import procedure")
else
local AudioId = File:GetTemporaryId()
if Target:IsA("Sound") then
Target.SoundId = AudioId
Info(2, string.format("Imported sound to <b>%s</b>!", Target.Name))
else
local NewSound = Instance.new("Sound")
NewSound.Name = string.sub(File.Name, 0, #File.Name - 4)
NewSound.SoundId = AudioId
NewSound.Parent = Target
Selection:Set({NewSound})
Info(2, string.format("Created new SoundObject with imported sound in <b>%s</b>!", Target.Name))
end
end
end)
function SelectionUpdate()
local NewSelected = Selection:Get()
local Target = NewSelected[1]
if #NewSelected < 2 then
if #NewSelected == 0 then
Target = workspace
end
if Target:IsA("Sound") then
TargetLabel.Text = string.format("Improt to: <b>%s</b>", Target.Name)
TargetLabel.TextColor3 = GuiUtilities.getColor(Enum.StudioStyleGuideColor.MainText)
else
TargetLabel.Text = string.format("Create new sound in <b>%s</b>", Target.Name)
TargetLabel.TextColor3 = GuiUtilities.getColor(Enum.StudioStyleGuideColor.MainText)
end
else
TargetLabel.Text = "Select only 1 object"
TargetLabel.TextColor3 = Color3.new(0.5)
end
end
Selection.SelectionChanged:Connect(SelectionUpdate)
SelectionUpdate()