Giter Site home page Giter Site logo

lenwesaralonde / musician Goto Github PK

View Code? Open in Web Editor NEW
10.0 2.0 4.0 519.86 MB

Add-on for World of Warcraft to perform music in game.

Home Page: https://musician.lenwe.io

License: GNU General Public License v3.0

HTML 0.68% JavaScript 2.27% Lua 97.05%
wow addon music midi player misc miscellaneous roleplay rp world-of-warcraft

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

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)

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

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.

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.

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,

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

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

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?

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!

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.

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.

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

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.