{"id":50492797,"url":"https://github.com/alexferl/dxwire","last_synced_at":"2026-06-02T04:30:41.298Z","repository":{"id":337533815,"uuid":"1148429244","full_name":"alexferl/dxwire","owner":"alexferl","description":"A web-based patch editor and manager for the Yamaha DX7 synthesizer.","archived":false,"fork":false,"pushed_at":"2026-02-23T15:56:33.000Z","size":344,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-01T05:25:16.992Z","etag":null,"topics":["dx7","dxwire","javascript","midi","midiwire","synth","synthesizer","webmidi"],"latest_commit_sha":null,"homepage":"https://alexferl.github.io/dxwire/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexferl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-03T00:34:03.000Z","updated_at":"2026-02-23T15:56:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alexferl/dxwire","commit_stats":null,"previous_names":["alexferl/dxwire"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alexferl/dxwire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexferl%2Fdxwire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexferl%2Fdxwire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexferl%2Fdxwire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexferl%2Fdxwire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexferl","download_url":"https://codeload.github.com/alexferl/dxwire/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexferl%2Fdxwire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33806987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dx7","dxwire","javascript","midi","midiwire","synth","synthesizer","webmidi"],"created_at":"2026-06-02T04:30:39.857Z","updated_at":"2026-06-02T04:30:41.290Z","avatar_url":"https://github.com/alexferl.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DXWire\n\nA web-based patch editor and manager for the Yamaha DX7 and compatible synthesizers. Built with SolidJS and modern web technologies.\n\n## Overview\n\nDXWire is a browser-based editor for Yamaha DX7 and compatible synthesizer patches (voices). Works with the original DX7, TX7, DX1/DX5, KORG Volca FM/2, and other DX7-compatible synths. It provides a modern, intuitive interface for editing the complex FM synthesis parameters of the DX7, including:\n\n- 6 operators with envelope generators, frequency settings, and modulation\n- 32 FM algorithms with visual feedback\n- Low-frequency oscillator (LFO) settings\n- Pitch envelope generator\n- Global voice parameters (feedback, transpose, etc.)\n- Full bank management (32 voices per bank)\n- MIDI SysEx import/export for hardware communication\n\n## Features\n\n### Voice Editing\n- **Operator Editing**: Full control over all 6 operators including EG rates/levels, frequency (ratio/fixed), detune, key scaling, and output levels\n- **Algorithm Visualization**: Interactive display showing the 32 DX7 FM algorithms and how operators modulate each other\n- **Envelope Graphs**: Visual representation of amplitude and pitch envelope generators\n- **Real-time Parameter Control**: Knobs, sliders, and switches for all voice parameters\n\n### Bank Management\n- Load and save DX7 voice banks (32 voices per bank)\n- Import/Export SysEx files (.syx) compatible with hardware DX7\n- Import/Export JSON format for easy sharing and version control\n- Copy, rename, and initialize individual voices\n- Manage multiple banks simultaneously\n\n### MIDI Support\n- Connect directly to DX7 hardware via Web MIDI API\n- Send and receive voice data via System Exclusive (SysEx) messages\n- Automatic device detection and connection status\n- Browser-based MIDI input/output selection\n\n### User Interface\n- Clean, responsive design optimized for editing\n- Visual algorithm display showing operator routing\n- Keyboard shortcuts for common operations\n- Dark mode support (follows system preferences)\n\n## Getting Started\n\n### Prerequisites\n\n- A modern web browser with Web MIDI API support (Chrome/Edge, Firefox, Opera)\n- For hardware communication: Yamaha DX7 or compatible synthesizer with MIDI interface\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/alexferl/dxwire.git\ncd dxwire\n\n# Install dependencies\nnpm install\n\n# Start the development server\nnpm run dev\n```\n\nThe application will be available at `http://localhost:5173`.\n\n### Building for Production\n\n```bash\nnpm run build\n```\n\nThe built files will be in the `dist/` directory.\n\n## Usage\n\n### Loading Voices\n\n1. **From SysEx files**: Click Import in the header and select a `.syx` file containing DX7 voices\n2. **From JSON files**: Import `.json` files exported from DXWire\n3. **From hardware**: Connect your DX7 via MIDI and use the MIDI controls\n\n### Editing Voices\n\n1. Select a voice from the bank dropdown\n2. Adjust parameters using the operator panels and sidebar controls\n3. The algorithm visualization shows how operators modulate each other\n4. Use the envelope graphs to visualize amplitude changes over time\n\n### Saving and Exporting\n\n1. **To SysEx**: Click Export → Download SyX to save the current voice as a `.syx` file\n2. **To other synths**: Export voices or entire banks in formats compatible with other DX7-compatible synths (KORG Volca FM/2, etc.)\n3. **To JSON**: Export as JSON for sharing or version control\n4. **To hardware**: Send voices directly to your DX7 via MIDI (if connected)\n\n### Managing Banks\n\n- Switch between loaded banks using the bank selector\n- Rename banks by clicking the bank name\n- Delete banks you no longer need\n- Replace voices in a bank with your edited voice\n\n## Development\n\n### Available Scripts\n\n| Command            | Description                              |\n|--------------------|------------------------------------------|\n| `npm run dev`      | Start development server with hot reload |\n| `npm run build`    | Build for production                     |\n| `npm run preview`  | Preview production build locally         |\n| `npm test`         | Run unit tests in watch mode             |\n| `npm run test:ui`  | Run tests with Vitest UI                 |\n| `npm run coverage` | Generate test coverage report            |\n| `npm run lint`     | Run Biome linter and formatter           |\n\n### Tech Stack\n\n- **[midiwire](https://github.com/alexferl/midiwire)** - MIDI device management and DX7 SysEx handling\n- **[SolidJS](https://www.solidjs.com/)** - Simple and performant reactivity for building user interfaces\n- **[Vite](https://vitejs.dev/)** - Next generation frontend tooling\n- **[Biome](https://biomejs.dev/)** - Fast linter and formatter\n- **[Vitest](https://vitest.dev/)** - Unit testing framework\n\n### Project Structure\n\n```\nsrc/\n├── components/\n│   ├── Editor/           # Main editor component\n│   │   ├── Header/       # Import/export menus, MIDI controls\n│   │   ├── Operators/    # 6 operator editor panels\n│   │   ├── Sidebar/      # Algorithm, LFO, Pitch EG, General\n│   │   ├── context/      # Voice and MIDI context providers\n│   │   ├── dialogs/      # Copy/rename dialogs\n│   │   ├── Voice.js      # Voice state management\n│   │   └── storage.js    # Local storage persistence\n│   ├── Knob/             # Rotary knob component\n│   ├── Slider/           # Slider control component\n│   ├── EnvelopeGraph/    # EG visualization\n│   └── ...\n├── pages/                # Route pages\n└── index.jsx            # Application entry\n```\n\n## DX7 Compatibility\n\nDXWire is designed to be fully compatible with the original Yamaha DX7 synthesizer:\n\n- Supports all 32 FM algorithms\n- Full SysEx compatibility for voice dumps\n- Compatible with standard DX7 voice banks\n- Supports both single voice and 32-voice bank dumps\n- Export support for KORG Volca FM/2 synthesizers\n\n## Browser Support\n\nRequires browsers with [Web MIDI API](https://caniuse.com/midi) support:\n- ✅ Chrome/Edge 43+\n- ✅ Firefox 108+\n- ✅ Opera 30+\n- ❌ Safari (not supported)\n\n**Note:** SysEx requires explicit user permission in Chrome.\n\n## License\n\n[MIT](LICENSE)\n\n## Acknowledgments\n\n- Yamaha for creating the legendary DX7 synthesizer\n- Inspired by [Dexed](https://github.com/asb2m10/dexed)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexferl%2Fdxwire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexferl%2Fdxwire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexferl%2Fdxwire/lists"}