Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
5c87aa9
fix: Implémenter sample rate dynamique et corrections d'arrondi
patricecolet Oct 8, 2025
81d987a
Ajout mixeur complet avec reverb
patricecolet Oct 8, 2025
43639fc
Fix: cross-platform resources path (standalone + plugins)
patricecolet Oct 9, 2025
fbc314d
Add -fPIC fix for ARM64 Linux BinaryData
patricecolet Oct 9, 2025
3da4f94
Add Linux fallback for standalone resources path
patricecolet Oct 9, 2025
af5965d
Add debug logs for resources loading
patricecolet Oct 9, 2025
0327bba
Fix DBG syntax for string concatenation
patricecolet Oct 9, 2025
eeb18c2
Add audio debug logs for Raspberry Pi troubleshooting
patricecolet Oct 9, 2025
459d040
Reduce debug logs and add timer check
patricecolet Oct 9, 2025
238813e
Add detailed MIDI callback logs for debugging
patricecolet Oct 9, 2025
d42ede1
Show debug logs for all active sirens
patricecolet Oct 9, 2025
24f27b1
Add data validation log to detect endianness issues
patricecolet Oct 9, 2025
714bc95
Check multiple data points for validation
patricecolet Oct 9, 2025
7fa3314
Add x1000 output gain for Raspberry Pi testing
patricecolet Oct 9, 2025
2dfba4c
Add temporary Linux output gain fix (x100)
patricecolet Oct 9, 2025
ca21cf7
Remove debug logs after troubleshooting
patricecolet Oct 9, 2025
c7bc15d
Reduce Linux output gain to x50
patricecolet Oct 9, 2025
500010f
Add MIDI reset via CC121 (per channel or global on ch16)
patricecolet Oct 9, 2025
bb86d72
Document mixer/reverb features and MIDI CC mapping (v1.5.0)
patricecolet Oct 10, 2025
078635d
Add v1.5.0 macOS release package (Standalone + AU)
patricecolet Oct 10, 2025
878311c
Add release notes for v1.5.0
patricecolet Oct 10, 2025
9b90bf7
Add high-resolution app icon based on Picto_Siren
patricecolet Oct 10, 2025
c80dca1
Add automation scripts for app icon integration
patricecolet Oct 10, 2025
e8fbbb5
Update v1.5.0 release notes with icon image and icon assets
patricecolet Oct 10, 2025
881bc86
Add Linux/Raspberry Pi ARM64 packaging support
patricecolet Oct 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ Dependencies/libsamplerate/

# used by cmake
build/
builds/
Source/config.h

# private config (see Config.cmake template)
MyConfig.cmake
Expand Down
5 changes: 5 additions & 0 deletions Assets/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,9 @@ juce_add_binary_data(${BaseTargetName}BinaryData
Picto_Siren_40x37.png
)

# Fix pour ARM64/aarch64 Linux : forcer -fPIC pour BinaryData
set_target_properties(${BaseTargetName}BinaryData PROPERTIES
POSITION_INDEPENDENT_CODE ON
)

target_link_libraries(${BaseTargetName} PRIVATE ${BaseTargetName}BinaryData)
Binary file added Assets/ComposeSiren.icns
Binary file not shown.
Binary file added Assets/Icon_1024.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ juce_add_plugin(${BaseTargetName}
PRODUCT_NAME "${BaseTargetName}"
COMPANY_NAME "${VendorName}"
VERSION ${CMAKE_PROJECT_VERSION}
ICON_BIG "${CMAKE_SOURCE_DIR}/Assets/Icon.png"
ICON_SMALL "${CMAKE_SOURCE_DIR}/Assets/Icon.png"
ICON_BIG "${CMAKE_SOURCE_DIR}/Assets/Icon_1024.png"
ICON_SMALL "${CMAKE_SOURCE_DIR}/Assets/Icon_1024.png"
FORMATS ${FORMATS}
# A four-character manufacturer id with at least one upper-case character
PLUGIN_MANUFACTURER_CODE McVv
Expand Down Expand Up @@ -122,4 +122,6 @@ if(APPLE) # we generate a cmake subproject to build the installer
include(Packaging/Apple/MakePackage.cmake)
elseif(WIN32) # we just proceed the regular way
include(Packaging/Windows/MakePackage.cmake)
elseif(LINUX) # Debian package for Raspberry Pi and other Linux systems
include(Packaging/Linux/MakePackage.cmake)
endif()
323 changes: 165 additions & 158 deletions ComposeSiren.jucer

Large diffs are not rendered by default.

101 changes: 101 additions & 0 deletions Packaging/Linux/MakePackage.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
################################################################################
# Linux Debian Package Configuration
# Based on Packaging/Windows/MakePackage.cmake
################################################################################

################################################################################
# Install targets

# Install Standalone executable
install(
TARGETS ${BaseTargetName}_Standalone
RUNTIME DESTINATION bin
COMPONENT Standalone
)

# Install Resources
install(
DIRECTORY "${CMAKE_SOURCE_DIR}/Resources/"
DESTINATION "share/${BaseTargetName}/Resources"
COMPONENT Standalone
FILES_MATCHING PATTERN "data*"
)

################################################################################
# Configure CPack for Debian

set(PACKAGING_RESOURCES_DIR "${CMAKE_SOURCE_DIR}/Packaging")

# Define components to package - Only Standalone (exclude JUCE)
set(CPACK_COMPONENTS_ALL Standalone)
set(CPACK_DEB_COMPONENT_INSTALL ON)

# Only install the Standalone component, not JUCE
set(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};${PROJECT_NAME};Standalone;/")

# Script to clean JUCE files before packaging
set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_CURRENT_BINARY_DIR}/CleanJUCEFiles.cmake")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CleanJUCEFiles.cmake" "
# Remove JUCE installation files that shouldn't be in the package
file(REMOVE_RECURSE
\"\${CPACK_TEMPORARY_INSTALL_DIRECTORY}/usr/include/JUCE-7.0.3\"
\"\${CPACK_TEMPORARY_INSTALL_DIRECTORY}/usr/lib/cmake/JUCE-7.0.3\"
\"\${CPACK_TEMPORARY_INSTALL_DIRECTORY}/usr/bin/JUCE-7.0.3\"
)
")

