Getting started
Welcome to the FreeSoundClient Tutorial!
This part of the documentation follows a step-by-step approach to help you get started with the basic functionalities of the FreeSoundClient
.
INFO you can find the source code of the final version of this tutorial on GitHub
Before you start
In order to use this software you need an account on freesound.org and apply for an API key following this link https://freesound.org/apiv2/apply/. The form is quite straight forward: in the Create new API credentials you must give a name and a description to your key, accept the terms of use and click on Request new access credentials
Please save your credentials in you project folder (either in a
.env
file or acredentials.txt
file)
Get started
After downloading the repository, create a project folder and copy the freesound
folder into it and create a new empty file called main.py
. Your project directory should look like this:
.
├── freesound
│ ├── __init__.py
│ ├── filter_types.py
│ ├── formatting.py
│ ├── freesound_api.py
│ ├── freesound_client.py
│ ├── freesound_descriptors.py
│ ├── freesound_errors.py
│ ├── freesound_fields.py
│ ├── freesound_filters.py
│ ├── freesound_list_maker.py
│ ├── freesound_requests.py
│ └── freesound_sound.py
└── main.py
main.py
and import the freesound
library
from freesound import *
API_KEY=<your-api-key>
USER_ID=<your-user-id>
FreeSoundClient
c = FreeSoundClient(USER_ID,API_KEY)
Your first access
Now run your program:
python main.py
freesound-client
library when you run this program you will get the following output:
Output
No access token file found. Authorizing...
==================================================
Visit this page to authorize your user: https://freesound.org/apiv2/oauth2/authorize/?client_id=<your-client-id>&response_type=code&state=xyz
Enter the authorization code from the redirect URL:
All the requests made by the FreeSoundClient
use the OAuth2 authentication protocol, so the application needs an access token from the API to get access to the database.
If you follow the link posted in your terminal a browser page will display the following information:

Where app-name will be the name of the name value that you provided when applying for the API credentials. Copy <the-authorization-code-to-copy>
(an alphanumeric string) and paste it into the terminal:
Output
Enter the authorization code from the redirect URL: <the-authorization-code-to-copy>
https://freesound.org/apiv2/oauth2/access_token/
Authorization succeded!
Getting Client Info
https://freesound.org/apiv2/me/
FreeSound Client <your-username> Initialized
You are now granted to access the Freesound database.
This process will create a file called access_token.json
where your access token's data will be stored.
├── access_token.json
├── freesound
└── main.py
Note: If you delete this file the
FreeSoundClient
will simply repeat this authorization process and create a newaccess_token.json
file for you
Your first search
Now that your client is authorized to query the Freesound Database let's make a simple research:
from freesound import *
API_KEY = "<your-api-key>"
USER_ID = "<your-user-id>"
c = FreeSoundClient(USER_ID,API_KEY)
c.search(query="piano detuned")
query
attribute needs a space-separated string of words that you want to search into the Freesound Database. Running this program will produce the following output:
Output
Loading token from file
________________
Getting Client Info
https://freesound.org/apiv2/me/
FreeSound Client <your-username> Initialized
________________
Searching for piano detuned
https://freesound.org/apiv2/search/text/?query=piano+detuned&fields=id%2Cname%2C&page_size=15&sort=score&normalized=0
Found 469 results
Because you already have an access_token.json
the client will inform you that it is Loading token from file
and then will perform the search
.
With this research you got 469 results
which are stored into the memory of the FreeSoundClient
.
The client will also print the url generated by the search
request. If you copy this url and paste it into a browser you should see the actual result of your reasearch (you must be logged in to see this result otherwise you will get an HTTP 401 Unauthorized
response).
NOTICE: if you visit the url you will see a list of only 15 of the 469 results. You will understand why in the next paragraph.
Printing data from the result
By default, when performing a search
the FreeSoundClient
will get a dictionary
that contains a parsed response from the server. Let's print it using the FreeSoundClient.results_list attribute:
print(c.results_list)
Output
{
"results": [
{
"id": 30274,
"name": "piano_impression1.aif"
},
{
"id": 382508,
"name": "Piano 16 F4.wav"
},
{
"id": 382532,
"name": "Piano 45 G#5.wav"
},
{
"id": 382541,
"name": "Piano 57 G#6.wav"
},
{
"id": 382539,
"name": "Piano 59 A6.wav"
},
{
"id": 382533,
"name": "Piano 46 A5.wav"
},
{
"id": 382510,
"name": "Piano 20 G4.wav"
},
{
"id": 382546,
"name": "Piano 52 C#6.wav"
},
{
"id": 382484,
"name": "Piano 23 A4.wav"
},
{
"id": 382504,
"name": "Piano 12 D#4.wav"
},
{
"id": 382505,
"name": "Piano 11 D#4.wav"
},
{
"id": 382511,
"name": "Piano 19 G4.wav"
},
{
"id": 382502,
"name": "Piano 14 E4.wav"
},
{
"id": 382531,
"name": "Piano 44 G5.wav"
},
{
"id": 382486,
"name": "Piano 21 G4.wav"
}
],
"timestamp": "2024-03-01T12:30:02.984110",
"count": 469
}
The response from the server is paginated which means that even if the client found 469 sound files that match your query ("piano detuned"
) you will only see a list of 15 files.
In this dictionary
there are 3 keys:
search-results
: alist
containing data about the first 15 sound files matching the query.timestamp
: when the request has been submittedcount
the total number of sound files found
Another way to print the result of a search
request is to use the FreeSound.dump_results()
method, a utility function that will just print a more human-readable version of c.results_list
. Adding:
c.dump_results()
main.py
will produce the following output
Output
Found 469 results
________________
id:30274
name:piano_impression1.aif
________________
id:382530
name:Piano 43 F#5.wav
________________
...
Notice that in both cases the only information about the sound files that you collected from the database are
id
andname
Download your search
results
Downloading files from a search
result it is pretty straight forward using the method FreeSoundClient.download_results()
. Add:
c.download_results()
main.py
At this point you will be prompted with a few questions:
How many files do you want to download? [a number | all]
3
. Then you need to specify the folder where the sound files will be downloaded:
Please set an output folder:
Output
Attribute 'download' not found! Please include the 'download' keyword in your fields' search list and retry
Logging out
There is an Exception
! The reason is simple: when querying the database the FreeSoundClient
did not retrieve the download
link associated with the sound files but only their id
s and name
s. You need to modify your search parameters. Go back to the line where you call the c.search()
and modify it as follows:
c.search(query="piano detuned",fields="download")
fields
is a feature that allows you to specify which attribute associate with a sound file should be included in the search results. In this case adding the keyword download
will include the download link from which the FreeSoundClient
will be then able to find and download the actual sound files. The url resulting of this query is now:
https://freesound.org/apiv2/search/text/?query=piano+detuned&fields=id%2Cname%2Cdownload&page_size=15&sort=score&normalized=0
Notice how the url generated by the search request now includes the
download
keyword in the 'fields' parameter
and c.dump_results()
will produce
Output
________________
id:30274
name:piano_impression1.aif
download:https://freesound.org/apiv2/sounds/30274/download/
________________
id:382530
name:Piano 43 F#5.wav
download:https://freesound.org/apiv2/sounds/382530/download/
________________
id:382535
...
The download link is now available and c.download_results()
should work as expected
Output
How many files do you want to download? [a number | all] 3
Please set an output folder:
Downloading 3 files of 469
________________
piano_impression1.aif
Downloading piano_impression1.aif
https://freesound.org/apiv2/sounds/30274/download/
Downloaded Files: 1 of 3
________________
Piano-43-F#5.wav
Downloading Piano-43-F#5.wav
https://freesound.org/apiv2/sounds/382530/download/
Downloaded Files: 2 of 3
________________
...
You can now find these files in your project folder. When prompted, feel free to specify another folder
either using an absolute or a relative path. You can avoid being prompted by adding the output_folder_path
and the files_count
arguments to c.download_results()
:
c.download_results("sounds", 3)
sounds
inside your project folder and download 3 files from the search
result into it.
Conclusions
This tutorial allowed you to learn how to set up a simple project using the freesound-client
library.
In the next section you will learn the basics of the Freesound API and how to take full advantage of this library.