[USELESS] Sound Importer - Import audio files from pc directly to studio!

The sounds imported with this plugin do not work in game test mode so this plugin is pretty much useless.

Sound Importer

Get plugin here!

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

  1. Through sound object: Select any sound instance, then import a sound from your pc into it.
  2. 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.
  3. 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()
18 Likes

That looks pretty useful! I might actually use this in the future!

3 Likes

I my god that’s help me too much. Thank you.

2 Likes

This is a good plugin, It can be used to test some sounds without getting it through moderation*, but I have one suggestion

If no Sound Instance is selected, Create a new one with the Sound ID

This is useful if you want to test a sound but don’t want to make a new one and select it

*This can’t be used to bypass moderation in any way, This only works for the uploader, and is unplayable in real game, It is useful in certain cases

2 Likes

Thanks for the suggestion! I will try to implement it today

2 Likes

Small update!

It is now unnecessary to select a sound instance to import sound. Plugin will now automatically create a new sound instance inside selected instance or workspace if nothing is selected with the imported audio!

Suggested by @VSCPlays
Took 3 days to make because wasnt at home for some time.

I cant seem to access the plugin?

Because I put it offsale since it’s pretty much useless.
If you need something like this plugin, you could use Lunar Sound which is a plugin for Moon Animator 2.
If you REALLY need this plugin, you could use te source code in the post to recreate it.