A way to check if a Sound is "Licensed"

As a Roblox developer, it is currently too hard to check if a sound is by APM Music, and thus makes it difficult to comply with the 250 APM music maximum if you have ways players can play their own music (radio game passes). You can check by checking if the sound author is ROBLOX and if they have “APM Music” in their description, but I think this could be made easier by having a simple API developers can call.


November 2024 Update

The terms of use state that this limit applies to all Licensed Music, and not just APM.

Given Roblox’s recent agreement with Distrokid, and their showcases at RDC, Roblox cannot expect me to keep up with every single artist in order to allow for custom sounds in my game.

7 Likes
local audioId = 1491039643
local audioData = game:GetService("MarketplaceService"):GetProductInfo(audioId)
if audioData.Creator.CreatorTargetId == 1 then
	if string.find(audioData.Description, "Courtesy of APM Music.") ~= nil then
		print("Sound is by APM Music.")
	end
end

12 Likes

I’m aware, that’s what I referenced in my OP. Just would be nice to have a native API for it.

3 Likes

just stick it in ur scripts as a global function, maybe what would be better is a property like ‘restricted’ or something that players can set too

It’s pretty simple to keep a personal log of which and/or how many APM audios you have in your game, if not putting all the music IDs in a table or parenting all the music Sound objects in a dedicated bin.

I’m referring specifically to products like radio game passes, where users can put in their own music.

I definitely think radio game passes are going to be a tetchy subject at this point (especially considering that most people like to play copyrighted songs, too). I’ve never had a radio game pass in my game but I think that Roblox would want us to provide a pre-made list of music instead of letting players input their own, thus safely managing the royalty free music limit. It may not be what players want but we all need to respect Roblox’s rules.

3 Likes

Lets not bloat the api with unnecassary functions. Use the snippet provided in this thread

3 Likes

I am bumping this because even after 6 years, not only is the 250 limit still in place, but the terms of use state that this 250 limit is for all licensed music.

  • 250 Track Limit. Notwithstanding the foregoing, Creator may not use Licensed Music to create a streaming service or music library within an Experience or other UGC, nor may Creator charge Users to listen to a specific track of the Licensed Music. Creator has the right to place, play, and have played up to 250 distinct tracks of Licensed Music at any one time in a single Experience or other UGC With Licensed Music. Creator can replace existing tracks of Licensed Music in an Experience or other UGC with new tracks at any time, provided that at any one time there are no more than 250 tracks in such Experience or UGC With Licensed Music.

Given Roblox’s recent agreement with Distrokid, and their showcases at RDC, Roblox cannot expect me to keep up with every single artist in order to allow for custom sounds in my game.

3 Likes

There’s a plugin called Luau+ that makes it so you can use :IsLicensed. You can download Luau+ for free here: Luau+ Creator Store. Once you’ve downloaded Luau+ you can use my script to check if the sound is licensed or not. If there’s any issues with this code (hopefully not because I tested this code) you can report it in the server.

-- there will be a huge mess of code in this line once you copy & paste this script, it's just the libraries that's built into Luau+
--luau+
local sound = Instance.new("Sound")
sound.SoundId = 114706468036219

print(sound:IsLicensed()) -- prints false for the sound id 114706468036219

I am not downloading a random free model plugin for something that should be built in.

Also, reading your code shows that you’re only doing checks on APM Music, which is not the only licensed audio provider. Please re-read the post.

Fair, but do keep in mind that I’m not the creator but I’ll let the creator know about that there’s other licensed audio providers.

1 Like

I believe easiest way for you would just be checking the “Genre” value as only licensed tracks on Roblox have the value e.g. Hip-Hop, Pop, Electronic.
image

image

https://apis.roblox.com/toolbox-service/v1/items/details?assetIds=18841891575

Or if you want to manually list the licensed libraries (for music):

Or single artists:

1 Like

I do not want user provided solutions, I have them. I want Roblox to add this as a feature.

I think it’d be better to display why the solution isn’t feasible rather than stating that community alternatives are just not an option. If a community-made alternative is able to achieve the exact feature you need, then the feature-request is practically resolved since there isn’t a problem to solve anymore.

In this case however, the solution of checking genres isn’t long-term viable since there is no guarentee that Roblox will keep genres only to licensed audio creators nor is there any guarentee that every licensed audio will be assigned a genre.

1 Like

I already did, and it’s in the OP. What defines a “licensed music” has fluctuated over time and nothing we do now can be trusted to last in the future. The feature request is absolutely not resolved and the only resolution is Roblox making an explicit marker for what a licensed song is. Right now, there is nothing for that. Even if there was some complicated user created library that did, the feature request is not invalidated–built in ways to do something that a user can do is a legitimate request. There is nothing to be discussed.

A solid example of how user provided solutions are no good is that the original user provided solution in this thread recently broke when all of APM’s music got moved over to the APMOfficial Roblox account. There is no user solution to these types of things. Things like PolicyService exist because expecting users to check arbitrary conditions that can change at any time is unrealistic and almost definitely will error.

In my opinion this goes beyond just audios. Roblox is responsible for protecting copyright and licences on their platform and should therefore provide us the info we need on whether or not we are allowed to use an asset in our games through an API so we can provide users with the ability to select content themselves in-game. This includes features such as boomboxes, user selected custom textures, or anything that pulls content by ID.

1 Like

Technically all playable audio currently on Roblox is licensed (with exception of some left over bypasses), I don’t see why would there be e.g. isLicensed variable for audio if only such audios can be currently playable in boomboxes (with exception of DistroKid audios, and releases delivered after September 1st, as these are semi public).

Users have NO ability to make public audio nor will have such (without a third-party) in the future.

I think simple use of the the IsPublicDomain value would solve your issue:

local MarketplaceService = game:GetService("MarketplaceService")
local assetId = 18841891575

local info = MarketplaceService:GetProductInfo(assetId, Enum.InfoType.Asset)
print(info.IsPublicDomain)

Yes, having a more performant or accurate response is certainly a valid use-case and reason to make a feature-request.

As I mentioned in my previous reply, in this case, the proposed community solution unfortunately falls for the pitfall of the behaviour possibly not being future-compatible, which again is a valid reason to make a feature request. I was more commenting on how, at the general-level, user-made solutions are solutions and should at least be considered to see whether they satisfy the use-case.

Not referring to this particular request, if a community alternative is able to achieve all the idealities of the listed use-case, then there isn’t really a problem for the feature request to resolve and hence no feature-request to be had (since feature-requests are based around problems rather than particular solutions).

None of this is true. There is oodles of public audio that is not licensed to APM/DistroKid/etc.