Code Monkey home page Code Monkey logo

ltamp's Introduction

LtAmp

Reverse engineering the USB protocol of the Fender Mustang LT series guitar amps.

Protocol Documentation

Communication with the amp is over USB HID using protobuf. Documentation can be found here

LtAmpDotNet

A .NET Core library for communicating with the amp. It uses HidSharp for cross-platfrom compatibility.

A cross-platform GUI is in the roadmap.

Roadmap

Initally, this has been developed in .NET Core to allow for quick scaffolding of the protocol.

Future plans:

  • Cross-platform GUI
  • Import/export presets to/from files for sharing
  • Integrated preset library to store an unlimited number of presets in the computer
  • Footswitch "playlists", using a sequence of presets to be cycled through
  • Arduino library (imagine a foot pedal eith switches to toggle bypass of thr individual effects!)
  • Keyboard shortcuts to control effect parameters; specifically to be able to set up conplex changes via macros
  • MIDI control of effect parameters
  • Integrated VU meter to monitor sound levels from the USB audio inteface for volume leveling across presets (and maybe a spectrogram if the latency isnt too bad)
  • Cooy and paste effect units between presets

ltamp's People

Contributors

brentmaxwell avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

anaganisk

ltamp's Issues

Virtual USB device

Create a virtual USB device for testing and also to intercept and change details sent to Fender Tone to hopefully be able to grab the firmware file.

Images and icons

Images and icons for the GUI

  • background images for the DSP units (themable)
  • images for each effect/amp in the dropdowns
  • icons for buttons
  • possibly use some from Fender's icon library

Preset library

Integrated preset library to store an unlimited number of presets in the computer

  • stored in profile and loaded automatically
  • import and export to files
  • allow tagging and organizing of presets in a folder structure
  • drag and drop to presets on the amp

Song track events

Events file to sync with an mp3 (or just a time code) to trigger effect changes automatically within a song

Cross platform GUI

https://github.com/AvaloniaUI/Avalonia

  • three pane
    • left pane is list of presets on the amp
    • middle pane is controls for the effect units
      • switch between json view, property grid, sliders, and knobs
    • right pane is collapsible, and holds the VU meter/preset library
  • menu
    • File
      • Import
      • Export
      • Exit
    • Preset
      • Save
      • Save As
      • Rename
      • Clear
      • Move
    • View
      • Preset Library
      • Footswitch Setlist
      • VU Meter
    • Options
      • Amp Settings
      • Preferences
  • Status Bar
    • Current Preset
    • Footswitch Settings
    • USB Gain
    • Connection Status

Simple CLI

ltamp <command> [options]

Commands:

  • preset get <#>
    • gets preset in bank #; 0 for current preset
  • preset set <#> [--file <filename>]
    • sets the preset at # from filename, or stdin; 0 for current preset
  • preset list [-a]
    • list presets on amp
    • -a also lists amp and each effect
  • preset rename <#> <name>
    • renames the preset in bank # to name
  • preset swap <a> <b>
    • swaps the presets in a and b
  • preset shift <a> <b>
    • moves preset a to b, and shifts the rest.
  • preset clear <#>
    • clears the preset in bank #
  • qa get
    • gets footswitch presets
  • qa set <a> <b>
    • sets the footswitch presets to presets A and B
  • gain get
    • gets the USB gain value
  • gain set <dBvalue>
    • sets the USB gain to dBvalue
  • term
    • terminal mode; can be used to script series of actions or just monitor the amp, outputting all messages received
  • midi
    • translates midi messages to amp commands
  • config
    • generate default config in user's home directory

Custom/User Controls

  • ListView for presets
  • dspUnit views
    • JSON editor
    • Property Grid
    • sliders
    • knobs
  • vertical slider
  • knob
  • Vu meter
  • docks

Configuration

  • view options
  • preset library
  • theme
  • footswitch setlists

Unit test coverage for regression testing of library

Test for each message through mock device; for regression testing of the library

Check value received in the mock device, and the response sent from the mock device.

  • processorUtilizationRequest
  • memoryUsageRequest
  • presetJSONMessage
  • loadPreset
  • setDspUnitParameter
  • presetEditedStatus
  • replaceNode
  • shiftPreset
  • swapPreset
  • currentPresetSet
  • clearPreset
  • saveCurrentPreset
  • saveCurrentPresetTo
  • savePresetAs
  • renamePresetAt
  • auditionPreset
  • exitAuditionPreset
  • auditionStateRequest
  • productIdentificationRequest
  • firmwareVersionRequest
  • currentPresetRequest
  • retrievePreset
  • usbGainRequest
  • qASlotsRequest
  • qASlotsStatus
  • modalStatusMessage
  • usbGainSet
  • qASlotsSet
  • heartbeat
  • connectionStatusRequest

Possible options for ActiveDisplay message

Found these in the binary of the Fender Tone app; still need to test them:

AudioPage
FrontPanelPagw
TonePage
AboutPage
AuditionPage
ChoosePresetPage
EditPage
FootswitchPage
FootswitchLT4BankEditPage
MenuPage
RenamePage
ReplaceBrowsePage
ReplaceConfirmPage
RestorePage
SavePage
SaveSplashPage
SelectionPage
SettingsPage
TitlePage
TunerPage

Configurable keyboard shortcuts

Keyboard shortcuts to control effect parameters; specifically to be able to set up conplex changes via macros

  • prev/next preset
  • switch to preset #
  • For each DSP unit:
    • toggle bypass
    • param value up/down (for each param)
    • switch to effect x
  • toggle tuner
  • increase/decrease tempo

Footswitch setlist

Create a "setlist" of presets to rotate through with each push of the footswitch.

  1. A list of presets is created to rotate through and the first two are stored in the amp, as A and B.
  2. When the footswitch is pressed, and the amp switches to the other preset, the preset setting that was switched from is updated to the next preset in the list.

Preset list: a b c d e f g h i j

Process (upper case means active):

Ab -> (press) -> cB -> (press) -> Cd -> (press) -> eD -> (press) -> Ef -> (press) -> gF -> (press) -> Gh -> (press) -> iH -> (press) -> Ij -> (press) -> aJ -> (press) ->

Remove state from library

Remove code dealing with amp state from the library; let the application deal with it while they also deal with UI.

Web interface

Web interface for running on a computer (like a raspberry pi) and using another device to control it.

  • mobile UI
  • local midi control

VU meter

VU meter to help match volume across presets.

Support for other Fender LT amps

I only have a Mustang LT25, and I suspect there are differences among the other amps in the series.

The other amps are:

  • Mustang LT50
  • Mustang LT40s
  • Rumble LT

To ensure compatibility, all that would be needed is a Wireshark dump. To make sure it covers everything, I would want the dump to include:

  • power on and connection
  • pressing the footswitch
  • setting footswitch parameters
  • setting line out gain (if applicable)
  • turning all the knobs and pressing each button
  • enabling and disabling the tuner

From that, it would be trivial to double check the protocol messages for any differences that need to be accounted for in the code.

Arduino library

Arduino library to allow for controlling bypass settings, etc, from an external controller.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.