create a bandcamp-style audio player for selling albums on itch.io

Overview

CC0 license badge

blamscamp

Mmh, options, runnin' out of options,

Mmh, options, used to have options

bandcamp is great (at time of writing,) but it would be great to have more options for selling zip files of MP3s on the internet. So I created this tool, which lets you create a bandcamp-style audio player for an individual album. The player is an entirely self-contained website, and can be hosted on a variety of platforms, but was designed specifically for itch.io.

You can use it here

Read a guide here

Youtube tutorial here

Collection of Blamscamp albums on itch.io

roadmap

  • reimport exported zip files for editing
  • bulk import music or zip file of music/cover art
  • auto parsing of music title from ID3 tags
  • auto parsing of music order from ID3 tags
  • custom css field
  • option to add additional files to the generated zip file (e.g. so one can set a background image through custom css)
  • option to re-encode audio to lower bitrate
  • auto-updating of the generated player
  • improve mobile support on itch.io. ostensibly only unity games are allowed to have dynamic sizing.

serving

To host the blamscamp editor, all you need are the files in the "src" directory.

To host the blamscamp player, all you need are the files provided in the exported zip.

NOTE: Your web server must support the Accept-Ranges header for track seeking to work.

contributing

Pull requests are welcome! But please note the following:

The generated blamscamp player must not receive any added dependencies. The generator must stay as a single, self-contained file that is as small as reasonably possible. The point is for the generated file to be lightweight. Stick to Vanilla JS.

The blamscamp editor, i.e. index.html, also uses Vanilla JS. I see this as a feature and not a bug. I would like to stick to vanilla as long as possible. That said, if things get too cumbersome I would be amenable to using a framework as long as it's lightweight. Right now blamscamp loads almost instantaniously and I would like to keep it that way.

Additionally, I have set a dependency budget of "4" for this project. The target dependencies are:

  • JSZip (added)
  • an ID3 Tag Parser
  • color picker
  • a MP3 audio encoder

Dependencies of dependencies count toward the total.

Things we would like:

  • UI polish in either the editor or player
  • refactoring to make the code simpler
    • if a new browser feature that has a caniuse score of >95% can remove like 10 lines of code, go for it!
  • implementations of roadmap features

license

This software is public domain, aside from the jszip, jsmediatags, and iro libraries.

Comments
  • :sparkles: Import ZIP files back into blamscamp

    :sparkles: Import ZIP files back into blamscamp

    💪

    Quite a messy solution for storing imported files, but that's how it is unless a UI framework like Svelte or Riot is introduced. I can make a rewrite in Svelte after my PRs are merged if you want. Adding further functionality will probably result in a bigger mess.

    ~~This PR should be conflict-less with my other PRs, but ping me if there are some and you need help.~~

    Ok, there is a merge conflict between my conditional blocks and zip import, but resolving should be pretty obvious.

    import

    opened by CosmoMyzrailGorynych 11
  • :sparkles: Player's theme options + Custom CSS field

    :sparkles: Player's theme options + Custom CSS field

    • Player now uses themable SVG symbols (icons from feathericons.com)
    • All the buttons init their state on page load
    • Added several theme controls, revisited the display of buttons and the slider
      • Transparent background can be used to blend in other pages.
    • Added a simple CSS field
    • Tweaked text styles a bit inside the player

    изображение

    Example usage of transparent background on itch.io (still needs a bit of custom CSS on itch.io page):

    изображение

    opened by CosmoMyzrailGorynych 10
  • Add jsmediatags library

    Add jsmediatags library

    This library adds ~15kb gzipped (52kb unzipped) to the page weight.

    jsmediatags is licensed under the BSD 3-clause license, I've prepended a copy of the license to the minified library. It seems to be the easiest way to be compliant.

    https://github.com/aadsm/jsmediatags/blob/master/LICENSE.md

    In terms of the implementation, I wrap their async API in a promise so that it matches style with get_audio_duration which is the closest analogue I could find in the source.

    If we fail to read tags from a file, just silently fallback to the file.name

    opened by gerardpaapu 2
  • :zap: UI rework

    :zap: UI rework

    Various improvements on the visual and the logic.

    • Songs and cover are stored in JS objects and no longer rely on DOM. This eases serialization/deserialization process.
      • Most dynamic parts in the editor are now rendered with the same template function that is used for exports.
      • The templating function now handles undefined variables.
      • Cover art can be removed after it was added.
      • Previews are now a bit faster as all the values needed for serialization are cached (side-effect).
      • Songs can be replaced with a button (side-effect).
    • Atomic fields are now serialized/deserialized based on data-stored-key and data-stored-scope attributes. New fields will require edits to HTML only.
    • Reorder songs with buttons.
    • Vertical split layout. (It just gives more sense.)

    изображение

    opened by CosmoMyzrailGorynych 1
  • Could you upload actual sources?

    Could you upload actual sources?

    I would like to make some GUI improvements and QoL tweaks (mass song upload plus auto-naming), and seeing https://github.com/blackle/blamscamp/blob/main/jszip.min.js doesn't help me with it 😄

    opened by CosmoMyzrailGorynych 1
  • Add iro color picker instead of using input='color'

    Add iro color picker instead of using input='color'

    image

    this probably conflicts with #9, so I'm keeping it as a PR till that gets merged (don't wanna step on toes)

    very impressed with the size of iro.min.js, it's the smallest of the three dependences so far!

    opened by blackle 0
  • :sparkles: Optional tags in templates

    :sparkles: Optional tags in templates

    Adds a tiny template engine powered by my dark RegExp magic to make several things in the editor optional.

    • ✨ A dedicated templating function applyVarsToTemplate
    • ✨ Templates now support [:if[variable]:]Content[:endif[variable]:] and [:if[variable]:]Content[:else[variable]:]Other content[:endif[variable]:]
    • âš¡ Author, album title, track name, cover are all optional now. Empty track name now produces a placeholder Track â„–42 title.

    Visual explanation:

    image

    opened by CosmoMyzrailGorynych 0
