Skip to content
Loops... with friends!
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
priv
test
web
.gitignore
.iex.exs
.tool-versions
LICENSE
README.md
compile
elixir_buildpack.config
mix.exs
mix.lock
package.json
webpack.config.js

README.md

Loops With Friends

Loops With Friends is a collaborative music-making web app built with Elixir/Phoenix, Elm, and the WebAudio API.

It supports up to seven users in a given "jam," in which each user gets their own music loop. Each user can start and stop their loop to make music in real time with the other users in the jam. The app automatically creates and balances additional jams as users join and leave.

See these blog posts for more on how it's built.

  1. Collaborative Music Loops in Elixir and Elm
  2. Jamming with Phoenix Presence
  3. Talk to My (Elixir) Agent
  4. Phoenix Channel Race Conditions
  5. Testing Phoenix Sockets and Channels
  6. Injecting Agent Names in Elixir Tests
  7. Using Stubs to Isolate Elixir Tests
  8. Testing Function Delegation in Elixir

Development

  1. Install Elixir, Phoenix, and dependencies.

  2. Clone and cd into the repository.

    git clone https://github.com/jeffcole/loops_with_friends.git
    cd loops_with_friends
  3. Install Elixir dependencies.

    mix deps.get
  4. Create and migrate the database.

    mix ecto.create && mix ecto.migrate
  5. Install asset dependencies.

    npm install
  6. Install Elm packages.

    cd web/static/elm
    ../../../node_modules/.bin/elm-package install
    cd ../../..
  7. Run the server.

    mix phoenix.server
  8. Visit http://localhost:4000 in the browser.

Testing

Run the test suite with mix test.

Todo

  • Eliminate the loop queueing gap by playing all loops on page load at zero volume, and setting the volume on user message receipt.

Attribution

The loops used by the app are Apple Loops.

License

Copyright © 2017 Jeff Cole. See LICENSE for more information.

You can’t perform that action at this time.