Git Product home page Git Product logo

musician's Introduction

Musician

For the first time in World of Warcraft, your character can literally become a bard!

Play music for you and the other players, from MIDI files or live, using 22 instruments and 2 percussion sets from various styles: medieval, celtic, folk, tribal and heavy metal. 🤘

Quick links

  • 💬 Discord server (EN/FR) for help, good music and more!
  • 🔌 Additional modules:
  • 📖 Wiki — Tips and tricks, FAQ and detailed documentation for gamers, developers and music producers.
  • 🐞 Bug tracker — Report issues
  • 👨‍💻 GitHub repo — Contribute to the project

Un Guide en français est également disponible. 🇫🇷🥖🍷

tl;dr

Left-click on the minimap button to open the main menu.

Type /mus help in the chat window to get the command list.

How to listen to music

All you need is to have the add-on installed. Nothing more is required.

  • Enable nameplates with SHIFT+V (or from the add-on options) to see cool animations on characters playing music and show a 🎵 next to the name of your fellow music addicts.
  • To mute a player, right-click on their name or portrait to open the menu then select Mute. Do the same to unmute.
  • You can also just stop the song being played by clicking the [Stop] hyperlink in the player's emote.
  • Right click on the minimap button to enable or disable all the music from the add-on.
  • The characters currently playing music can be shown on the world map and the minimap.

Nameplate animations

How to play music

Musician plays music files in MIDI format. MIDI files have a .mid, .midi or .kar extension and do not contain any sound like MP3s, but a sequence of notes. This is why a MIDI file sounds differently according to the software or musical instrument it's played on.

💡 You can find millions of MIDI files very easily by searching for MIDI + music genre/title/etc. on Google. I also made a selection of cool music files you can try with the add-on.

⚠️ Don't try to convert audio files such as MP3s or YouTube videos into MIDI, the result will be disappointing. This is a tedious work that can only be done manually by experienced musicians.

How to play a song

  1. Open the MIDI import tool located at musician.lenwe.io/import in your web browser. (You can also find the import tool in the Interface/AddOns/Musician/MidiConvert folder.)
  2. Drag and drop a MIDI file.
  3. Copy the generated music code by clicking the Copy button.
  4. Back in WoW, left-click on the minimap button to open the main menu then choose Import and play a song to open the main window (or type /music).
  5. Click the Select all button then paste the music code in the edit window (Ctrl+V or CMD+V on Mac).
  6. Click Play.

Main window

Save and load songs in game

Songs can be saved and loaded back in game using the optional add-on MusicianList.

Play as a band

Songs can be played in sync as a band, in which each member is playing a different part.

To allow synchronized play, all band members should be grouped in the same party or raid and have the same song loaded into Musician.

Use the Link/Export button Link button to share songs with your band members.

  1. Load the same song as the other members of the band from MIDI, from the list or from a song chat link.
  2. Open the Song Editor then check Solo for the tracks you want to play with your character. Adjust other track settings as you like.
  3. Click the Play as a band button Play as band button when you're done (the green LED starts blinking).
  4. When every member is ready, the band leader clicks the Play button for synchronized start (the green LED turns on).
  5. Song stops playing if the band leader clicks the Stop button.

Remarks:

  • Mouse over the Play as a band button to check which members of the band are ready.
  • Each band member can do all the changes they want in the Song Editor, except changing the start and end points that would result in being out of sync.
  • Keep in mind that the overall polyphony can be limited and is shared among all the members of the band.

Play live

Live Mode literally turns your computer keyboard into a piano.

Click Open keyboard in the main menu or type /mus live to open the live keyboard.

Configure the keyboard

Before using the keyboard for the first time, you have configure it to determine its physical layout.

This process is straightforward and takes approximately 30 seconds to complete, just follow the on-screen instructions.

Configuration example for the US keyboard

The live keyboard

The live keyboard consists in two layers, Upper and Lower, respectively the two first and two last rows of your keyboard (or the right and left side, depending on the layout used). Each layer has its own instrument setting so 2 different instruments can be played at the same time or the same instrument can be set to both layers to take advantage of the full keyboard.

Various keyboard layouts are available, including simplified ones with limited notes but a wider range of keys.