Releases(v0.0.2)
  • v0.0.2(Mar 17, 2022)

    What's Changed

    • Add jsmediatags library by @gerardpaapu in https://github.com/blackle/blamscamp/pull/8
    • :sparkles: Player's theme options + Custom CSS field by @CosmoMyzrailGorynych in https://github.com/blackle/blamscamp/pull/9
    • Add iro color picker instead of using input='color' by @blackle in https://github.com/blackle/blamscamp/pull/10

    New Contributors

    • @gerardpaapu made their first contribution in https://github.com/blackle/blamscamp/pull/8

    Full Changelog: https://github.com/blackle/blamscamp/compare/v0.0.1...v0.0.2

    Source code(tar.gz)
    Source code(zip)
  • v0.0.1(Mar 17, 2022)

Owner
Blackle Morisanchetto
I'm a shark
Blackle Morisanchetto
A Javascript library for working with Audio. It provides a consistent API for loading and playing audio on different browsers and devices. Currently supports WebAudio, HTML5 Audio, Cordova / PhoneGap, and a Flash fallback.

SoundJS SoundJS is a library to make working with audio on the web easier. It provides a consistent API for playing audio in different browsers, inclu

CreateJS 4.3k Dec 31, 2022
AmplitudeJS: Open Source HTML5 Web Audio Library. Design your web audio player, the way you want. No dependencies required.

Documentation • Examples • Tutorials • Support Us • Get Professional Help AmplitudeJS is a lightweight JavaScript library that allows you to control t

Server Side Up 3.9k Jan 2, 2023
:musical_score: ts-audio is an agnostic library that makes it easy to work with AudioContext and create audio playlists in the browser

ts-audio · ts-audio is an agnostic and easy-to-use library to work with the AudioContext API and create Playlists. Features Simple API that abstracts

Evandro Leopoldino Gonçalves 284 Dec 25, 2022
A review aggregator web application that allows users to review albums by leveraging the Spotify Web API.

Reviewify Summary Reviewify is a review aggregator platform that leverages the Spotify Web API. It allows users to: Login with their Spotify accounts

Abhi Ardeshana 3 Oct 7, 2022
SpotLight is a web app which uses spotify developer APIs and lists your most listened songs, albums, artists and genres.

SpotLight is a web app which uses spotify developer APIs and lists your most listened songs, albums, artists and genres.

Sahil Saha 9 Dec 31, 2022
HTML5

One file. Any browser. Same UI. Author: John Dyer http://j.hn/ Website: http://mediaelementjs.com/ License: MIT Meaning: Use everywhere, keep copyrigh

MediaElement.js 8k Dec 27, 2022
HTML5

One file. Any browser. Same UI. Author: John Dyer http://j.hn/ Website: http://mediaelementjs.com/ License: MIT Meaning: Use everywhere, keep copyrigh

MediaElement.js 8k Jan 8, 2023
Radio player for audio tracks in a tezos wallet.

Hicathon 2021 | WG7 7.2 - Galleries and collections Minimal galleries for exhibitions The Team: Name Role Discord Username Twitter Username Wallet Tea

Sean Cooper 23 Jul 11, 2022
Music bot that uses Lavalink for its audio player

Msv Music ?? A Advanced Discord Music Bot Made With Lavalink And Have Many Premium Features with filters and more willl be add soon About Msv Music ??

M s v 36 Jan 4, 2022
This is a simple web based media player for playing video and audio. Build with pure HTML, CSS and Javascript. No framework or library included.

Aim-Player This is a simple web based media player for playing video and audio. Build with pure HTML, CSS and Javascript. No framework or library incl

Aim Mikel 2 Jun 27, 2021
Music-Player - Music player application built with HTML, CSS and vanilla JavaScript

Music-Player Music player application built with HTML, CSS and vanilla JavaScrip

Karthik Umashankar 1 Feb 10, 2022
SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

WordPress-Plugin-SrsPlayer SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc. Usage First, you should get your own video stream

ossrs 3 Jul 27, 2022
SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

ossrs 12 Oct 15, 2022
An online stem player. Inspired by but not affiliated with YEEZY TECH X KANO Stem Player.

Stem Player Online An online stem player. Inspired by but not affiliated with YEEZY TECH X KANO Stem Player. https://stemplayeronline.com See the proj

Luke Weiler 23 Nov 13, 2022
MusicPlayer-Javascript - How to create a custom music player with vanilla javascript

MusicPlayer-Javascript How to create a custom music player with vanilla javascri

Tarokh Mohammadi 1 Feb 8, 2022
Enables

HTML5 video made easy All it takes is a single line of code to make HTML5 video and audio tags work in all major browsers. How to enable video and aud

Dave Hall 1.3k Dec 17, 2022
A self-hosted, completely private and free music streaming server compatible with Synology Audio Station's web browser interface and smartphone apps.

Open Audio Server Open Audio Server is a music streaming server compatible with Audio Station by Synology. Audio Station creates your own private serv

null 91 Dec 11, 2022
Distributed/Decentralized p2p Audio Timeline

Hello, Timeline Decentralized p2p audio timeline experiment, pluggable with GUN, PeerJS or any other p2p network. About WebRTC is bandwidth expensive

Meething dWebRTC 7 Apr 25, 2022
A Browserslist configuration which reflects standardized-audio-context support.

@generative-music/browserslist-config-standardized-audio-context A Browserslist configuration which reflects standardized-audio-context support. This

Generative Music 4 Oct 28, 2022