# Basic package info
set(CPACK_PACKAGE_NAME ${BaseTargetName})
set(CPACK_PACKAGE_VENDOR ${VendorName})
set(CPACK_VERBATIM_VARIABLES TRUE)
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_DIRECTORY "${PROJECT_BINARY_DIR}/Packaging/${BaseTargetName}_Installer_artefacts")

# Debian-specific settings
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_NAME "${BaseTargetName}")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Mecanique Vivante <contact@mecanique-vivante.com>")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "ComposeSiren audio synthesizer
ComposeSiren is an audio plugin that synthesizes sounds of sirens
made by Mécanique Vivante. The plugin allows to handle the seven-piece
Siren Orchestra: two altos (S1 and S2), a bass (S3), a tenor (S4),
two sopranos (S5 and S6), and a piccolo (S7).")
set(CPACK_DEBIAN_PACKAGE_SECTION "sound")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.mecanique-vivante.com")

# Architecture detection
execute_process(
COMMAND dpkg --print-architecture
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Suggested dependencies (not required, but recommended)
set(CPACK_DEBIAN_PACKAGE_SUGGESTS "jackd2, qjackctl, a2jmidid")

# Package file name format: composesiren_1.5.0_arm64.deb
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")

# License and documentation
if(EXISTS "${PACKAGING_RESOURCES_DIR}/License.txt")
set(CPACK_RESOURCE_FILE_LICENSE "${PACKAGING_RESOURCES_DIR}/License.txt")
endif()

if(EXISTS "${PACKAGING_RESOURCES_DIR}/ReadMe.txt")
set(CPACK_RESOURCE_FILE_README "${PACKAGING_RESOURCES_DIR}/ReadMe.txt")
endif()

################################################################################
# Include CPack and add components

include(CPack)

cpack_add_component(Standalone
DISPLAY_NAME "ComposeSiren Standalone Application"
DESCRIPTION "Standalone audio synthesizer application with siren sample data"
REQUIRED
)

116 changes: 110 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,72 @@ You can download the vst3 plugin as well as the Audio Unit plugin directly from
You'll find [here][3] more info on how to use the plugins with Ableton Live.


### Mixer & Reverb (v1.5.0)

#### Interface graphique

L'interface comprend :
- **7 canaux mixer** (S1-S7) avec pour chacun :
- Slider de **Volume** (bleu pour Master, gris pour les autres)
- Bouton rotatif de **Pan** (panoramique L/R)
- Bouton **Reset** (réinitialise tous les paramètres du canal)
- Indicateur **MIDI Note On** (vert = note active)
- **Section Reverb** (Canal 16) :
- **Room Size** : Taille de la réverbération
- **Damping** : Amortissement des hautes fréquences
- **Dry/Wet** : Balance signal sec/effet
- **Width** : Largeur stéréo de la reverb

#### Contrôle MIDI

##### Canaux 1-7 (Sirènes S1-S7)

| CC | Paramètre | Plage | Description |
|-----|-----------|-------|-------------|
| 7 | Volume | 0-127 | Volume individuel de la sirène |
| 10 | Pan | 0-127 | Panoramique (0=gauche, 64=centre, 127=droite) |
| 70 | Master Volume | 0-127 | Volume master indépendant du CC7 |
| 121 | Reset | - | Réinitialise tous les paramètres du canal |

##### Canal 16 (Reverb globale)

| CC | Paramètre | Plage | Description |
|-----|-----------|-------|-------------|
| 64 | Enable | 0-127 | Active/désactive la reverb (≥64 = ON) |
| 65 | Room Size | 0-127 | Taille de la réverbération |
| 66 | Dry/Wet | 0-127 | Balance signal sec/effet |
| 67 | Damping | 0-127 | Amortissement des hautes fréquences |
| 68 | Width | 0-127 | Largeur stéréo (0=mono, 127=stéréo large) |
| 121 | Reset All | - | Réinitialise TOUTES les sirènes (canaux 1-7) |

#### Sauvegarde d'état

Tous les paramètres du mixer et de la reverb sont sauvegardés automatiquement dans l'état du plugin (DAW preset/project). Cela inclut :
- Volumes et pans de chaque canal
- Tous les paramètres de la reverb
- État ON/OFF de la reverb


### Installation v1.5.0

**Téléchargement :**
- macOS : `Releases/ComposeSiren-v1.5.0-custom-mix-macOS.dmg` (47 MB)
- Inclus : Standalone + Audio Unit
- Note : VST3 non disponible (bug JUCE avec macOS 15, en attente d'un fix)

**Instructions d'installation** : Voir `INSTALLATION.txt` dans le DMG


### Version history:

- 1.5.0 - **Mixer + Reverb intégré** (branche custom-mix)
- Mixer 7 canaux avec contrôles Volume + Pan individuels
- Reverb globale avec Room Size, Damping, Dry/Wet et Width
- Interface graphique moderne (fond gris foncé, sliders horizontaux)
- Contrôle MIDI complet via CC (canaux 1-7 pour sirènes, canal 16 pour reverb)
- Reset MIDI via CC121 (par canal ou global)
- Indicateurs d'activité MIDI Note On/Off temps réel
- Sauvegarde de l'état (tous les paramètres mixer + reverb)
- 1.3.0 - Change default panning and volume
- 1.2.0 - Audio Unit format added
- 1.1.0 - Improved GUI
Expand Down Expand Up @@ -55,19 +119,59 @@ linux:
* if at some point the `Dependencies/JUCE` submodule is altered by some IDE, you
can reset it using `git submodule deinit -f .` then `git submodule update --init`

⚠️ **Note importante** : Le build CMake échoue actuellement sur macOS 15 à cause d'APIs obsolètes dans JUCE (`CGWindowListCreateImage`, `CVDisplayLink*`). En attendant un correctif JUCE, utilisez **Xcode** pour compiler :

At the moment the plugin is built :

* on Mac OS 11.6.4 using Ninja (Xcode works too)
* `cmake -B build -G Ninja -C Config.cmake -DCMAKE_BUILD_TYPE=Release` to setup the build system
* `cmake --build build --config Release` to build the plugins and generate the installer
* on Mac OS 11.6.4+ using **Xcode** (CMake ne fonctionne pas avec macOS 15)
* Ouvrir `Builds/MacOSX/ComposeSiren.xcodeproj`
* Compiler les targets : `ComposeSiren - Standalone Plugin` et `ComposeSiren - AU`
* Note : VST3 échoue aussi à cause du même bug JUCE
* on Windows 10 using Visual Studio (couldn't get Ninja to work on windows yet)
* `cmake -B build -G "Visual Studio 17 2022" -C Config.cmake`
* `cmake --build build --config Release`
* `cpack --config build/CPackConfig.cmake`
* on Linux
* on Linux (including Raspberry Pi ARM64)
* `cmake -B builds/linux -G "Unix Makefiles"`
* `cmake --build builds/linux --config Release`
* no instruction for installer for now
* `cd builds/linux && cpack -G DEB` to create Debian package
* The .deb package is created in `builds/linux/Packaging/ComposeSiren_Installer_artefacts/`
* Install with: `sudo dpkg -i ComposeSiren_*.deb`

The resulting installer (built with `productbuild` on mac and `NSIS` on windows)
The resulting installer (built with `productbuild` on mac, `NSIS` on windows, and `DEB` on Linux)
is created in `build/Packaging/ComposeSiren_Installer_artefacts`

### Linux Installation Notes

The Linux builds install:
- Standalone binary: `/usr/bin/ComposeSiren`
- Resources (audio data): `/usr/share/ComposeSiren/Resources/`

For Raspberry Pi or other ARM systems, ensure you have the dependencies installed:
```bash
sudo apt-get install libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libfreetype-dev libasound2-dev
```

### Publishing Releases on GitHub

To create and publish a new release with the Debian package:

1. **Create and push a version tag:**
```bash
git tag -a v1.5.0 -m "Release version 1.5.0"
git push origin v1.5.0
```

2. **Create a GitHub Release:**
- Go to the repository on GitHub
- Click "Releases" → "Create a new release"
- Select the tag you just created (v1.5.0)
- Add release notes
- Attach the .deb package from `builds/linux/Packaging/ComposeSiren_Installer_artefacts/ComposeSiren_1.5.0_arm64.deb`
- Publish the release

Users can then download and install with:
```bash
wget https://github.com/patricecolet/ComposeSiren/releases/download/v1.5.0/ComposeSiren_1.5.0_arm64.deb
sudo dpkg -i ComposeSiren_1.5.0_arm64.deb
```
Binary file added Releases/ComposeSiren-v1.5.0-custom-mix-macOS.dmg
Binary file not shown.
Loading