The space bar acts like the sustain pedal of a piano.

In Live Mode, the other players hear you playing while in Solo Mode, you play for yourself. In Live Mode, keep in mind that if you hear the sound playing instantly at the press of the key, the other players will hear it after a slight delay of approximately 2 seconds.

The keyboard settings can be saved in 12 program slots, accessible using the 12 Function keys:

  • Press the Function key to load a program.
  • Press Ctrl (or Shift on Mac) + the Function key to save the current settings in a program.
  • Press Delete + the Function key to erase a program.

The live keyboard

Play as a band

It's possible to play as a band in Live Mode. All the members of the band should be grouped in the same party or raid.

Click the Play live as a band button Play live as a band button on the live keyboard window to turn on the synchronization. In counterpart, this may result in some latency so you won't be able to play fast paced songs in this mode.

Use the Solo Mode if you need to do some adjustments you don't want the other members of the band to hear.

Enable nameplates to see who is playing what.

Play with a MIDI keyboard

There is no support for MIDI keyboards in World of Warcraft. However, it's possible to emulate keystrokes with a MIDI keyboard using third party software. Check out the Musician MIDI add-on to learn how to achieve this.

Song editor

Some basic modifications can be made to the imported song in the song editor, which is accessible from the Edit button or the main menu:

  • Set start and end points, to use a part of the song
  • Mute and solo tracks
  • Change track instruments
  • Transpose tracks
  • Accent tracks, to make them louder by doubling the notes

The song editor also shows some information about the tracks (MIDI instrument, start and end points, number of notes…) and the activity while the song is playing. Click the track start or end point time code to reach it in the timeline.

You can still change the track settings of the song currently playing by clicking the Synchronize track settings button Synchronize track settings button as long as you have the same song loaded in the editor.

Song editor

Share your songs with the other players

Songs can be shared with other players as links to be posted into the chat. Click the Link or Export button Link button, set a title and you're done!

The links remain active until you log out or reload the interface.

Cross-faction play

Cross-faction (and cross-realm) music can be achieved on WoW Retail through the Cross RP add-on by Tammya-MoonGuard.

This add-on is very straightforward, just install it and it works!

Cross RP relies on a peer to peer network established by the players who run it so the faction/realm you want to play with may not be always reachable. Feel free to encourage other players to install Cross RP and expand the network!

You can see what realms and factions you're connected to in Musician's options or by mousing over the Cross RP minimap button.

Cross-faction play with Cross RP

Integration with role-playing add-ons

Musician integrates with role-playing add-ons Total RP and MyRolePlay to benefit from some of their features, such as roleplaying character names and tooltips.

Total RP's map scan feature shows players who also have Musician with a 🎵 icon. The icon blinks for players who are currently playing music.

Total RP map scan

In addition, the Total RP Extended plugin allows you to export your songs as sheet music items that can be traded with other players. Click the Export button to create one.

Total RP Extended item exportTotal RP Extended item in bag

