{"id":357196,"date":"2026-09-09T16:07:48","date_gmt":"2026-09-09T16:07:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/glissando-animated-audio-player\/"},"modified":"2026-10-13T17:00:53","modified_gmt":"2026-10-13T17:00:53","slug":"glissando","status":"publish","type":"plugin","link":"https:\/\/tzm.wordpress.org\/plugins\/glissando\/","author":23544969,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Glissando \u2013 Animated Audio Player","header_author":"TomGl","header_description":"Glass-style audio player with animated visualizer. Add with [glissando src=\"...\"].","assets_banners_color":"222a41","last_updated":"2026-10-13 17:00:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":228,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.8":{"tag":"1.2.8","author":"tomsgl","date":"2026-09-09 19:23:25","revision":3688907},"2.0.0":{"tag":"2.0.0","author":"tomsgl","date":"2026-10-13 17:00:53","revision":3744487}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3688632,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3688632,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3688632,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"glissando\/player":{"name":"glissando\/player","title":"Player"}},"tagged_versions":["1.2.8","2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3688907,"resolution":"1","location":"assets","locale":"","width":1168,"height":1102},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3688907,"resolution":"2","location":"assets","locale":"","width":1168,"height":395},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3688907,"resolution":"3","location":"assets","locale":"","width":1168,"height":732},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3688907,"resolution":"4","location":"assets","locale":"","width":1168,"height":534},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3688907,"resolution":"5","location":"assets","locale":"","width":1168,"height":711},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3688907,"resolution":"6","location":"assets","locale":"","width":1170,"height":1626}},"screenshots":{"1":"Artwork preset, dark theme, mid-playback - the same player at four column widths.","2":"Compact preset - from full width down to a narrow sidebar, controls collapsing as the column shrinks.","3":"Dark and light theme, same track.","4":"Adjustable bar count and per-player colours.","5":"Elementor widget controls - the same settings exist in the block sidebar and the shortcode.","6":"What the separately sold Pro version adds - not included in this free plugin."}},"plugin_section":[],"plugin_tags":[452,4702,708,1494,5643],"plugin_category":[50],"plugin_contributors":[78154,279965],"plugin_business_model":[],"class_list":["post-357196","plugin","type-plugin","status-publish","hentry","plugin_tags-audio","plugin_tags-audio-player","plugin_tags-mp3","plugin_tags-music-player","plugin_tags-visualizer","plugin_category-media","plugin_contributors-freemius","plugin_contributors-tomsgl","plugin_committers-tomsgl"],"banners":{"banner":"https:\/\/ps.w.org\/glissando\/assets\/banner-772x250.png?rev=3688632","banner_2x":"https:\/\/ps.w.org\/glissando\/assets\/banner-1544x500.png?rev=3688632","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/glissando\/assets\/icon-256x256.png?rev=3688632","icon_2x":"https:\/\/ps.w.org\/glissando\/assets\/icon-256x256.png?rev=3688632","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-1.png?rev=3688907","caption":"Artwork preset, dark theme, mid-playback - the same player at four column widths."},{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-2.png?rev=3688907","caption":"Compact preset - from full width down to a narrow sidebar, controls collapsing as the column shrinks."},{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-3.png?rev=3688907","caption":"Dark and light theme, same track."},{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-4.png?rev=3688907","caption":"Adjustable bar count and per-player colours."},{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-5.png?rev=3688907","caption":"Elementor widget controls - the same settings exist in the block sidebar and the shortcode."},{"src":"https:\/\/ps.w.org\/glissando\/assets\/screenshot-6.png?rev=3688907","caption":"What the separately sold Pro version adds - not included in this free plugin."}],"raw_content":"<!--section=description-->\n<p>Glissando is a glass-style audio player with an animated visualizer that follows the track. Add players anywhere with the Gutenberg block, the Elementor widget or the <code>[glissando]<\/code> shortcode.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Artwork and Compact player presets<\/li>\n<li>Dark and light themes, six color palettes, your own gradients<\/li>\n<li>Visualizer bars: count from 32 to 160, animation speed, frequency range, low cut<\/li>\n<li>Card styling: glass tint, button hover color, corner radius, shadow, background opacity<\/li>\n<li>Album artwork: square or 16:9, zoom and vertical position<\/li>\n<li>Download button: icon, text or both, a second file (e.g. instrumental), download counter<\/li>\n<li>Tracks from the media library or any URL, title and artist filled in automatically<\/li>\n<li>Fits any column, from full width down to a 300px sidebar<\/li>\n<li>Site-wide defaults in Settings - Glissando, any player can override them<\/li>\n<li>Keyboard-operable, respects the \"reduce motion\" setting<\/li>\n<li>Themes cannot break it: the player renders in a Shadow DOM<\/li>\n<\/ul>\n\n<p>A separately sold Pro version adds further player layouts (Standard, Minimal, Radial), playlists, the LED and Dots bar styles and a share button.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>None of this plugin's own code is minified, compiled or obfuscated. Every PHP, JavaScript and CSS file I wrote is the original human-readable source, and it uses no third-party JavaScript libraries.<\/p>\n\n<p>There is one generated value: the <code>GLISSANDO_CSS<\/code> string near the top of <code>assets\/glissando.js<\/code>. The player renders inside a Shadow DOM so that themes cannot break it, and a Shadow DOM cannot see enqueued stylesheets, so the stylesheet has to be injected as a string.<\/p>\n\n<p>The readable source for that string is bundled with the plugin, uncompressed, at <code>assets\/glissando.css<\/code>. <code>GLISSANDO_CSS<\/code> is that same stylesheet encoded as a JavaScript string literal - the rules, selectors, comments and formatting are identical, so the two can be read side by side.<\/p>\n\n<p>The build step is bundled too, as <code>bake-css.js<\/code> in the plugin folder. It needs Node.js and nothing else: no npm install, no dependencies, no bundler. After editing <code>assets\/glissando.css<\/code>, run this from the plugin folder to regenerate the string: <code>node bake-css.js<\/code><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin uses Freemius to handle licensing, plugin updates and optional\nusage diagnostics.<\/p>\n\n<p>No data is sent unless you opt in. Freemius is contacted when you accept its\nopt-in prompt on activation, or if you later connect a Pro licence or start a\ntrial. When that happens it sends your site URL, the WordPress and PHP\nversions, this plugin's version, and the email address of the account you\nconnect with. Declining the prompt leaves the plugin fully functional.<\/p>\n\n<p>Service provider: Freemius, Inc. - https:\/\/freemius.com\nTerms of Service: https:\/\/freemius.com\/terms\/\nPrivacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via Plugins &gt; Add New &gt; Upload, or unzip into <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Add the Glissando Player block (or Elementor widget), or use <code>[glissando id=\"123\"]<\/code> \/ <code>[glissando src=\"https:\/\/example.com\/track.mp3\"]<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20any%20theme%3F\"><h3>Does it work with any theme?<\/h3><\/dt>\n<dd><p>Yes. The player renders in a Shadow DOM, so theme styles cannot break it.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20set%20every%20option%20on%20every%20player%3F\"><h3>Do I have to set every option on every player?<\/h3><\/dt>\n<dd><p>No. Settings - Glissando holds the defaults for the whole site; a player only\ncarries the settings you change on it.<\/p><\/dd>\n<dt id=\"is%20there%20a%20limit%20on%20track%20length%3F\"><h3>Is there a limit on track length?<\/h3><\/dt>\n<dd><p>Yes: 60 minutes per track. A longer track is not added to the player. When you\nare logged in you see a note in its place saying so; visitors see nothing\nthere. In a playlist the longer tracks are left out and the rest play.<\/p>\n\n<p>The reason is the visualizer. It needs a spectrum of the whole track, which\nyour browser builds from the decoded audio, and beyond an hour that is too\nmuch to ask of a browser. Split a longer mix into parts of up to 60 minutes.<\/p><\/dd>\n<dt id=\"how%20does%20the%20visualizer%20get%20its%20data%3F\"><h3>How does the visualizer get its data?<\/h3><\/dt>\n<dd><p>The first time you, logged in, add a track or open a page that has one, your\nbrowser analyses the track in the background and saves the result to\n    wp-content\/uploads\/glissando\/. You do not have to press play or do anything\nelse. Visitors then load that saved data, one minute at a time, as they listen.<\/p>\n\n<p>The saved data takes 190 KB to 1.5 MB per minute of audio. Players with more\nbars, or wider players, get more detail and so larger files; this is chosen\nautomatically.<\/p>\n\n<p>If a visitor reaches a track before you have opened its page, their browser\nanalyses it by itself when the track is 7 minutes or shorter. For longer\ntracks they see static bars until your first logged-in visit to that page.<\/p>\n\n<p>An audio file on another site only gets moving bars if that site allows other\nsites to read it (CORS). It always plays either way.<\/p><\/dd>\n<dt id=\"does%20it%20fit%20in%20a%20narrow%20sidebar%20column%3F\"><h3>Does it fit in a narrow sidebar column?<\/h3><\/dt>\n<dd><p>Yes. The player measures the column it is in, not the browser window, so it\nlays out the same in a 300px sidebar on a desktop as it does on a phone.<\/p><\/dd>\n<dt id=\"can%20visitors%20download%20the%20track%3F\"><h3>Can visitors download the track?<\/h3><\/dt>\n<dd><p>If you turn the download button on. You can label it, show it as an icon, text\nor both, offer a second file alongside it, and show how many times each track\nhas been downloaded.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New audio engine: smoother playback and seeking, especially on Safari and iPhone.<\/li>\n<li>Visualizer stays in sync with the track and uses less CPU.<\/li>\n<li>Visualizer data is prepared automatically, no setup needed.<\/li>\n<li>Bars keep their height at any volume.<\/li>\n<li>Tracks can be up to 60 minutes long.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Performance: the visualizer now animates only while its player is playing and on screen. Paused and idle players no longer redraw in the background.<\/li>\n<li>Performance: displays faster than 60 Hz draw the visualizer on every second refresh.<\/li>\n<li>All players on a page now share one audio engine instead of opening one each.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>The plugin icon now shows on the Plugins and Dashboard - Updates screens instead of a placeholder.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>The actions button no longer appears when both downloads and share are off - it used to open an empty bubble.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Narrow columns: the volume slider now hides by column width, not viewport width, so the actions button stops wrapping to a second line in a narrow Elementor column.<\/li>\n<li>Radial preset: download\/share collapse behind the actions button like every other preset, so nothing spills outside the card at small sizes.<\/li>\n<li>Radial preset: artwork vertical position slider now applies (and shows up in the Elementor widget).<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>First release on WordPress.org.<\/li>\n<\/ul>","raw_excerpt":"Glass-style audio player with animated visualizer. Gutenberg block, Elementor widget and shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357196"}],"author":[{"embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tomsgl"}],"wp:attachment":[{"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357196"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357196"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357196"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357196"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357196"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tzm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}