diff --git a/.gitattributes b/.gitattributes
index b50214b..34bdb9b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -11,8 +11,6 @@
# Denote binary files
*.mp3 binary
-*.ogg binary
-*.wav binary
*.tgz binary
# Windows-specific files
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 89ed142..d65177f 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -28,7 +28,6 @@ Closes #(issue number)
- [ ] Sound is in MP3 format
- [ ] File size is under 500KB
- [ ] Added sound to `assets/sounds/`
-- [ ] Updated `assets/sounds/README.md`
- [ ] Created/updated config that uses the sound
## For Code Changes
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..7e5e962
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,27 @@
+name: Publish Package
+
+on:
+ push:
+ tags:
+ - "v*"
+
+permissions:
+ id-token: write
+ contents: read
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: "18"
+ registry-url: "https://registry.npmjs.org"
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Publish to npm
+ run: npm publish
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3580179..152ee26 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,51 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+---
+
+## [1.1.0] - 2026-01-03
+
+### Added
+
+- Many new sound assets (effects, ambience, jingles and samples), including `aizen-yokoso.mp3`, `among-us.mp3`, `awesome-music.mp3`, `intro-jingle.mp3`, `outro-sting.mp3`, `jazz.mp3`, `light-saber.mp3`, `sci-fi-picking-detector.mp3`, `spiderman.mp3`, `troll-laugh.mp3`, and a set of piano samples under `assets/sounds/piano-keys/`.
+- New config presets:
+ - `src/configs/among-us-sound.yaml`
+ - `src/configs/barking.yaml`
+ - `src/configs/bleach-sound.yaml`
+ - `src/configs/elonmusk-secretaria.yaml`
+ - `src/configs/fire-alarm.yaml`
+ - `src/configs/firework.yaml`
+ - `src/configs/funny-car-horn.yaml`
+ - `src/configs/healing-magic-config.yaml`
+ - `src/configs/jazz-music.yaml`
+ - `src/configs/maoe-silviosantos.yaml`
+ - `src/configs/memes.yaml`
+ - `src/configs/nature.yaml`
+ - `src/configs/piano-keyboard.yaml`
+ - `src/configs/podcast-stingers.yaml`
+ - `src/configs/sci-fi-picking-detector.yaml`
+ - `src/configs/sci-fi.yaml`
+- Added `CODE_OF_CONDUCT.md`.
+- Added `lint-configs.js` to support config validation.
+
+### Changed
+
+- `README.md`: removed Hacktoberfest references; added evergreen contributors note and auto-generated contributors badge/section.
+- `postinstall.js`: prints a brief thank-you message on install.
+- `src/configs/default.yaml`: updated keybinds and audio settings.
+- `src/Soundbind.js` and `src/core/AudioManager.js`: internal improvements.
+- `package.json`: metadata/package tweaks.
+- Project housekeeping: updated `.gitattributes`, `.github/pull_request_template.md`, `assets/sounds/README.md`, and `src/configs/README.md`.
+
+### Fixed
+
+- Lint/tooling adjustments: `eslint.config.js` and `lint-assets.js` updated to accommodate new assets/configs.
+- Template rename: `src/configs/soundbind.example.yaml` to `src/configs/soundbind-example.yaml`.
+
+[1.1.0]: https://github.com/UselessCo/soundbind/releases/tag/v1.1.0
+
+---
+
## [1.0.0] - 2025-10-09
### Added
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..4deed00
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,260 @@
+# Code of Conduct
+
+๐ค **Be respectful, be kind, and have fun! We welcome contributors of all skill levels - from complete beginners adding their first sound file to experienced developers implementing major features. Every contribution matters and helps build an amazing soundboard community together. Let's create something awesome while supporting each other!** ๐โจ
+
+---
+
+## ๐ต Introduction
+
+**Soundbind** is a cross-platform keybind-based soundboard system that brings together a diverse community of **gamers**, **streamers**, **content creators**, **developers**, and **audio enthusiasts**.
+
+### ๐ฏ About Our Project
+
+Soundbind enables users to map keyboard shortcuts to audio files for gaming, streaming, presentations, or entertainment. Our community contributes:
+
+- ๐ต **Sound Effects** - Memes, gaming sounds, nature sounds, and creative audio clips
+- โ๏ธ **Configuration Files** - Custom keybind setups for different use cases
+- ๐ง **Code Improvements** - Bug fixes, new features, and performance enhancements
+- ๐ **Documentation** - Guides, tutorials, and project improvements
+
+### ๐ซ Our Community Values
+
+We're committed to creating a **fun, welcoming, and inclusive environment** where:
+
+- **First-time contributors** feel supported and encouraged
+- **Experienced developers** can mentor and collaborate
+- **Content creators** can share their creative audio contributions
+- **Users** can provide feedback and suggestions
+- **Everyone** can learn, grow, and have fun together
+
+This Code of Conduct outlines our community standards and ensures Soundbind remains a positive space for all participants.
+
+---
+
+## ๐ฌ Our Pledge
+
+We as contributors, maintainers, and community members pledge to make participation in **Soundbind** a **harassment-free experience for everyone**, regardless of:
+
+- Age
+- Body size
+- Visible or invisible disability
+- Ethnicity
+- Gender identity and expression
+- Level of experience
+- Education
+- Socio-economic status
+- Nationality
+- Personal appearance
+- Race
+- Religion (or lack thereof)
+- Sexual identity and orientation
+
+We pledge to act and interact in ways that contribute to an **open, welcoming, diverse, and healthy community**.
+
+---
+
+## ๐ค Community Standards
+
+### โ
Positive Behaviors We Encourage
+
+**General Conduct:**
+
+- Showing empathy and kindness toward others
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Taking responsibility and apologizing for mistakes
+- Focusing on what's best for the community
+
+**Project-Specific Behaviors:**
+
+- **Helping newcomers** understand Git, GitHub, and contribution workflows
+- **Providing constructive feedback** on sound quality, configuration setups, or code
+- **Sharing knowledge** about audio formats, keybinding best practices, or technical solutions
+- **Celebrating contributions** regardless of size - from single sound files to major features
+- **Being patient** with questions about audio setup, platform compatibility, or usage
+- **Respecting copyright** and only contributing sounds you have rights to use
+
+### โ Unacceptable Behaviors
+
+**General Misconduct:**
+
+- Sexualized language, imagery, or unwelcome sexual attention
+- Trolling, insulting, or derogatory comments
+- Personal or political attacks
+- Public or private harassment
+- Publishing others' private information without consent
+
+**Project-Specific Issues:**
+
+- **Copyright violations** - Contributing copyrighted audio without permission
+- **Malicious content** - Submitting harmful, offensive, or inappropriate sound files
+- **Spam contributions** - Low-quality or irrelevant submissions
+- **Gatekeeping** - Discouraging newcomers or dismissing "simple" contributions
+- **Platform elitism** - Discriminating based on operating system, gaming platform, or technical setup
+
+---
+
+## ๐ Scope
+
+This Code of Conduct applies to all community spaces and activities related to the project, including:
+
+- **GitHub repositories** โ issues, pull requests, comments, discussions, commits, and code reviews
+- **Community communication channels** โ chats, forums, mailing lists, and social media platforms used by the project
+- **Public representation** โ when contributors or maintainers act as official representatives of the project in any public setting
+
+All members are expected to uphold these standards in every interaction to help maintain a respectful, inclusive, and welcoming environment within community.
+
+---
+
+## ๐ฎ Enforcement Responsibilities
+
+### ๐ก๏ธ Maintainer Duties
+
+Project maintainers are responsible for clarifying and enforcing our community standards. They have the authority to:
+
+**Content Moderation:**
+
+- Remove, edit, or reject comments, commits, code, wiki edits, issues, and pull requests
+- Review and validate sound file contributions for appropriateness and copyright compliance
+- Ensure configuration files follow project guidelines and don't contain malicious content
+- Moderate discussions in issues, pull requests, and community spaces
+
+**Community Support:**
+
+- Welcome and guide new contributors through their first contributions
+- Provide technical assistance for audio setup, platform compatibility, and contribution workflows
+- Facilitate constructive discussions about project direction and feature requests
+- Recognize and celebrate community contributions
+
+**Quality Assurance:**
+
+- Verify that contributed sounds meet technical requirements (format, size, quality)
+- Test configuration files across different platforms when possible
+- Ensure code contributions maintain project standards and compatibility
+
+Maintainers who fail to enforce this Code of Conduct fairly and consistently may face review by the project leadership team.
+
+---
+
+## ๐จ Reporting Issues
+
+### ๐ข How to Report
+
+If you experience or witness behavior that violates this Code of Conduct, please report it:
+
+**Public Reporting:**
+**GitHub Issues:** For public concerns, use our [issue tracker](https://github.com/UselessCo/soundbind/issues)
+**GitHub Discussions:** For community questions, use [discussions](https://github.com/UselessCo/soundbind/discussions)
+
+**Private Reporting:**
+**Direct Contact:** For sensitive issues, contact maintainers directly via GitHub DM or check their profile contact information
+ **Discord:** Connect with maintainers on Discord for real-time private discussions
+
+### ๐ What to Include
+
+When reporting, please provide:
+
+- **Description** of the incident or behavior
+- **Context** - where it occurred (PR, issue, discussion, etc.)
+- **Evidence** - links, screenshots, or quotes (if applicable)
+- **Impact** - how it affected you or the community
+- **Preferred outcome** - what resolution you're seeking
+
+### ๐ Our Response Process
+
+1. **Acknowledgment** - We'll confirm receipt within 48 hours
+2. **Investigation** - Fair and thorough review of the situation
+3. **Decision** - Appropriate action based on our enforcement guidelines
+4. **Follow-up** - Communication with all parties involved
+
+All reports are handled **confidentially** and **without retaliation**. We respect the privacy and security of reporters.
+
+---
+
+## โ๏ธ Enforcement Guidelines
+
+### Progressive Response System
+
+**1. ๐ Correction**
+
+- **When:** Minor violations, first-time issues, or misunderstandings
+- **Action:** Private message explaining the issue and expected behavior
+- **Examples:** Inappropriate language, off-topic discussions, minor copyright concerns
+
+**2. โ ๏ธ Warning**
+
+- **When:** Continued minor violations or moderate first-time issues
+- **Action:** Formal warning with clear expectations for improvement
+- **Examples:** Repeated unhelpful comments, dismissive behavior toward newcomers
+
+**3. โธ๏ธ Temporary Restriction**
+
+- **When:** Serious violations or pattern of problematic behavior
+- **Action:** Temporary ban from contributing (1-30 days)
+- **Examples:** Harassment, malicious contributions, copyright violations
+
+**4. ๐ซ Permanent Ban**
+
+- **When:** Severe violations or continued violations after temporary restrictions
+- **Action:** Permanent removal from the project community
+- **Examples:** Doxxing, threats, repeated malicious behavior, serious copyright infringement
+
+### ๐ค Special Considerations
+
+- **First-time contributors** receive extra patience and guidance
+- **Technical issues** (like audio format problems) are treated as learning opportunities
+- **Cultural differences** in communication styles are considered
+- **Good faith efforts** to improve are always recognized
+
+Each situation is evaluated individually with consideration for context, intent, and community impact.
+
+---
+
+## ๐ Acknowledgement
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct/](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
+
+Community Impact Guidelines were inspired by the [Mozilla Code of Conduct Enforcement Ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this Code of Conduct, see the FAQ at:
+[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
+Translations are available at:
+[https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations)
+
+---
+
+## ๐ Newcomer Support
+
+### Hacktoberfest Welcome
+
+Soundbind is designed for **first-time contributors**!
+
+**What makes us beginner-friendly:**
+
+- ๐ต **Simple contributions** - Adding sound files requires no coding experience
+- โ๏ธ **Clear guidelines** - Step-by-step instructions for all contribution types
+- ๐ **Quick feedback** - Most PRs reviewed within 24 hours
+- ๐ **Real impact** - Your contributions become part of a published npm package
+- ๐ค **Mentorship** - Experienced contributors help newcomers learn Git and GitHub
+
+### New Contributor Support
+
+**We provide extra support for:**
+
+- First-time GitHub users learning pull requests and Git workflows
+- Audio enthusiasts new to open source contribution
+- Developers exploring Node.js and cross-platform audio projects
+- Content creators wanting to share their sound collections
+
+**Getting Started Resources:**
+
+- ๐ [CONTRIBUTING.md](CONTRIBUTING.md) - Detailed contribution guide
+- ๐ฏ [Good First Issues](https://github.com/UselessCo/soundbind/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - Beginner-friendly tasks
+- ๐ฌ [Discussions](https://github.com/UselessCo/soundbind/discussions) - Ask questions and get help
+
+**Remember:** Every expert was once a beginner. We celebrate all contributions, no matter how small!
+
+**Happy contributing and welcome to the Soundbind community!** ๐๐ต
diff --git a/README.md b/README.md
index b87a24e..31edd8f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[](https://github.com/UselessCo/soundbind/actions/workflows/test.yml) [](https://www.npmjs.com/package/soundbind) [](https://www.npmjs.com/package/soundbind) [](LICENSE)
+[](https://github.com/UselessCo/soundbind/actions/workflows/test.yml) [](https://www.npmjs.com/package/soundbind) [](https://www.npmjs.com/package/soundbind) [](LICENSE)
# Soundbind
@@ -8,8 +8,6 @@ A lightweight, cross-platform keybind-based soundboard system built with Node.js
---
-## ๐ Hacktoberfest Welcome! Perfect for First-Time Contributors
-
**Looking for an easy first contribution?** You're in the right place! This project was specifically designed to welcome beginners and provide a meaningful contribution experience.
### Why Contribute Here?
@@ -256,4 +254,14 @@ This is an open-source project. Sound files and configurations are community-con
## License
-MIT License - see [LICENSE](LICENSE) for details.
+**MIT License** - see [LICENSE](LICENSE) for details.
+
+---
+
+## ๐ Thanks to all contributors
+
+A big thank you to everyone who has contributed! Your contributions keep Soundbind alive and improving.
+
+
+
+
diff --git a/assets/sounds/README.md b/assets/sounds/README.md
index cc0745e..1a6486a 100644
--- a/assets/sounds/README.md
+++ b/assets/sounds/README.md
@@ -2,12 +2,6 @@
This directory contains community-contributed sound files for Soundbind.
-## Included Sounds
-
-- `danca-gatinho.mp3` (32KB) - Dance cat meme sound
-- `oloquinho.mp3` (301KB) - Brazilian meme sound
-- `omaewa.mp3` (119KB) - Anime reference sound
-
## Contributing Sounds
We welcome sound contributions! Please follow these guidelines:
@@ -15,10 +9,9 @@ We welcome sound contributions! Please follow these guidelines:
### Requirements
1. **Format**: MP3 only (for Windows compatibility)
-2. **Size**: Keep files under 500KB when possible
-3. **Quality**: Clear audio, no distortion, 128-192 kbps recommended
-4. **Licensing**: Only submit sounds you have rights to use
-5. **Naming**: Use descriptive, lowercase names with hyphens
+2. **Size**: Keep files under 500KB
+3. **Licensing**: Only submit sounds you have rights to use
+4. **Naming**: Use descriptive, lowercase names with hyphens
### How to Contribute
@@ -28,14 +21,6 @@ We welcome sound contributions! Please follow these guidelines:
4. Create or update a config in `src/configs/` that uses your sound
5. Submit a Pull Request
-### Sound Info Template
-
-When adding a sound, please add it to the list above:
-
-```markdown
-- `your-sound.mp3` (XXkB) - Brief description
-```
-
## Usage
Reference sounds in your config files:
diff --git a/assets/sounds/aizen-yokoso.mp3 b/assets/sounds/aizen-yokoso.mp3
new file mode 100644
index 0000000..a06bcda
Binary files /dev/null and b/assets/sounds/aizen-yokoso.mp3 differ
diff --git a/assets/sounds/among-us.mp3 b/assets/sounds/among-us.mp3
new file mode 100644
index 0000000..62a8c91
Binary files /dev/null and b/assets/sounds/among-us.mp3 differ
diff --git a/assets/sounds/armadillo-ok.mp3 b/assets/sounds/armadillo-ok.mp3
new file mode 100644
index 0000000..dd3dfd8
Binary files /dev/null and b/assets/sounds/armadillo-ok.mp3 differ
diff --git a/assets/sounds/awesome-music.mp3 b/assets/sounds/awesome-music.mp3
new file mode 100644
index 0000000..a28b355
Binary files /dev/null and b/assets/sounds/awesome-music.mp3 differ
diff --git a/assets/sounds/bankai.mp3 b/assets/sounds/bankai.mp3
new file mode 100644
index 0000000..82ac98d
Binary files /dev/null and b/assets/sounds/bankai.mp3 differ
diff --git a/assets/sounds/break-swish.mp3 b/assets/sounds/break-swish.mp3
new file mode 100644
index 0000000..11c22df
Binary files /dev/null and b/assets/sounds/break-swish.mp3 differ
diff --git a/assets/sounds/cat-laugh.mp3 b/assets/sounds/cat-laugh.mp3
new file mode 100644
index 0000000..63fbbbc
Binary files /dev/null and b/assets/sounds/cat-laugh.mp3 differ
diff --git a/assets/sounds/chime-soft.mp3 b/assets/sounds/chime-soft.mp3
new file mode 100644
index 0000000..dd95cf2
Binary files /dev/null and b/assets/sounds/chime-soft.mp3 differ
diff --git a/assets/sounds/cow-moo.mp3 b/assets/sounds/cow-moo.mp3
new file mode 100644
index 0000000..994fa7e
Binary files /dev/null and b/assets/sounds/cow-moo.mp3 differ
diff --git a/assets/sounds/crowd-cheering.mp3 b/assets/sounds/crowd-cheering.mp3
new file mode 100644
index 0000000..4e23f92
Binary files /dev/null and b/assets/sounds/crowd-cheering.mp3 differ
diff --git a/assets/sounds/dog-barking.mp3 b/assets/sounds/dog-barking.mp3
new file mode 100644
index 0000000..8b75030
Binary files /dev/null and b/assets/sounds/dog-barking.mp3 differ
diff --git a/assets/sounds/elonmusk-secretaria.mp3 b/assets/sounds/elonmusk-secretaria.mp3
new file mode 100644
index 0000000..245b5ab
Binary files /dev/null and b/assets/sounds/elonmusk-secretaria.mp3 differ
diff --git a/assets/sounds/fire-alarm.mp3 b/assets/sounds/fire-alarm.mp3
new file mode 100644
index 0000000..e7a83f3
Binary files /dev/null and b/assets/sounds/fire-alarm.mp3 differ
diff --git a/assets/sounds/firework.mp3 b/assets/sounds/firework.mp3
new file mode 100644
index 0000000..2ec4f36
Binary files /dev/null and b/assets/sounds/firework.mp3 differ
diff --git a/assets/sounds/footsteps-trail.mp3 b/assets/sounds/footsteps-trail.mp3
new file mode 100644
index 0000000..a65bdba
Binary files /dev/null and b/assets/sounds/footsteps-trail.mp3 differ
diff --git a/assets/sounds/funny-car-horn.mp3 b/assets/sounds/funny-car-horn.mp3
new file mode 100644
index 0000000..ef84717
Binary files /dev/null and b/assets/sounds/funny-car-horn.mp3 differ
diff --git a/assets/sounds/healing-magic.mp3 b/assets/sounds/healing-magic.mp3
new file mode 100644
index 0000000..226fe04
Binary files /dev/null and b/assets/sounds/healing-magic.mp3 differ
diff --git a/assets/sounds/intro-jingle.mp3 b/assets/sounds/intro-jingle.mp3
new file mode 100644
index 0000000..87f89d8
Binary files /dev/null and b/assets/sounds/intro-jingle.mp3 differ
diff --git a/assets/sounds/jazz.mp3 b/assets/sounds/jazz.mp3
new file mode 100644
index 0000000..e6ffbef
Binary files /dev/null and b/assets/sounds/jazz.mp3 differ
diff --git a/assets/sounds/light-rain.mp3 b/assets/sounds/light-rain.mp3
new file mode 100644
index 0000000..0e24b2d
Binary files /dev/null and b/assets/sounds/light-rain.mp3 differ
diff --git a/assets/sounds/light-saber.mp3 b/assets/sounds/light-saber.mp3
new file mode 100644
index 0000000..d275a41
Binary files /dev/null and b/assets/sounds/light-saber.mp3 differ
diff --git a/assets/sounds/maoe-silviosantos.mp3 b/assets/sounds/maoe-silviosantos.mp3
new file mode 100644
index 0000000..3fd3cd5
Binary files /dev/null and b/assets/sounds/maoe-silviosantos.mp3 differ
diff --git a/assets/sounds/nature-birds.mp3 b/assets/sounds/nature-birds.mp3
new file mode 100644
index 0000000..86609aa
Binary files /dev/null and b/assets/sounds/nature-birds.mp3 differ
diff --git a/assets/sounds/nature-forest.mp3 b/assets/sounds/nature-forest.mp3
new file mode 100644
index 0000000..5b14e40
Binary files /dev/null and b/assets/sounds/nature-forest.mp3 differ
diff --git a/assets/sounds/nature-river.mp3 b/assets/sounds/nature-river.mp3
new file mode 100644
index 0000000..ca3ebfd
Binary files /dev/null and b/assets/sounds/nature-river.mp3 differ
diff --git a/assets/sounds/neighing-horse.mp3 b/assets/sounds/neighing-horse.mp3
new file mode 100644
index 0000000..4ca7ae6
Binary files /dev/null and b/assets/sounds/neighing-horse.mp3 differ
diff --git a/assets/sounds/outro-sting.mp3 b/assets/sounds/outro-sting.mp3
new file mode 100644
index 0000000..d0a8fab
Binary files /dev/null and b/assets/sounds/outro-sting.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-a3.mp3 b/assets/sounds/piano-keys/piano-a3.mp3
new file mode 100644
index 0000000..0cb3bce
Binary files /dev/null and b/assets/sounds/piano-keys/piano-a3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-a4.mp3 b/assets/sounds/piano-keys/piano-a4.mp3
new file mode 100644
index 0000000..1b5f5cc
Binary files /dev/null and b/assets/sounds/piano-keys/piano-a4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-as3.mp3 b/assets/sounds/piano-keys/piano-as3.mp3
new file mode 100644
index 0000000..acbf402
Binary files /dev/null and b/assets/sounds/piano-keys/piano-as3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-as4.mp3 b/assets/sounds/piano-keys/piano-as4.mp3
new file mode 100644
index 0000000..936165d
Binary files /dev/null and b/assets/sounds/piano-keys/piano-as4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-b3.mp3 b/assets/sounds/piano-keys/piano-b3.mp3
new file mode 100644
index 0000000..f081b7e
Binary files /dev/null and b/assets/sounds/piano-keys/piano-b3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-b4.mp3 b/assets/sounds/piano-keys/piano-b4.mp3
new file mode 100644
index 0000000..3044e0c
Binary files /dev/null and b/assets/sounds/piano-keys/piano-b4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-c3.mp3 b/assets/sounds/piano-keys/piano-c3.mp3
new file mode 100644
index 0000000..e25072e
Binary files /dev/null and b/assets/sounds/piano-keys/piano-c3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-c4.mp3 b/assets/sounds/piano-keys/piano-c4.mp3
new file mode 100644
index 0000000..8fc8644
Binary files /dev/null and b/assets/sounds/piano-keys/piano-c4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-c5.mp3 b/assets/sounds/piano-keys/piano-c5.mp3
new file mode 100644
index 0000000..644ebfc
Binary files /dev/null and b/assets/sounds/piano-keys/piano-c5.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-cs3.mp3 b/assets/sounds/piano-keys/piano-cs3.mp3
new file mode 100644
index 0000000..585e479
Binary files /dev/null and b/assets/sounds/piano-keys/piano-cs3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-cs4.mp3 b/assets/sounds/piano-keys/piano-cs4.mp3
new file mode 100644
index 0000000..708aba0
Binary files /dev/null and b/assets/sounds/piano-keys/piano-cs4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-cs5.mp3 b/assets/sounds/piano-keys/piano-cs5.mp3
new file mode 100644
index 0000000..a42a75b
Binary files /dev/null and b/assets/sounds/piano-keys/piano-cs5.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-d3.mp3 b/assets/sounds/piano-keys/piano-d3.mp3
new file mode 100644
index 0000000..a4ca126
Binary files /dev/null and b/assets/sounds/piano-keys/piano-d3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-d4.mp3 b/assets/sounds/piano-keys/piano-d4.mp3
new file mode 100644
index 0000000..cb3c929
Binary files /dev/null and b/assets/sounds/piano-keys/piano-d4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-d5.mp3 b/assets/sounds/piano-keys/piano-d5.mp3
new file mode 100644
index 0000000..02a37f0
Binary files /dev/null and b/assets/sounds/piano-keys/piano-d5.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-ds3.mp3 b/assets/sounds/piano-keys/piano-ds3.mp3
new file mode 100644
index 0000000..b61e5d9
Binary files /dev/null and b/assets/sounds/piano-keys/piano-ds3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-ds4.mp3 b/assets/sounds/piano-keys/piano-ds4.mp3
new file mode 100644
index 0000000..a6327db
Binary files /dev/null and b/assets/sounds/piano-keys/piano-ds4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-ds5.mp3 b/assets/sounds/piano-keys/piano-ds5.mp3
new file mode 100644
index 0000000..87da26b
Binary files /dev/null and b/assets/sounds/piano-keys/piano-ds5.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-e3.mp3 b/assets/sounds/piano-keys/piano-e3.mp3
new file mode 100644
index 0000000..d060176
Binary files /dev/null and b/assets/sounds/piano-keys/piano-e3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-e4.mp3 b/assets/sounds/piano-keys/piano-e4.mp3
new file mode 100644
index 0000000..1d8d510
Binary files /dev/null and b/assets/sounds/piano-keys/piano-e4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-e5.mp3 b/assets/sounds/piano-keys/piano-e5.mp3
new file mode 100644
index 0000000..ea5cc65
Binary files /dev/null and b/assets/sounds/piano-keys/piano-e5.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-f3.mp3 b/assets/sounds/piano-keys/piano-f3.mp3
new file mode 100644
index 0000000..5d6de0c
Binary files /dev/null and b/assets/sounds/piano-keys/piano-f3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-f4.mp3 b/assets/sounds/piano-keys/piano-f4.mp3
new file mode 100644
index 0000000..5ee1fff
Binary files /dev/null and b/assets/sounds/piano-keys/piano-f4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-fs3.mp3 b/assets/sounds/piano-keys/piano-fs3.mp3
new file mode 100644
index 0000000..deb6d4b
Binary files /dev/null and b/assets/sounds/piano-keys/piano-fs3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-fs4.mp3 b/assets/sounds/piano-keys/piano-fs4.mp3
new file mode 100644
index 0000000..e3a935a
Binary files /dev/null and b/assets/sounds/piano-keys/piano-fs4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-g3.mp3 b/assets/sounds/piano-keys/piano-g3.mp3
new file mode 100644
index 0000000..1fd196f
Binary files /dev/null and b/assets/sounds/piano-keys/piano-g3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-g4.mp3 b/assets/sounds/piano-keys/piano-g4.mp3
new file mode 100644
index 0000000..b7b8281
Binary files /dev/null and b/assets/sounds/piano-keys/piano-g4.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-gs3.mp3 b/assets/sounds/piano-keys/piano-gs3.mp3
new file mode 100644
index 0000000..25419ec
Binary files /dev/null and b/assets/sounds/piano-keys/piano-gs3.mp3 differ
diff --git a/assets/sounds/piano-keys/piano-gs4.mp3 b/assets/sounds/piano-keys/piano-gs4.mp3
new file mode 100644
index 0000000..d549269
Binary files /dev/null and b/assets/sounds/piano-keys/piano-gs4.mp3 differ
diff --git a/assets/sounds/sad-violin.mp3 b/assets/sounds/sad-violin.mp3
new file mode 100644
index 0000000..0587f95
Binary files /dev/null and b/assets/sounds/sad-violin.mp3 differ
diff --git a/assets/sounds/sci-fi-picking-detector.mp3 b/assets/sounds/sci-fi-picking-detector.mp3
new file mode 100644
index 0000000..ec0e1a1
Binary files /dev/null and b/assets/sounds/sci-fi-picking-detector.mp3 differ
diff --git a/assets/sounds/spiderman.mp3 b/assets/sounds/spiderman.mp3
new file mode 100644
index 0000000..dd55783
Binary files /dev/null and b/assets/sounds/spiderman.mp3 differ
diff --git a/assets/sounds/transition-tone.mp3 b/assets/sounds/transition-tone.mp3
new file mode 100644
index 0000000..72291c4
Binary files /dev/null and b/assets/sounds/transition-tone.mp3 differ
diff --git a/assets/sounds/troll-laugh.mp3 b/assets/sounds/troll-laugh.mp3
new file mode 100644
index 0000000..92abf25
Binary files /dev/null and b/assets/sounds/troll-laugh.mp3 differ
diff --git a/assets/sounds/what-da-dog-doin.mp3 b/assets/sounds/what-da-dog-doin.mp3
new file mode 100644
index 0000000..28c1745
Binary files /dev/null and b/assets/sounds/what-da-dog-doin.mp3 differ
diff --git a/eslint.config.js b/eslint.config.js
index 00c5b19..fb850ff 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -39,7 +39,6 @@ export default [
'error',
{
'src/common/**/*.js': 'CAMEL_CASE',
- 'src/configs/**/*.yaml': 'KEBAB_CASE',
'src/core/**/*.js': 'PASCAL_CASE'
}
],
diff --git a/lint-assets.js b/lint-assets.js
index dd616da..98b2f01 100644
--- a/lint-assets.js
+++ b/lint-assets.js
@@ -28,7 +28,7 @@ const checkFileNamingConvention = (filename) => {
const kebabCasePattern = /^[a-z0-9]+(-[a-z0-9]+)*\.mp3$/;
return kebabCasePattern.test(filename)
? { valid: true }
- : { valid: false, reason: 'does not match the "KEBAB_CASE" pattern' };
+ : { valid: false, reason: 'does not match the "kebab-case" pattern' };
};
// Function to check the naming convention for directories
@@ -59,7 +59,7 @@ const lintAssets = (dir) => {
// Check the folder naming convention
if (!checkFolderNamingConvention(item)) {
console.log(
- `${UNDERLINE}${itemPath}${RESET}\n ${RED}error${RESET} The folder name "${item}" does not match the "KEBAB_CASE" pattern\n`
+ `${UNDERLINE}${itemPath}${RESET}\n ${RED}error${RESET} The folder name "${item}" does not match the "kebab-case" pattern\n`
);
errorCount += 1; // Increment error count for folder issues
}
diff --git a/lint-configs.js b/lint-configs.js
new file mode 100644
index 0000000..c8c82ed
--- /dev/null
+++ b/lint-configs.js
@@ -0,0 +1,60 @@
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+// ANSI escape codes for red text and underline
+const BOLD_RED = '\x1b[1m\x1b[31m';
+const RED = '\x1b[31m';
+const UNDERLINE = '\x1b[4m';
+const RESET = '\x1b[0m';
+
+// Function to check the naming convention for config files
+const checkConfigNamingConvention = (filename) => {
+ // Regex pattern for kebab-case YAML files
+ const kebabCasePattern = /^[a-z0-9]+(-[a-z0-9]+)*\.(yaml|yml)$/;
+ return kebabCasePattern.test(filename)
+ ? { valid: true }
+ : { valid: false, reason: 'does not match the "kebab-case" pattern' };
+};
+
+// Counters for problems and errors
+let problemCount = 0;
+let errorCount = 0;
+
+// Function to lint configs directory
+const lintConfigs = (dir) => {
+ const items = fs.readdirSync(dir);
+
+ items.forEach((item) => {
+ const itemPath = path.join(dir, item);
+ const stats = fs.statSync(itemPath);
+
+ if (stats.isFile() && (item.endsWith('.yaml') || item.endsWith('.yml'))) {
+ const fileCheck = checkConfigNamingConvention(item);
+ if (!fileCheck.valid) {
+ console.log(
+ `${UNDERLINE}${itemPath}${RESET}\n ${RED}error${RESET} The filename "${item}" ${fileCheck.reason}\n`
+ );
+ errorCount += 1; // Increment error count for file issues
+ }
+ }
+ });
+};
+
+// Start checking the configs folder
+lintConfigs(path.join(__dirname, 'src/configs'));
+
+// Calculate total problems
+problemCount = errorCount; // You can add other types of problems if necessary
+
+// Print final feedback
+if (problemCount > 0) {
+ console.log(
+ `${BOLD_RED}โ ${problemCount} problem${problemCount !== 1 ? 's' : ''} (${errorCount} error${errorCount !== 1 ? 's' : ''}${RESET}`
+ );
+ process.exit(1); // Exit with error code to fail CI
+} else {
+ console.log('โ All configs follow naming conventions');
+}
diff --git a/package.json b/package.json
index c156028..1d2c653 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "soundbind",
- "version": "1.0.0",
+ "version": "1.1.0",
"description": "A lightweight, cross-platform keybind-based soundboard system. Map keyboard shortcuts to audio files for gaming, streaming, presentations, or just for fun.",
"main": "index.js",
"type": "module",
@@ -23,7 +23,7 @@
"start": "node index.js",
"dev": "nodemon index.js ./src/configs/default.yaml",
"postinstall": "node postinstall.js",
- "lint": "node lint-assets.js && eslint . && prettier --check \"**/*.{js,json,md,yaml,yml}\"",
+ "lint": "node lint-assets.js && node lint-configs.js && eslint . && prettier --check \"**/*.{js,json,md,yaml,yml}\"",
"lint:fix": "eslint . --fix",
"format": "prettier --write \"**/*.{js,json,md,yaml,yml}\"",
"format:check": "prettier --check \"**/*.{js,json,md,yaml,yml}\"",
diff --git a/postinstall.js b/postinstall.js
index b2d6068..451fd33 100644
--- a/postinstall.js
+++ b/postinstall.js
@@ -1,19 +1,21 @@
#!/usr/bin/env node
console.log(`
-โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-โ โ
-โ โช Soundbind installed successfully! โ
-โ โ
-โ * Sounds & configs included! Ready to use. โ
-โ โ
-โ Get started: โ
-โ 1. Create soundbind.yaml (see soundbind.example.yaml) โ
-โ 2. Use included sounds or add your own โ
-โ 3. Run: soundbind โ
-โ โ
-โ โซ Contribute sounds: github.com/UselessCo/soundbind โ
-โ Docs: github.com/UselessCo/soundbind#readme โ
-โ โ
-โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โ โ
+โ โช Soundbind installed successfully! โ
+โ โ
+โ * Sounds & configs included! Ready to use. โ
+โ โ
+โ Get started: โ
+โ 1. Create soundbind.yaml (see soundbind.example.yaml) โ
+โ 2. Use included sounds or add your own โ
+โ 3. Run: soundbind โ
+โ โ
+โ โซ Contribute sounds: github.com/UselessCo/soundbind โ
+โ Docs: github.com/UselessCo/soundbind#readme โ
+โ โ
+โ ๐ Thanks to all contributors โ your work powers Soundbind โ
+โ โ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
`);
diff --git a/src/Soundbind.js b/src/Soundbind.js
index 0c4b526..9279a4f 100644
--- a/src/Soundbind.js
+++ b/src/Soundbind.js
@@ -6,7 +6,6 @@ import SoundbindEngine from './core/SoundbindEngine.js';
import logger from './common/utils/logger.js';
import configConstants from './common/constants/config.js';
import loggingConstants from './common/constants/logging.js';
-import audioConstants from './common/constants/audio.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
@@ -15,7 +14,6 @@ class Soundbind {
constructor(options = {}) {
this.options = {
logLevel: loggingConstants.DEFAULT_LOG_LEVEL,
- maxConcurrentSounds: audioConstants.DEFAULT_MAX_CONCURRENT_SOUNDS,
...options
};
diff --git a/src/configs/README.md b/src/configs/README.md
index e2f9ac7..841a82a 100644
--- a/src/configs/README.md
+++ b/src/configs/README.md
@@ -2,18 +2,12 @@
This directory contains pre-made configuration files for Soundbind.
-## Available Configs
+## Basic Configs
### `default.yaml`
Basic configuration with example sounds. Good starting point for new users.
-**Keys:**
-
-- `1` - Danca gatinho sound
-- `2` - Oloquinho sound
-- `3` - Omaewa sound
-
### `soundbind.example.yaml`
Simple example showing how to use included sounds from the package. Perfect for quick start.
diff --git a/src/configs/among-us-sound.yaml b/src/configs/among-us-sound.yaml
new file mode 100644
index 0000000..920d578
--- /dev/null
+++ b/src/configs/among-us-sound.yaml
@@ -0,0 +1,24 @@
+profile:
+ name: "Among Us Sound"
+ description: "Sound effect of Among Us roles reveal"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "4"
+ sound: "../../assets/sounds/among-us.mp3"
+ description: "Suspenseful sound effect from Among Us"
+ - key: "5"
+ sound: "../../assets/sounds/armadillo-ok.mp3"
+ description: "Apathetic reaction to the imposter"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/barking.yaml b/src/configs/barking.yaml
new file mode 100644
index 0000000..ec1a433
--- /dev/null
+++ b/src/configs/barking.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "Dog Barking Sound"
+ description: "Configuration for dog barking sound"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "5"
+ sound: "../../assets/sounds/dog-barking.mp3"
+ description: "Dog barking sound"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/bleach-sound.yaml b/src/configs/bleach-sound.yaml
new file mode 100644
index 0000000..f13f705
--- /dev/null
+++ b/src/configs/bleach-sound.yaml
@@ -0,0 +1,28 @@
+profile:
+ name: "Bleach Sounds"
+ description: "Keybind configuration featuring Bleach-themed sounds: Bankai shout and Aizenโs welcome"
+ version: "1.0.0"
+
+audio:
+ player: "play"
+ maxConcurrent: 3
+
+keybinds:
+ - key: "F7"
+ sound: "../../assets/sounds/bankai.mp3"
+ description: "Bleach Bankai shout"
+ stopOthers: true
+
+ - key: "F8"
+ sound: "../../assets/sounds/aizen-yokoso.mp3"
+ description: "Aizen's 'Yลkoso Watashi no Soul Society' welcome"
+ stopOthers: true
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: false
+ filePath: "logs"
diff --git a/src/configs/default.yaml b/src/configs/default.yaml
index ce00c1f..e0d0add 100644
--- a/src/configs/default.yaml
+++ b/src/configs/default.yaml
@@ -13,6 +13,18 @@ keybinds:
sound: "../../assets/sounds/omaewa.mp3"
description: "Omaewa sound"
+ - key: "4"
+ sound: "../../assets/sounds/awesome-music.mp3"
+ description: "Awesome music sound"
+
+ - key: "5"
+ sound: "../../assets/sounds/sci-fi-picking-detector.mp3"
+ description: "Sound of picking science detector"
+
+ - key: "6"
+ sound: "../../assets/sounds/neighing-horse.mp3"
+ description: "Clean and dry recording of a neighing horse close mic'ed."
+
audio:
player: "play"
diff --git a/src/configs/elonmusk-secretaria.yaml b/src/configs/elonmusk-secretaria.yaml
new file mode 100644
index 0000000..d8bef88
--- /dev/null
+++ b/src/configs/elonmusk-secretaria.yaml
@@ -0,0 +1,12 @@
+profile:
+ name: "elonmusk-secretaria"
+ description: "A meme(fun) music from Brazil"
+ version: "1.0.0"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/elonmusk-secretaria.mp3"
diff --git a/src/configs/fire-alarm.yaml b/src/configs/fire-alarm.yaml
new file mode 100644
index 0000000..3cd1160
--- /dev/null
+++ b/src/configs/fire-alarm.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "Fire Alarm Sound"
+ description: "Loud fire alarm alert sound for emergencies"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/fire-alarm.mp3"
+ description: "Fire alarm alert sound"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/firework.yaml b/src/configs/firework.yaml
new file mode 100644
index 0000000..3c94db0
--- /dev/null
+++ b/src/configs/firework.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "Firework Sound"
+ description: "Firework sound for celebrations"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/firework.mp3"
+ description: "Firework sound effect"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/funny-car-horn.yaml b/src/configs/funny-car-horn.yaml
new file mode 100644
index 0000000..82c1760
--- /dev/null
+++ b/src/configs/funny-car-horn.yaml
@@ -0,0 +1,23 @@
+profile:
+ name: "Funny Car Horn"
+ description: "Hilarious car horn sound effect for pranks, streaming, and fun moments"
+ version: "1.0.0"
+
+audio:
+ player: "play"
+ maxConcurrent: 3
+
+keybinds:
+ - key: "F9"
+ sound: "../../assets/sounds/funny-car-horn.mp3"
+ description: "Funny car horn sound effect"
+ stopOthers: true
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/healing-magic-config.yaml b/src/configs/healing-magic-config.yaml
new file mode 100644
index 0000000..b852073
--- /dev/null
+++ b/src/configs/healing-magic-config.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "Healing Magic"
+ description: "A soothing magical chime sound effect โ perfect for calm vibes or fantasy themes."
+
+audio:
+ player: "play"
+ maxConcurrent: 3
+
+keybinds:
+ - key: "H"
+ sound: "../../assets/sounds/healing-magic.mp3"
+ description: "Plays the Healing Magic sound effect"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/jazz-music.yaml b/src/configs/jazz-music.yaml
new file mode 100644
index 0000000..4d14f02
--- /dev/null
+++ b/src/configs/jazz-music.yaml
@@ -0,0 +1,37 @@
+profile:
+ name: "Jazz Practice"
+ description: "A set of quick-access jazz loops and cues for practice and live performance."
+
+audio:
+ player: "play"
+ maxConcurrent: 4
+
+keybinds:
+ - key: "F5"
+ sound: "../../assets/sounds/jazz.mp3"
+ description: "Start main jazz loop"
+ stopOthers: false
+
+ - key: "F6"
+ sound: "../../assets/sounds/healing-magic.mp3"
+ description: "Ambient pad (use as backing)"
+ stopOthers: false
+
+ - key: "F7"
+ sound: "../../assets/sounds/troll-laugh.mp3"
+ description: "Short accent/percussion cue"
+ stopOthers: true
+
+ - key: "ctrl+F5"
+ sound: "../../assets/sounds/jazz.mp3"
+ description: "Play jazz loop but stop other sounds first"
+ stopOthers: true
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/maoe-silviosantos.yaml b/src/configs/maoe-silviosantos.yaml
new file mode 100644
index 0000000..18ab6e0
--- /dev/null
+++ b/src/configs/maoe-silviosantos.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "maoe-silviosantos"
+ description: "Maoe Silvio Santos config"
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "9"
+ sound: "../../assets/sounds/maoe-silviosantos.mp3"
+ description: "A very famous catchphrase from a Brazilian TV presenter."
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/memes.yaml b/src/configs/memes.yaml
new file mode 100644
index 0000000..131317b
--- /dev/null
+++ b/src/configs/memes.yaml
@@ -0,0 +1,29 @@
+profile:
+ name: "Meme Madness"
+ description: "Iconic meme sounds for streamers and pranksters"
+audio:
+ player: "play"
+ maxConcurrent: 4
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/troll-laugh.mp3"
+ description: "Trollface laugh for epic pranks"
+ - key: "F2"
+ sound: "../../assets/sounds/sad-violin.mp3"
+ description: "Sad violin humming"
+ - key: "F3"
+ sound: "../../assets/sounds/cat-laugh.mp3"
+ description: "Meme cat laughing"
+ - key: "F4"
+ sound: "../../assets/sounds/spiderman.mp3"
+ description: "Spiderman meme song"
+ - key: "F5"
+ sound: "../../assets/sounds/what-da-dog-doin.mp3"
+ description: "What the dog doing meme"
+settings:
+ hotReload: true
+ preloadSounds: true
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/nature.yaml b/src/configs/nature.yaml
new file mode 100644
index 0000000..59bf09b
--- /dev/null
+++ b/src/configs/nature.yaml
@@ -0,0 +1,34 @@
+# nature.yaml
+profile:
+ name: "Nature sounds"
+ description: "Calm and relaxing nature sounds"
+
+audio:
+ player: "play"
+ maxConcurrent: 1
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/footsteps-trail.mp3"
+ description: "Clear description"
+ - key: "F2"
+ sound: "../../assets/sounds/light-rain.mp3"
+ description: "Clear description"
+ - key: "F3"
+ sound: "../../assets/sounds/nature-birds.mp3"
+ description: "Clear description"
+ - key: "F4"
+ sound: "../../assets/sounds/nature-forest.mp3"
+ description: "Clear description"
+ - key: "F5"
+ sound: "../../assets/sounds/nature-river.mp3"
+ description: "Clear description"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/piano-keyboard.yaml b/src/configs/piano-keyboard.yaml
new file mode 100644
index 0000000..c1adcce
--- /dev/null
+++ b/src/configs/piano-keyboard.yaml
@@ -0,0 +1,139 @@
+# Profile information
+profile:
+ name: "Piano Keyboard"
+ description: "Piano keys C3-E5 mapped to keyboard layout"
+
+# Audio configuration
+audio:
+ player: "play"
+ maxConcurrent: 20
+
+# Keybind mappings
+keybinds:
+ # Using sounds from the installed package
+ - key: "z"
+ sound: "../../assets/sounds/piano-keys/piano-c3.mp3"
+ description: "C3"
+
+ - key: "s"
+ sound: "../../assets/sounds/piano-keys/piano-cs3.mp3"
+ description: "C#3"
+
+ - key: "x"
+ sound: "../../assets/sounds/piano-keys/piano-d3.mp3"
+ description: "D3"
+
+ - key: "d"
+ sound: "../../assets/sounds/piano-keys/piano-ds3.mp3"
+ description: "D#3"
+
+ - key: "c"
+ sound: "../../assets/sounds/piano-keys/piano-e3.mp3"
+ description: "E3"
+
+ - key: "v"
+ sound: "../../assets/sounds/piano-keys/piano-f3.mp3"
+ description: "F3"
+
+ - key: "g"
+ sound: "../../assets/sounds/piano-keys/piano-fs3.mp3"
+ description: "F#3"
+
+ - key: "b"
+ sound: "../../assets/sounds/piano-keys/piano-g3.mp3"
+ description: "G3"
+
+ - key: "h"
+ sound: "../../assets/sounds/piano-keys/piano-gs3.mp3"
+ description: "G#3"
+
+ - key: "n"
+ sound: "../../assets/sounds/piano-keys/piano-a3.mp3"
+ description: "A3"
+
+ - key: "j"
+ sound: "../../assets/sounds/piano-keys/piano-as3.mp3"
+ description: "A#3"
+
+ - key: "m"
+ sound: "../../assets/sounds/piano-keys/piano-b3.mp3"
+ description: "B3"
+
+ - key: "q"
+ sound: "../../assets/sounds/piano-keys/piano-c4.mp3"
+ description: "C4"
+
+ - key: "2"
+ sound: "../../assets/sounds/piano-keys/piano-cs4.mp3"
+ description: "C#4"
+
+ - key: "w"
+ sound: "../../assets/sounds/piano-keys/piano-d4.mp3"
+ description: "D4"
+
+ - key: "3"
+ sound: "../../assets/sounds/piano-keys/piano-ds4.mp3"
+ description: "D#4"
+
+ - key: "e"
+ sound: "../../assets/sounds/piano-keys/piano-e4.mp3"
+ description: "E4"
+
+ - key: "r"
+ sound: "../../assets/sounds/piano-keys/piano-f4.mp3"
+ description: "F4"
+
+ - key: "5"
+ sound: "../../assets/sounds/piano-keys/piano-fs4.mp3"
+ description: "F#4"
+
+ - key: "t"
+ sound: "../../assets/sounds/piano-keys/piano-g4.mp3"
+ description: "G4"
+
+ - key: "6"
+ sound: "../../assets/sounds/piano-keys/piano-gs4.mp3"
+ description: "G#4"
+
+ - key: "y"
+ sound: "../../assets/sounds/piano-keys/piano-a4.mp3"
+ description: "A4"
+
+ - key: "7"
+ sound: "../../assets/sounds/piano-keys/piano-as4.mp3"
+ description: "A#4"
+
+ - key: "u"
+ sound: "../../assets/sounds/piano-keys/piano-b4.mp3"
+ description: "B4"
+
+ - key: "i"
+ sound: "../../assets/sounds/piano-keys/piano-c5.mp3"
+ description: "C5"
+
+ - key: "9"
+ sound: "../../assets/sounds/piano-keys/piano-cs5.mp3"
+ description: "C#5"
+
+ - key: "o"
+ sound: "../../assets/sounds/piano-keys/piano-d5.mp3"
+ description: "D5"
+
+ - key: "0"
+ sound: "../../assets/sounds/piano-keys/piano-ds5.mp3"
+ description: "D#5"
+
+ - key: "p"
+ sound: "../../assets/sounds/piano-keys/piano-e5.mp3"
+ description: "E5"
+
+# Settings
+settings:
+ hotReload: true
+ preloadSounds: true
+
+# Logging configuration
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/podcast-stingers.yaml b/src/configs/podcast-stingers.yaml
new file mode 100644
index 0000000..5024308
--- /dev/null
+++ b/src/configs/podcast-stingers.yaml
@@ -0,0 +1,37 @@
+profile:
+ name: "Podcast Stingers Pack"
+ description: "Short jingles and audio cues for podcast intros, transitions, and outros."
+
+audio:
+ player: "play"
+ maxConcurrent: 4
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/intro-jingle.mp3"
+ description: "Intro music sting"
+
+ - key: "F2"
+ sound: "../../assets/sounds/transition-tone.mp3"
+ description: "Transition sound effect"
+
+ - key: "F3"
+ sound: "../../assets/sounds/outro-sting.mp3"
+ description: "Outro short music"
+
+ - key: "F4"
+ sound: "../../assets/sounds/chime-soft.mp3"
+ description: "Soft background chime"
+
+ - key: "F5"
+ sound: "../../assets/sounds/break-swish.mp3"
+ description: "Segment break swoosh"
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/sci-fi-picking-detector.yaml b/src/configs/sci-fi-picking-detector.yaml
new file mode 100644
index 0000000..ea0629f
--- /dev/null
+++ b/src/configs/sci-fi-picking-detector.yaml
@@ -0,0 +1,21 @@
+profile:
+ name: "Sci-fi picking detector"
+ description: "sci-fi-picking-detector-config."
+
+audio:
+ player: "play"
+ maxConcurrent: 5
+
+keybinds:
+ - key: "F1"
+ sound: "../../assets/sounds/sci-fi-picking-detector.mp3"
+ description: "Created some synth sounds and recorded the sound of opening the bag."
+
+settings:
+ hotReload: true
+ preloadSounds: true
+
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/sci-fi.yaml b/src/configs/sci-fi.yaml
new file mode 100644
index 0000000..60754a7
--- /dev/null
+++ b/src/configs/sci-fi.yaml
@@ -0,0 +1,25 @@
+# Profile information (optional)
+profile:
+ name: "Science Fiction Sounds"
+ description: "Sci-fi keybind configuration"
+
+# Audio configuration
+audio:
+ player: "play"
+ maxConcurrent: 8
+
+keybinds:
+ - key: "1"
+ sound: "../../assets/sounds/light-saber.mp3"
+ description: "Sound effect of a light saber"
+
+# Settings
+settings:
+ hotReload: true
+ preloadSounds: true
+
+# Logging configuration
+logging:
+ level: "info"
+ fileEnabled: true
+ filePath: "logs"
diff --git a/src/configs/soundbind.example.yaml b/src/configs/soundbind-example.yaml
similarity index 100%
rename from src/configs/soundbind.example.yaml
rename to src/configs/soundbind-example.yaml
diff --git a/src/configs/template.yaml b/src/configs/template.yaml
index 0a3eafa..6ec0ed1 100644
--- a/src/configs/template.yaml
+++ b/src/configs/template.yaml
@@ -32,84 +32,84 @@ keybinds:
# FUNCTION KEYS
# -------------------------------------------------------------------------
- key: "F1"
- sound: "./assets/sounds/victory.mp3"
+ sound: "../../assets/sounds/victory.mp3"
description: "Victory sound"
- key: "F2"
- sound: "./assets/sounds/explosion.wav"
+ sound: "../../assets/sounds/explosion.mp3"
description: "Explosion effect"
- key: "F3"
- sound: "./assets/sounds/laser.wav"
+ sound: "../../assets/sounds/laser.mp3"
description: "Laser blast"
- key: "F4"
- sound: "./assets/sounds/notification.ogg"
+ sound: "../../assets/sounds/notification.mp3"
description: "Alert notification"
- key: "F5"
- sound: "./assets/sounds/epic-theme.mp3"
+ sound: "../../assets/sounds/epic-theme.mp3"
stopOthers: true # Stop other sounds first
description: "Epic background music"
- key: "F6"
- sound: "./assets/sounds/ambience.wav"
+ sound: "../../assets/sounds/ambience.mp3"
description: "Background ambience"
# -------------------------------------------------------------------------
# NUMPAD KEYS
# -------------------------------------------------------------------------
- key: "numpad1"
- sound: "./assets/sounds/coin.wav"
+ sound: "../../assets/sounds/coin.mp3"
description: "Coin pickup"
- key: "numpad2"
- sound: "./assets/sounds/power-up.wav"
+ sound: "../../assets/sounds/power-up.mp3"
description: "Power up sound"
- key: "numpad3"
- sound: "./assets/sounds/jump.wav"
+ sound: "../../assets/sounds/jump.mp3"
description: "Jump sound"
# -------------------------------------------------------------------------
# LETTER KEYS
# -------------------------------------------------------------------------
- key: "q"
- sound: "./assets/sounds/quick-beep.wav"
+ sound: "../../assets/sounds/quick-beep.mp3"
description: "Quick beep"
- key: "w"
- sound: "./assets/sounds/weapon.wav"
+ sound: "../../assets/sounds/weapon.mp3"
description: "Weapon sound"
# -------------------------------------------------------------------------
# MODIFIER COMBINATIONS - CTRL
# -------------------------------------------------------------------------
- key: "ctrl+F1"
- sound: "./assets/sounds/airhorn.mp3"
+ sound: "../../assets/sounds/airhorn.mp3"
stopOthers: true
description: "Airhorn blast"
- key: "ctrl+F2"
- sound: "./assets/sounds/dramatic.wav"
+ sound: "../../assets/sounds/dramatic.mp3"
description: "Dramatic effect"
# -------------------------------------------------------------------------
# MODIFIER COMBINATIONS - SHIFT
# -------------------------------------------------------------------------
- key: "shift+F1"
- sound: "./assets/sounds/wow.mp3"
+ sound: "../../assets/sounds/wow.mp3"
description: "Wow exclamation"
- key: "shift+space"
- sound: "./assets/sounds/build-up.mp3"
+ sound: "../../assets/sounds/build-up.mp3"
description: "Music build-up"
# -------------------------------------------------------------------------
# COMPLEX COMBINATIONS
# -------------------------------------------------------------------------
- key: "ctrl+shift+F1"
- sound: "./assets/sounds/emergency.wav"
+ sound: "../../assets/sounds/emergency.mp3"
stopOthers: true
description: "Emergency alert"
@@ -117,15 +117,15 @@ keybinds:
# SPECIAL KEYS
# -------------------------------------------------------------------------
- key: "space"
- sound: "./assets/sounds/kick-drum.wav"
+ sound: "../../assets/sounds/kick-drum.mp3"
description: "Kick drum"
- key: "enter"
- sound: "./assets/sounds/confirm.wav"
+ sound: "../../assets/sounds/confirm.mp3"
description: "Confirm action"
- key: "escape"
- sound: "./assets/sounds/cancel.wav"
+ sound: "../../assets/sounds/cancel.mp3"
stopOthers: true # Good for stopping all sounds
description: "Cancel/Stop all"
diff --git a/src/core/AudioManager.js b/src/core/AudioManager.js
index 5f59314..f9e894c 100644
--- a/src/core/AudioManager.js
+++ b/src/core/AudioManager.js
@@ -17,7 +17,7 @@ const __dirname = dirname(__filename);
class AudioManager {
constructor(options = {}) {
this.options = {
- maxConcurrentSounds: audioConstants.DEFAULT_MAX_CONCURRENT_SOUNDS,
+ maxConcurrent: audioConstants.DEFAULT_MAX_CONCURRENT_SOUNDS,
...options
};
@@ -46,6 +46,11 @@ class AudioManager {
logger.info(`Using play-sound for ${process.platform}`);
}
+ if (audioConfig.maxConcurrent) {
+ this.options.maxConcurrent = audioConfig.maxConcurrent;
+ logger.info(`Max concurrent sounds set to: ${audioConfig.maxConcurrent}`);
+ }
+
logger.debug('Audio manager initialized');
}
@@ -72,8 +77,9 @@ class AudioManager {
const soundId = ++this.soundCounter;
// Check concurrent sound limit
- if (this.activeSounds.size >= this.options.maxConcurrentSounds) {
- logger.warn('Max concurrent sounds reached');
+ if (this.activeSounds.size >= this.options.maxConcurrent) {
+ reject(new Error(`Max concurrent sounds reached (${this.options.maxConcurrent})`));
+ return;
}
// Convert to absolute path
@@ -114,24 +120,20 @@ class AudioManager {
});
}
- async playWithPlaySound(soundFile, options = {}) {
+ async playWithPlaySound(soundFile, _options = {}) {
return new Promise((resolve, reject) => {
// Check concurrent sound limit
- if (this.activeSounds.size >= this.options.maxConcurrentSounds) {
- logger.warn('Max concurrent sounds reached');
+ if (this.activeSounds.size >= this.options.maxConcurrent) {
+ reject(new Error(`Max concurrent sounds reached (${this.options.maxConcurrent})`));
+ return;
}
- // Prepare sound options
- const soundOptions = {
- ...options
- };
-
// Generate unique sound ID
const soundId = ++this.soundCounter;
try {
// Play the sound
- const player = this.playSound.play(soundFile, soundOptions, (err) => {
+ const player = this.playSound.play(soundFile, (err) => {
// Remove from active sounds when done
this.activeSounds.delete(soundId);