muscle

An application to easily set up and run online listening experiments for music research.

https://github.com/amsterdam-music-lab/muscle

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.0%) to scientific vocabulary

Keywords

cognition-and-perception experiment-design music
Last synced: 6 months ago · JSON representation ·

Repository

An application to easily set up and run online listening experiments for music research.

Basic Info
Statistics
  • Stars: 4
  • Watchers: 4
  • Forks: 1
  • Open Issues: 71
  • Releases: 37
Topics
cognition-and-perception experiment-design music
Created over 4 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

DOI CI Backend CI Frontend Test Backend Code Coverage Percentage Frontend Code Coverage Percentage

MUSic-related Citizen Science Listening Experiments (MUSCLE)

This application provides an easy way to implement and run online listening experiments for music research. It presents questions, and typically audio stimuli, to participants, and collects their feedback.

Try MUSCLE

  • Try the already implemented experiments at the Amsterdam Music Lab Website.

  • For documentation on how to use the infrastructure, refer to our documentation.

  • We are also happy if you file a feature request in our issues list, or if you fork this repository to add your own code.

  • Check out our releases page for the latest updates and changes.

Before installation

We recommend downloading a code editor, for instance Visual Studio Code, and to use git to copy this repository to your machine, as this makes it easier to keep your local copy up to date.

Installation with Docker

The easiest way to run the application locally is through Docker. Docker is an application which runs a network of virtual machines ("containers") and is therefore (mostly) platform independent.

Mac OS X or Windows 10

Install Docker Desktop.

Linux

Development build

Make a copy of the file .env.dist (in the same directory as this README) and rename it to .env. This file contains variables used by Docker to start up a container network serving MUSCLE.

Start Docker (the app icon is a whale carrying containers). Then, open a terminal and run docker compose up (add sudo on Linux). This command starts up the containers defined in docker compose.yaml: - a PostgreSQL container, for storing experiment/user/playlist data, saved on the host machine in the Docker user data, represented in the volume db_data. Data added to the database will persist if the container is shut down. - a ip2country container, which provides country codes for ip addresses, used for demographic information of users. - a container of the server, defined in DockerfileDevelop in backend. The Dockerfile defines the Python version and installs development dependencies. The startup command runs migrations and then starts up a Django development server. - a container of the client, defined in DockerfileDevelop in frontend. The Dockerfile defines the node version and installs node modules. The startup command kicks off a React development server.

Once you see all containers have started up, open your browser and navigate to localhost:3000. You should now be able to see the first screen of the Goldsmiths Musical Sophistication Index questionnaire.

Since the docker compose.yaml defines bind mounts for backend and frontend, any changes to the files on the host are immediately reflected in the containers, which means code watching works and hot reload works in the same way as with a native node or Django server.

To stop the containers, press ctrl-c or (in another terminal) run docker compose down.

Production build

A production build should define its own docker compose.yaml, making use of the Dockerfile of the backend and frontend environments. It should also define a custom .env file, with safe passwords for the SQL database and the Python backend. Instead of mounting the entire backend and frontend directory and using the development servers, the backend should serve with gunicorn, and the frontend should use a build script to compile static html, css and JavaScript.

Troubleshooting

Please refer to the wiki a checklist of common issues and their solutions.

Owner

  • Name: Amsterdam Music Lab
  • Login: Amsterdam-Music-Lab
  • Kind: organization
  • Email: j.a.burgoyne@uva.nl
  • Location: University of Amsterdam, The Netherlands

Amsterdam Music Lab code repositories

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: MUSCLE
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Berit
    family-names: Janssen
    email: berit.janssen@gmail.com
    affiliation: University of Amsterdam
    orcid: 'https://orcid.org/0000-0001-7218-7642'
  - given-names: Evert Marcel
    family-names: Rot
    email: evert@evertrot.nl
    affiliation: University of Amsterdam
  - given-names: Albertas
    email: albertas.janulevicius@gmail.com
    family-names: Janulevicius
    affiliation: University of Amsterdam
  - given-names: Drikus Antonio
    family-names: Roor
    email: drikusroor@gmail.com
    affiliation: University of Amsterdam
  - given-names: Werner
    family-names: Helmich
    affiliation: SUDOX
  - given-names: Henkjan
    family-names: Honing
    email: h.j.honing@uva.nl
    affiliation: University of Amsterdam
    orcid: 'https://orcid.org/0000-0001-7046-7923'
  - given-names: John Ashley
    family-names: Burgoyne
    email: j.a.burgoyne@uva.nl
    affiliation: University of Amsterdam
    orcid: 'https://orcid.org/0000-0001-6854-5646'
identifiers:
  - type: doi
    value: 10.5281/zenodo.8227598