Tips and tricks

  • You can preview the song at any moment prior to playing it for other players by clicking the Preview button or using the song editor. If another song is playing nearby, it will be muted for you only.
  • If another player has Musician, it will be shown in their tooltip. Just hover the other players with your mouse cursor to see who can hear you!
  • Use toys such as the [Blingtron's Circuit Design Tutorial] and the [Fae Harp] to make your performance visually more immersive! (WoW Retail only)
  • You can add lyrics by combining Musician with the StoryTeller add-on.
  • Load and prepare the next song while the current one is playing to reduce waiting time between songs.
  • The radius for hearing the music is approximately 40 meters.
  • Play songs that are relevant with your "band" composition. It's nonsense to play orchestral music with only two bards ! 😃 However you can still role-play as if your character owns a kind of gnomish Music-o-Matic jukebox machine that is capable of reproducing a whole band.
  • A text emote is shown to the players who don't have Musician when you play a song. You can disable this emote in the add-on options.
  • Nameplates animations and icons are compatible with the most popular nameplate add-ons (KuiNameplates, Plater, ElvUI…).
  • You can configure the add-on to use several audio channels to increase the maximum polyphony.
  • Check out the wiki for more!

Compose your own music

You can compose music for Musician using any MIDI sequencer such as MidiEditor (free and cross-platform).

The 18 melodic instruments available are:

  • Lute (24 Acoustic guitar)
  • Recorder (74)
  • Celtic harp (46)
  • Hammered dulcimer (15)
  • Piano (0)
  • Bagpipe (109)
  • Accordion (22)
  • Fiddle (110)
  • Viola da gamba (ancient cello) (42)
  • Female voice (53 Voice Oohs)
  • Male voice (52 Choir Aahs)
  • Trumpet (56)
  • Sackbut (ancient trombone) (57)
  • War horn (shofar) (60 French horn)
  • Clarinet (71)
  • Bassoon (70)
  • Metal guitar (29)
  • Clean Guitar (27)
  • Bass guitar (33 Fingered bass)

Percussions:

  • Traditional percussion set (drum kit 0)
  • Standard drum set (drum kit 16)
  • War drums (47 Timpani)
  • Woodblock (115)
  • Tambourine shake (119)

The other instruments are mapped to the closest-sounding instrument among the ones available (violin → fiddle, guitar → lute etc.).

The drum kits are replaced by traditional percussions such as a bodhrán (frame drum), a tambourine and a shaker. A standard drum kit is also available for heavy metal songs.

Check the full mapping in Musician.MidiMapping.lua for details.

Unfortunately, due to limitations of the WoW UI, velocity and controls (volume, padding, pitch bend, modulation…) are not supported. The polyphony may be limited for some players, try to avoid songs having more than 12 simultaneous notes.

Limitations and known issues

Musician has several issues that are due to limitations of the World of Warcraft API. Unfortunately, these can't be fixed but there are some tricks you can do to work around them:

  • The volume of the music played with Musician can't be adjusted. Reduce the Master volume if it's too loud for you or if you're experiencing clipping. Setting the Master volume to 75% should deliver a comfortable experience in most cases.
  • Musician has lots of audio files that need to be loaded into memory when the game starts. This results in a loading screen showing up or audio not playing properly for a few seconds after entering the game. Make sure you have more RAM than the minimum required by Blizzard. Run WoW on an SSD if possible. Avoid running too much applications in the background while you play WoW with Musician.
  • Audio delay occurs when playing live on Windows, because WoW doesn't support low latency drivers such as ASIO or WASAPI. If you have a digital piano with MIDI output, you can use it with MusicianMIDI to play live, and rely on your direct instrument sound instead of Musician's (you can mute Musician using the minimap button).
  • Music playing relies on the refresh rate of the screen so stuttering may occur on slower computers. Adjust your settings to maintain a framerate above 30 FPS for good results. Songs having an overly high note rate may stutter.
  • There is no support for velocity and modulation in MIDI files.
  • The volume of MIDI tracks can't be adjusted. However, each track has an Accent checkbox you can enable to double the notes and make the track sound louder.
  • The polyphony is limited, some notes may drop if there are too many playing at the same time. By default, Musician uses the SFX and Dialog channels to reach a 64-note polyphony which is enough for 99,99% of the songs. Both channels' volume is set to 100% to make sure all notes play at the same level.
  • The Play as a band feature does not work with trial accounts in raid mode.

Support

If you like Musician and want to support its development, the best you can do is to spread the word and invite your friends to install it! ❤️

You can also toss a coin to your developer on Patreon or Paypal.

🙏 Special thanks to the official supporters of the project:

  • Grayson Blackclaw
  • ChanceTheCheetah
  • Selena - WRA
  • Crisellianna
  • Naelyel
  • Aphex
  • Derenly

musician's People

Contributors

dependabot[bot] avatar kalevalar avatar lenwesaralonde avatar uujfwmnp avatar yimiprod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

musician's Issues

Force MusicianComm channel in last position

Sometimes regular General / Trade / LocalDefense take too much time to be joint and MusicianComm gets in first position.

image

Solution: Reorder channels every time the channel list is changed to force MusicianComm at the last position

Set cooldown for promo emote

Do not send the "promo" emote less than every 10 minute when the option is checked to avoid other players who don't have the add-on to see it too often.

In band play mode, only the initiator of the play action should send the promo emote.

Rework promo emote to make it less intrusive

When playing a song, the following "promo" emote is sent in the chat :

Player is playing a song. (Get "Musician" add-on or upgrade it from https://lenwe.info/musician to listen!)

This could be annoying for players who don't want to install addons, especially because of the URL and its overall length.

The addon can now be easily found on Google by typing "musician addon" so the URL part is no longer needed.

This can also get spammy in crowded places such as taverns etc.

  • Rework this to make it shorter and less intrusive (Get "Musician" add-on to listen)
  • Add a settings panel to addon with options allowing to disable the promo part or the whole emote.

Emote

I have this weird thing and I can't find the option or what I did different.

On my main I do not see the /me plays a song emote, I do on all my alts however!

What am I missing?

Third party instruments do not preload

Third party instruments implemented in separate plugins such as Instruments v1 and Piano are loaded after the preloading process is initialized.

Move sampler and preloader initialization process to OnEnable so it starts after all other add-ons have been loaded.

About window with supporters list

Add an "About" popup accessible from the main menu showing various informations:

  • Version number
  • Discord link
  • Donation / Patreon links
  • Supports list

Group live mode

Add a "Group sync" mode when in party or raid mode to send Note On / Note Off events in the group channel prior to playing them to allow live group play,

Deal with phasing in Musician.Registry.PlayerIsInRange()

Musician.Registry.PlayerIsInRange() returns true if the player is in range to hear the music. It does not take account of phasing so music coming from another phase or server shard can still be heard.

The C_PlayerInfo.IsConnected() function seems to address this.

C_PlayerInfo.IsConnected(PlayerLocation:CreateFromGUID(guid))

Mute sound during preloading

Playing music before the preloading process is complete may cause freeze on computers running WoW from a HDD.

  • If samples are not preloaded, gray out the minimap icon and mute all samples until it's complete.
  • Optimize preloading process to speed it up while limiting FPS drop (30%)

The average time for loading a sample can be used to determine how the sample is loaded :

  • < 1ms : Loaded from RAM / OS cache (already preloaded)
  • < 10ms : Loaded from a SSD (measured ~6ms on Sandisk SATA SSD)
  • > 10ms : Loaded from a HDD (measured ~30ms on external USB2 5400 RPM HDD)

Preload samples during loading screen

Preloading samples in the OS file cache in background is slowed down to avoid FPS drop when starting to play after a cold start.

Loading all samples from a SSD takes ~13 seconds, which is less than the script timeout (~15s) so it can be safely done during the loading screen.

Improve preloader to attempt to load all samples within 15 seconds during cold startup. If all samples can't be loaded (HDD), continue with the background preloading.

Add music animation to nameplate of characters playing music

Investigate if it's possible to add 3D animations, text or icons to character nameplates. (check "Plater" and "RP Tags" add-ons)

  • Add a music spell animation to character nameplates playing music
  • Add an icon to character nameplates who have a compatible version of the add-on and can hear you.
  • Options panel
  • Hide nameplates content when UI is hidden but keep music spell animation visible
  • "Tips and tricks" popup
  • 3rd party support:
    • TRP3
    • Plater
    • KuiNameplates
    • ElvUI

Musician channel not joining if the player hasn't joined any channel

The communication channel MusicianComm is never joined if the player has not already joined at least one channel (ie General)

Also, don't block requests sent in group channel or whisper if the communication channel is not ready yet.

Add a message when joined communication channel but alone ("There is no other music fan around yet..." )

Workaround : Join one channel (/join General)

Fix MIDI key indexes in protocol and format

MIDI key indexes do not comply with the MIDI standard in the MUS file format and communication protocol.

Middle C (261.626 Hz) should be C4 with key index 60 for all instruments, including percussions and drumkit.

  • Create MUS6 format using proper MIDI key indexes
  • Update communication protocol to version 6 (v5 is specific to WoW Classic version)
  • Fix MIDI converter
  • Fix MIDI key indexes
  • Create update script for MusicianList to fix key indexes in saved songs
  • Update demo songs in MusicianList

LUA error on checkboxes in WoW Classic

Mute, solo and power chords checkboxes do not work in WoW Classic and trigger a LUA error.

Message: Interface\FrameXML\OptionsPanelTemplates.lua:201: Usage: GetCVar("cvar")
Time: Fri Aug 14 00:26:00 2020
Count: 3
Stack: Interface\FrameXML\OptionsPanelTemplates.lua:201: Usage: GetCVar("cvar")
[C]: in function `GetCVar'
Interface\FrameXML\OptionsPanelTemplates.lua:201: in function `BlizzardOptionsPanel_SetCVarSafe'
Interface\FrameXML\OptionsPanelTemplates.lua:153: in function `BlizzardOptionsPanel_CheckButton_SetNewValue'
Interface\FrameXML\OptionsPanelTemplates.lua:131: in function `BlizzardOptionsPanel_CheckButton_OnClick'
[string "*:OnClick"]:6: in function <[string "*:OnClick"]:1>

Locals: (*temporary) = nil

Override OnClick for checkboxes that inherit from OptionsSmallCheckButtonTemplate

Add and rework instruments

Add instruments :

  • Accordion
  • War horn (shofar)
  • War drum

Rework instruments :

  • Hammered dulcimer: Replace soundfont
  • Celtic harp: Replace soundfont
  • Renaissance lute: Replace soundfont
  • Recorder: Replace soundfont
  • Male tenor voice: Replace soundfont
  • Female soprano voice: Fix looping and rework out of range notes using iZotope Radius
  • Fiddle: Replace soundfont
  • Bagpipe: Replace soundfont
  • Cello: Replace soundfont by viola da gamba
  • Trumpet: Replace soundfont by natural trumpet
  • Trombone: Replace soundfont by sackbut
  • Bassoon: Replace soundfont
  • Clarinet: Replace soundfont
  • Traditional percussions: Replace samples

Misc:

  • Add instrument credits information in about window

Musician has been blocked from an action only available to the Blizzard UI.

Some basic game actions get blocked by the addon showing the message : "Musician has been blocked from an action only available to the Blizzard UI."

Version: 1.5.0.2

Reproduction steps

Prerequisites : Having a game community created

  1. Reload UI
  2. Import a song
  3. Preview song
  4. Open song editor and change some transpose and instrument settings
  5. Close song editor
  6. Open Guild and Communities window
  7. Left click on the community > Group parameters
  8. Press "Accept"

Result

Popup with "Musician has been blocked from an action only available to the Blizzard UI." shows up. Group settings are not saved.

Expected result

Group settings are saved without error

Logo Proposal for Musician

Hi! @LenweSaralonde

I'm interested in collaborating with this project by delivering a series of logotype options that fits this project for the best!

If interested let me know so we can get started!

Cheers!

Classic, LUA error when logging in with ElvUI enabled

Message: Interface\AddOns\Musician\modules\ElvUI\ElvUI.lua:17: hooksecurefunc(): StyleFilterNameChanged is not a function Time: Mon Sep 23 19:21:55 2019 Count: 1 Stack: Interface\AddOns\Musician\modules\ElvUI\ElvUI.lua:17: hooksecurefunc(): StyleFilterNameChanged is not a function (tail call): ? [C]: in function hooksecurefunc'
Interface\AddOns\Musician\modules\ElvUI\ElvUI.lua:17: in function <Interface\AddOns\Musician\modules\ElvUI\ElvUI.lua:8>
[C]: ?
...dOns\AmmoReminder\Libs\AceAddon-3.0\AceAddon-3.0.lua:70: in function <...dOns\AmmoReminder\Libs\AceAddon-3.0\AceAddon-3.0.lua:65>
...dOns\AmmoReminder\Libs\AceAddon-3.0\AceAddon-3.0.lua:527: in function EnableAddon' ...dOns\AmmoReminder\Libs\AceAddon-3.0\AceAddon-3.0.lua:620: in function <...dOns\AmmoReminder\Libs\AceAddon-3.0\AceAddon-3.0.lua:605> [C]: in function LoadAddOn'
Interface\FrameXML\UIParent.lua:353: in function UIParentLoadAddOn' Interface\FrameXML\UIParent.lua:424: in function TimeManager_LoadUI'
Interface\FrameXML\UIParent.lua:693: in function <Interface\FrameXML\UIParent.lua:658>

Locals: `

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.