SourceRadio makes it possible for players on a server to build a playlist together and listen to music as they play—even on public servers.
SourceRadio plays music through the owner's ingame microphone, and songs may be requested by any player via the chat interface. If multiple songs are requested within a short time span, the first song plays, and the others are placed in a queue.
Your selection of music is practically infinite. That's because SourceRadio streams music directly from YouTube. When players request a song, SourceRadio takes the request and sends it to YouTube, which spits out the top result. SourceRadio stores the information gathered from each song request in a local database, using that information to avoid future lookups. SourceRadio also saves the most-requested songs locally to the owner's drive in order to stream songs more efficiently.
- Team Fortress 2
- Counter-Strike: Global Offensive
- Left 4 Dead 2
- SourceRadio was developed to run on Windows Vista and above.
- Must have Microsoft .NET Framework 4.5 or above installed. Download here.
- A good, low-latency Internet connection. A bad Internet connection may cause SourceRadio to crash. It may also provide an unpleasant listening experience for teammates.
Note: A physical microphone is not required for sharing music with teammates.
- Join the SourceRadio Steam group and download the installer from the link on that page.
- Run the installer, and carefully follow all of the instructions it gives. Note: Anti-malware software may flag the installer because it is not from a known source. You may have to temporarily disable this software.
- Become familiar with all of SourceRadio's commands. Then, open the properties.txt file and ensure that each value is correct for you.
- Run SourceRadio alongside a supported game and begin jamming to tunes.
Commands are issued to SourceRadio by players via the ingame chat interface. The owner also has the option of issuing commands via the developer console if he uses underscore for spaces. Commands are only recognized if they appear at the beginning of the message and start with an exclamation point.
Below, an asterisk indicates that a command has the ability to write changes to the properties file. This is done by appending -w
to the end of such a command (e.g. !queue-limit-w 7
). Parameters are indicated here in square brackets. However, when commands are issued, brackets do not surround the parameters.
- !song [YouTube query] - Used to request the playing of a song. This is the only non-admin command.
- !skip - Skips the song that is currently playing and starts the next song if there is one in the queue.
- !ignore [optional request index
n
] - Ensures that then
th-to-last!song
command is ignored (whether or not it would have been ignored automatically). The last!song
command is ignored if no argument is provided. - !extend - Removes the duration limit property from a song. Extended songs play until they are finished unless they are skipped or ignored.
- !alltalk* [
on
oroff
] - Sets whether chat binds send messages to both teams or only the owner's team. After this command is executed, the binds script must be re-executed via the reload script bind. | See property - !clear - Removes all songs from the queue and stops the song that is currently playing.
- !add-admin* [username] - Adds the specified player as an admin. | See admins.txt
- !remove-admin* [username] - Removes the specified player from the list of admins. This command may only be issued by the owner, and the owner may not specify himself.
- !duration-limit* [number of seconds] - Sets the number of seconds that songs are allowed to play if there are songs in the queue. | See property
- !player-song-limit* [number of songs] - Sets the number songs that a given player is allowed to have playing or in the queue at a time. | See property
- !queue-limit* [number of songs] - Sets the total number of songs allowed in the queue at a time. | See property
- !ban* [username] - Bans the specified player from issuing commands. | See banned players.txt
- !unban* [username] - Unbans the specified player so that he may issue commands once again.
- !block-song* [request index n or song title] - Ensures that the song referenced by the
n
th-to-last!song
command or by the specified song title is never allowed to play. If the referenced song is playing or queued upon being blocked, it gets terminated. Ifn = 0
, the currently playing song gets blocked. If no argument is provided, the song referenced by the last!song
command gets blocked. | See blocked songs.txt - !unblock-song* [song title] - Revokes the previous block that was placed on the specified song.
- !vocals* [
on
oroff
]- Sets whether or not there should be an artificial vocalization every time a command is issued. | See property - !stop - Closes the MySQL server and stops SourceRadio. This command should always be issued when the owner is done running SourceRadio.
The various files containing properties and settings for configuring SourceRadio are located at ...\SourceRadio\properties
. Below, you will find explanations of each important file in this directory that you may want to tweak to fit your preferences. You may use //
to demarcate comments in these files.
This file contains SourceRadio's main parameters. Property-value pairs are separated by the delimiter ->
. See this list for valid key names for binding. To restore this file's default values, run restore defaults.bat
.
- default game - The game with which SourceRadio will start. If this property is empty, SourceRadio will prompt for a game upon startup. (Options:
tf2
,csgo
,l4d2
) - duration limit - The number of seconds a song is allowed to play if there are songs in the queue. This limit is ignored if no songs are in the queue and will play until it is finished unless it is skipped. | See command !duration-limit
- player song limit - The number of songs that a given player is allowed to have playing or in the queue at a time. Subsequent song requests after the limit is reached are ignored. | See command !player-song-limit
- queue limit - The total number of songs allowed in the queue at a time. The song that is playing is not included. | See command !queue-limit
- ignore bind - The key for issuing the !ignore command via chat.
- skip bind - The key for issuing the !skip command via chat.
- instructions - Instructions intended for teaching teammates how to request songs.
- instructions bind - The key for saying the above instructions in chat.
- current song bind - The key for saying the name of the song that is playing in chat.
- display commands -
true
if commands that are bound to a key (e.g.!skip
) should be displayed in chat when issued;false
if they are to be issued silently through the game console. - alltalk -
true
if chat binds send messages to both teams or only the owner's team;false
otherwise. | See command !alltalk - automic bind - The key for turning the ingame mic on indefinitely. The mic can be turned off by pressing the normal mic key, which is
v
by default. - autostart mic -
true
if the mic is to be turned on upon game startup;false
otherwise. - reload script bind - The key for re-executing the binds script. This is useful for commands that update this script mid-game (i.e. !alltalk).
- volume up bind - The key for turning up the music volume. After the highest volume is set, the volume wraps around to 0. This only affects the volume of the owner's speakers and not his microphone.
- volume down bind - The key for turning down the music volume. After the lowest volume is set, the volume wraps around to 100. This only affects the volume of the owner's speakers and not his microphone.
- volume increment - The amount out of 100 to increase or decrease the volume upon each volume adjustment.
- enable command vocalization -
true
if there should be an artificial vocalization every time a command is issued;false
otherwise. | See command !vocals - share command vocalizations -
true
if command vocalizations are to be sent through the owner's microphone to teammates;false
otherwise - steam path - The path to Steam's home directory.
- steam locale - The value must match the locale you have selected within Steam under Settings > Interface. Valid values:
en
(English),bg
(Bulgarian),cs
(Czech),da
(Danish),de
(German),el
(Greek),es
(Spanish),fi
(Finnish),fr
(French),hu
(Hungarian),it
(Italian),ja
(Japanese),ko
(Korean),nl
(Dutch),no
(Norwegian),pl
(Polish),pt
(Portuguese),pt-br
(Portuguese-Brazil),ro
(Romanian),ru
(Russian),sv
(Swedish),th
(Thai),tr
(Turkish),uk
(Ukrainian),zh-hans
(Simplified Chinese),zh-hant
(Traditional Chinese). - steamid3 - The Steam ID used by servers to identify you. This can be left empty unless you have multiple accounts and SourceRadio is choosing the wrong one.
- mysql path - the path to any MySQL subdirectory containing the file
mysqld.exe
. - mysql server - The MySQL server address. Local servers use
localhost
. - mysql user - The MySQL username to connect to the server with. MySQL ships with the user
root
. - mysql password - The password for the above MySQL user. The default password for
root
is empty. - cached query expiration - The number of days after which a cached mapping from a song request to a YouTube video expires. This gives new videos a chance for discovery.
- song cache limit - The number of most-requested songs to store on the owner's computer. Approximately 4 GB of storage required per 100 songs.
- min requests to cache - The minimum number of times a song must be requested before it is stored on the owner's computer.
- youtube key - A key necessary for gaining access to the YouTube Data API. Instructions on obtaining a key can be found within the installer.
If you wish, you may use this file to grant administrative privileges to specified players. Admins are able to execute most of the available ingame commands. This allows them to complete tasks that normal players can't, such as skipping songs and banning players.
This file should contain the Steam ID (any format) or profile URL of each player you wish to make an admin, with each value on its own line. Alternatively, you can add admins using the ingame !add-admin [username]
command, so long as the player is on the same server with you.
Note: As the owner, you do not have to place your ID in this file to grant yourself privileges.
If you wish, you may use this file to revoke the ability for certain players to request songs.
This file should contain the Steam ID (any format) or profile URL of each player you wish to ban, with each value on its own line. Alternatively, you can ban players using the ingame !ban [username]
command, so long as the player is on the same server with you.
If you wish, you may use this file to block certain songs from being played.
This file should contain a list of the YouTube IDs for each song you wish to block. Each ID must be on its own line. Alternatively, you can block songs using the ingame !block-song [song-title]
command.
Note: The YouTube ID mOF17bfG0Do
corresponds to the YouTube URL https://www.youtube.com/watch?v=mOF17bfG0Do
.
-g
takes the name of the game you are playing as an argument. This command is mandatory.tf2
for Team Fortress 2csgo
for Counter-Strike: Global Offensivel4d2
for Left 4 Dead 2
-f
takes a file path as an argument. This command specifies the path to the game directory if the game is not in the default location.-l
takes a file path as an argument. This command runs SourceRadio but listens to the specified file for commands rather than the game log. This command is for debugging only.-d
restores the properties inproperties.txt
to their default values without running SourceRadio.
- youtube-dl - an open-source program to download videos from YouTube and other video sites.
- CSCore - an advanced .NET audio library written in C#.
- YouTube Data API - allows applications to request information from YouTube
- MySQL Java connector - a standard database driver that grants the ability to use MySQL with applications.
Some anti-malware software may flag the installer because it comes from an unknown source. You may have to temporarily disable this software in order to run the installer.
You most likely forgot to use the !stop command when you finished. You can stop the audio playback by going to the Task Manager, clicking More details, selecting AudioController.exe, and clicking End task.