repository-code: 'https://github.com/Amsterdam-Music-Lab/MUSCLE'
url: 'https://app.amsterdammusiclab.nl/'
abstract: >-
  MUSCLE (MUSic-related Citizen Science Listening
  Experiments) is an infrastructure for reusable online
  music experiments. It can be used by researchers from
  musicology, music cognition, and other audio related
  fields to implement experiments through a graphical user
  interface and Python. MUSCLE presents questions, along
  with text, audio or visual stimuli, to participants. The
  participants' response is saved to a database and can be
  exported to json for analysis in R or other software.
keywords:
  - music
  - experiment-design
  - cognition
  - perception
  - speech
  - audio
license: MIT
version: 3.5.1
date-released: '2025-08-27'

GitHub Events

Total
  • Create event: 162
  • Release event: 7
  • Issues event: 180
  • Delete event: 171
  • Issue comment event: 131
  • Push event: 680
  • Gollum event: 2
  • Pull request review comment event: 131
  • Pull request review event: 209
  • Pull request event: 295
Last Year
  • Create event: 162
  • Release event: 7
  • Issues event: 180
  • Delete event: 171
  • Issue comment event: 131
  • Push event: 680
  • Gollum event: 2
  • Pull request review comment event: 131
  • Pull request review event: 209
  • Pull request event: 295

Dependencies

.github/workflows/test.yml actions
  • actions/checkout v3 composite
backend/Dockerfile docker
  • python 3.8 build
frontend/Dockerfile docker
  • node 18-alpine build
frontend/package.json npm
  • @testing-library/jest-dom ^5.16.1
  • @testing-library/react ^12.1.2
  • @testing-library/user-event ^13.5.0
  • axios >=0.25.0
  • classnames ^2.2.6
  • email-validator ^2.0.4
  • file-saver ^2.0.5
  • next-share 0.25.0
  • qs ^6.10.3
  • react ^17.0.2
  • react-dom ^17.0.2
  • react-rangeslider ^2.2.0
  • react-router 5.2.0
  • react-router-dom 5.2.0
  • react-scripts 5.0.0
  • react-select ^5.4.0
  • react-transition-group ^4.3.0
  • sass ^1.50
frontend/yarn.lock npm
  • 1279 dependencies
package.json npm
backend/requirements/dev.txt pypi
  • asgiref ==3.4.1 development
  • astroid ==2.8.3 development
  • audioread ==2.1.9 development
  • autopep8 ==1.5.7 development
  • certifi ==2023.7.22 development
  • charset-normalizer ==2.1.0 development
  • django ==3.2.20 development
  • django-cors-headers ==3.10.0 development
  • django-debug-toolbar ==3.2.2 development
  • django-inline-actions ==2.4.0 development
  • idna ==3.3 development
  • iptocc ==2.1.2 development
  • isort ==5.9.3 development
  • lazy-object-proxy ==1.6.0 development
  • mccabe ==0.6.1 development
  • numpy ==1.22.0 development
  • pandas ==1.3.4 development
  • platformdirs ==2.4.0 development
  • psycopg2 ==2.9.1 development
  • pycodestyle ==2.8.0 development
  • pylint ==2.11.1 development
  • pylint-django ==2.4.4 development
  • pylint-plugin-utils ==0.6 development
  • python-dateutil ==2.8.2 development
  • python-dotenv ==0.19.1 development
  • pytz ==2021.3 development
  • requests ==2.31.0 development
  • six ==1.16.0 development
  • sqlparse ==0.4.4 development
  • toml ==0.10.2 development
  • tqdm ==4.65.0 development
  • typing-extensions ==3.10.0.2 development
  • urllib3 ==1.26.9 development
  • wrapt ==1.13.2 development
backend/requirements/prod.txt pypi
  • asgiref ==3.7.2
  • audioread ==3.0.0
  • django ==3.2.20
  • django-cors-headers ==4.0.0
  • django-inline-actions ==2.4.0
  • gunicorn ==20.1.0
  • iptocc ==2.1.2
  • numpy ==1.24.3
  • pandas ==1.5.3
  • psycopg2 ==2.9.6
  • python-dateutil ==2.8.2
  • python-dotenv ==1.0.0
  • pytz ==2023.3
  • six ==1.16.0
  • sqlparse ==0.4.4
  • tqdm ==4.65.0
  • typing-extensions ==4.6.3
backend/requirements.in/base.txt pypi
  • Django <4.0
  • IPToCC *
  • audioread *
  • django-cors-headers *
  • django-inline-actions *
  • psycopg2 *
  • python-dotenv *
  • tqdm *
backend/requirements.in/dev.txt pypi
  • autopep8 * development
  • django-debug-toolbar * development
  • pylint * development
  • pylint-django * development
  • requests * development
backend/requirements.in/prod.txt pypi
  • gunicorn *