# @gui-chat-plugin/music

[![npm version](https://badge.fury.io/js/%40gui-chat-plugin%2Fmusic.svg)](https://www.npmjs.com/package/@gui-chat-plugin/music)

MusicXML sheet music plugin for GUI Chat applications. Displays and plays sheet music from MusicXML format.

## Features

- Display sheet music from MusicXML format
- Audio playback with OpenSheetMusicDisplay and osmd-audio-player
- Tempo control
- Cursor following during playback

## Installation

```bash
yarn add @gui-chat-plugin/music
```

## Usage

### Vue Integration

```typescript
// In src/tools/index.ts
import MusicPlugin from "@gui-chat-plugin/music/vue";

const pluginList = [
  // ... other plugins
  MusicPlugin,
];

// In src/main.ts
import "@gui-chat-plugin/music/style.css";
```

### Core-only Usage

```typescript
import { executeMusic, TOOL_DEFINITION } from "@gui-chat-plugin/music";

// Show sheet music
const result = await executeMusic(context, {
  musicXML: "<musicxml-content>",
  title: "My Song",
});
```

## API

### MusicArgs

```typescript
interface MusicArgs {
  musicXML: string;  // The music in MusicXML format
  title?: string;    // Optional title for the music piece
}
```

### MusicToolData

```typescript
interface MusicToolData {
  musicXML: string;
}
```

## Dependencies

This plugin requires:
- `opensheetmusicdisplay`: For rendering MusicXML as sheet music
- `osmd-audio-player`: For audio playback

## Development

```bash
# Install dependencies
yarn install

# Run demo
yarn dev

# Build
yarn build

# Lint
yarn lint
```

## Test Prompts

Try these prompts to test the plugin:

1. "Create sheet music for a simple C major scale"
2. "Write a short melody in G major"
3. "Generate sheet music for Twinkle Twinkle Little Star"

## License

MIT

## Related

- Protocol spec: [gui-chat-protocol](https://github.com/receptron/gui-chat-protocol)
- Reference implementations using this protocol: [mulmoclaude](https://github.com/receptron/mulmoclaude) · [MulmoChat](https://github.com/receptron/MulmoChat)
