- Improved “Add Track” in band editor with a dropdown menu instead of a modal.
- Palettes now require purchasing Hookpad. Each palette has a preview of 90 seconds.
- For projects with a shareable URL, “save as” now properly resets the File menu to say “File -> create sharable URL” as new projects by default don’t have a public URL.
- Fixed bug introduced in 2.9.3 that made Hookpad think projects had unsaved changes when they didn’t. Thank you @HertzDevil.
- Fixed entry mode app setting not persisting across sessions. Thx @HertzDevil.
- Improved settings experience across sessions and across save/load. As suggested by @HertzDevil, settings have been separated into two categories: project settings and app settings. Project settings are all things that affect the visual appearance of a score, e.g., color scheme, expanded note staff. App settings are all things that affect how notes/chords are entered and the configuration of the app itself, e.g., smart octave, entry mode. With this release, app settings now persist across sessions. Every time you open Hookpad on the same machine, app settings will be as you left them. In addition, app settings are not altered when a project is loaded. Project settings are saved and loaded with projects; the visual appearance of a project is the same when it is loaded as when it was saved.
- New buttons for edit operations. Easy access buttons for delete, undo, redo, cut, copy, and paste can now be added to the control bar (the row of circle buttons) in settings/preferences. This is an app setting (see above) and will persist across sessions. They are hidden by default. I find these very useful on touch devices. The control bar unfortunately gets a bit crowed when they are they are visible, tho, at least on smaller screens. If anyone has suggestions for improving this, let me know.
- Smaller zoom controls To make room for the edit control buttons, I tightened up the zoom controls which took up valuable horizontal space. The “reset” action now happens when you click the label when in a zoomed state. The label will be blue in this state.
- Temporarily disabled settings for show note staff and show chord staff introduced in 2.9.0. These settings can cause a crash in some situations as reported by @HertzDevil. Fix coming soon.
Remember that you may need to relaunch your browser or do a hard reload of the app webpage (shift + refresh button) to get the latest version of Hookpad. This is since the 2.8.0 release where Hookpad became a progressive web app that gets cached for offline use.
- Fixed a bug introduced in 2.9.0 that broke mp3 export when normalization was off.
- Fixed lyrics bug introduced in 2.9.0. You could type lyrics but they weren’t showing up in the melody staff.
- Clicking on a selected note/chord sounds the chord. This is the standard behavior but in 2.9.0 it was accidentally removed.
- Fixed issue with note/chord GUI not switching when clicking the drag region of a note or chord. This bug was introduced in 2.9.0
- Five New Chord Palettes: Magic, Popular, Search, Progressions, and Bass Sets
- Magic Palette Now magic chord can stay open in the background to provide chord suggestions that automatically update in real-time based on the chords at your cursor location. We’ve also added “scores” to each chord from 1 to 100 to give you a sense for how often each suggested chord is used in this context in real music.
- Popular Palette It turns out that out of the hundreds of thousands of chords, the vast majority of music is written with just a handful of chords. So we thought, why not have a palette with the most common chords available as a persistent UI! The new “Popular” palette is your personal roadmap to all of the most important chords in each scale.
- Search Palette The search palette lets you add chords by typing their name (C, Dm, Ebm7, C/G). Hookpad will show you how your chord relates to the current key. You can also type relative names (I, IV64, iv7, 37, lyd47) as a handy shortcut to using the chord options UI. Search is fast and easy to use.
- Progressions Palette If you’re looking for a quick way to start with chords, we’ve added a list of common progressions in each scale. Click on a progression to add it to your project. We will probably expand on this in the future.
- Bass Sets Palette Now Bass Sets can stay open in the background to let you choose from the most popular chords built on a given bass note. Being mindful of a chord’s bass is an important part of writing great progressions. Also, don’t forget that chords that share a bass are often good substitutes for each other!
New Note GUI
- The note buttons are larger for easier clicking
- A chromatic toggle has been added that expands the Note GUI to include buttons for the out-of scale notes.
- The notes that are in the chord at cursor now have a blue dot underneath
- When using keyboard shortcuts (1-7) for note entry, the up/down arrow keys now force the added note to be above/below the previous note.
- Show / Hide Note Staff or Chord Staff Preference options have been added to allow you to hide either staff while composing.
- Chord properties, e.g., type, inversion, etc. have been moved to a chord inspector on the right side of the app. Also a “reset” button has been added to the chord GUI and the chord inspector to quickly restore the default state.
Mouse selection now happens on mouse down; previously selection was on mouse up. This change makes Hookpad feel more responsive. This pattern is also used by most other apps
New compressor module: A new compressor module is added to the audio chain just before the audio destination. The compressor is bypassed by default. You can access the compressor by clicking the mixer icon or by using the
ushortcut. The compressor control is a single slider that simultaneously increases input gain and increases the compression ratio. The current gain reduction is shown in the meter to the right of the compressor slider. Demo songs have been updated to use compression.
Export normalization: Added the ability to normalize mp3 exports. This feature is off by default. When normalization is off, the level of the audio file will match the level of the audio outputted by Hookpad, except in the instance of clipping, where the volume will be reduced globally to prevent clipping. When normalization is on, the over all level of the file will be increased as much as possible without clipping.
Added .WAV export
- Absolute labels, e.g., C, dm now properly resize for chords of short durations so they don’t overlap each other.
- Fixed recording bug where playback would not sound after the first entered note.
- Recording “count in” now sounds whether or not the click/metronome is disabled.
- Fixed issue where more than 6 instances of TheoryTabs on a page would crash in iOS Safari.
- Fixed issue causing examples in blog posts to play the wrong external sound file.
- Fixed issue where band gui was incorrectly showing some cached instruments as uncached
- Added Google Sign In option
- Renamed “volume” control to “mixer” and replaced the icon with a mixer / EQ icon.
- Added hide button to the right side of the band editor
- Fixed bug causing mp3 export to sometimes add a random amount of dead space at the beginning of the track
- Fixed audio sync issues with playback that would occasionally happen on the first playback after starting app.
Under The Hood
- Preparing Hookpad for allowing the note staff to be hidden
- Preparing Hookpad for allowing the chord staff to be hidden
- Update to Hookpad audio compressor module
- Updated band icon to silhouette of drum kit and guitar.
- Updated play button color to orange to make it immediately obvious
- Updated play button to show caching progress of sound assets. This was previously on the band icon but it makes more sense on the play button since it directly affects what you hear during playback.
- Updated help text in the blank state to show the keyboard shortcuts for changing duration
- Removed some text from the Hooktheory Book Series ad that shows up in the free version of Hookpad
- Fixed issue with lyrics not properly wrapping to the next line when notes extended across multiple lines
- Fixed bug with Hookpad Player crashing when there were lyrics by resolving race conditions of syllabicator init and loading the song which could cause lyrics to be parsed before syllabicator was initialized. Used cool zip() RxJs operator.
- Fixed bug with Hookpad Player not going back to the start of the song after playback completed in some cases
Under The Hood
- Implemented a “lean instrument cache” option in the Hookpad Player that only downloads and processes sounds that are required for the performance.
- Added ability to sync a mp3 file with the Hookpad performance (this feature is not public)
- Refactored PitchPlayer cache progress callback to broadcast events using postMessage API. A stream listens for each message and maps it to the action that updates the cache progress in the state. This allows multiple Hookpad Player instances on a single page to be aware of caching events on the single PitchPlayer instance
- Improved volume menu with volume, solo, mute, and level indicators for each track
- Modals for features that require purchasing hookpad now have a “refresh privileges” link that can be used to update Hookpad with purchase info following a purchase.
- Fixed a bug causing half-diminished 7th chords to have incorrect fret mappings in guitar instruments
Smart instrument caching Once you download an instrument it will be cached, and when you visit the site in the future it won’t need to be re-downloaded. This saves on bandwidth and load times and makes Hookpad feel generally more snappy.
Hookpad now works offline! Open (https://www.hooktheory.com/hookpad/app) in your browser even when you don’t have an internet connection. Assuming you’ve been to the page before, it will work (instruments you’ve used in the past will be available for use, etc.). How does this work? It’s based on a new technology from called Progressive Web Apps that represents the next generation of web technology.
Hookpad can now be installed To install Hookpad on macOS or Windows, open Hookpad in Google Chrome (this does require Chrome), click on the options icon in the top right of the browser window (three vertical dots) and you will see “Install Hookpad”. After it is installed it will appear as an app on your computer (you can put it in your dock/task bar, and it will open in it’s own window).
The band editor now shows the download progress of each instrument and the overall download progress at the bottom.
The band editor now shows if any sound patches fail to load. Below “Bright Pad” and “Dark Bass” failed to load. Clicking the yellow warning icon attempts to load all failed sound patches.
The Band Editor toggle now has a progress bar whenever instruments are being loaded or decoded
Preferences and MIDI Preferences are first-class menu bar items again. They are still also accessible from the Hookpad menu.
A new delete/backspace button has been added to the row of circle buttons (far right). The delete button can be used to delete any selection or delete the note / chord immediately to the left of the cursor.
Removed the entry mode toggle circle button. Changing from the default Hookpad 2.x entry mode to the Hookpad 1.x text-based mode is still possible in the preferences menu as well as with the keyboard shortcut ‘m’.
- Clicking magic chord or bass set with more than one chord selected shows a message saying that these features don’t work on multiple chords - this used to crash Hookpad.
- Fixed issue with notes in melody not playing after a recording session.
Under The Hood
- File -> Open now uses more performant API endpoint to fetch list of projects
- Preview Mode allows you to turn off note input and play music using the Hookpad engine using the band you’ve set up. Type 1-7 on the keyboard, play a connected MIDI controller, or click the buttons in the chord / note palette to hear a preview. The preview mode toggle is in the row of circular buttons , it has an eye icon.
- The Duration of Recorded Notes/Chords is Now Controlled By How Long You Hold Down The Key
- Recording Now Starts Immediately After Hitting The Record Button
- Keyboard Shortcut ‘r’ Lets You Access Recording Quicker
- The Record Button Now Turns Red
- Pro Tip: Use Wired Headphones or Speakers When Recording
- Updated a serializer used for memoization that caused some chords to redraw incorrectly as reported by @NecroToad in this thread Hookpad placing a v7 instead of a VII
- Fixed midi melody import (bug introduced in 2.6.0 release)
- Fixed magic chord options not redrawing after the first magic chord (bug introduced in 2.6.0 release)
- Fixed magic bass chord options not redrawing when bass scale degree is changed (bug introduced in 2.6.0 release)
- Fixed Hookpad Player bug that could cause hang / crash when zooming in so far that a single measure doesn’t fit on a line.
- 15 new electronic instruments and effects (complete list below)
- New “quick preview” option for magic chord and bass collection previews. The original full preview option with melody is still available.
- 2.5X more responsive (see performance benchmarks below)
- 20% faster app launch. Shaved 20% from the gzipped app bundle, (765 KB now vs 945 KB before).
- Playback stop now allows samples to play their release tails
- Changed several menus to make them consistent with native applications
- Settings top-level menu moved to Hookpad → Settings
- MIDI top-level menu moved to Hookpad → Midi Settings
- Hookpad → About Hookpad now shows version info and has a link to the release notes.
- Electric Piano (smart and legato)
- Electric Piano Dark (smart and legato)
- Dark Lead (smart and legato)
- Drop 1-bar
- Drop 2-bar
- Rise 1-bar
- Rise 2-bar
- Electric Piano
- Dark Piano
- Syncopation Pad
- Brassopad Offbeaat 1/8s
- Supersaw Pad
- Supersaw Pumping Pad
- Metal guitar Rock 1/8s 2
- Metal guitar Rock 1/8s 3
- Metal guitar Backbeat 1/8s
- Metal Guitar Gallops
- Metal Guitar Gallops 2
- Metal Guitar Open 1/16s
- Metal Guitar Muted 1/16s
- Deep Winds
- Dark Bass
- Acid Bass
- Acid Pluck
- Bowed String Bass Deep
- Supersaw Bass
- Alternating Thumb Bass
- Fixed issue with line breaks not deleting properly when in the middle of a selection or when deleting measures would result in a break happening on the first beat.
- Fixed pause button for magic chord auditions and bass collection auditions.
- Fixed bug causing pops on when entering notes and chords in Firefox
- Hookpad player now correctly lays out scores with pickup measures
Hardware and software configuration for performance benchmarks:
- MacBook Pro (Retina, 13-inch, Late 2013)
- 2.6 GHz Intel Core i5
- 16 GB 1600 MHz DDR3
- macOS 10.14.6 (Mojave)
- Browser: Chrome 76
- Hookpad is loaded with Arcade Madness (demo song) at global zoom of 50% and horizontal zoom of 58% to provide a challenging use case.
- All comparisons use Chrome performance profiler for benchmarking. Hookpad 2.6 is compared to Hookpad 2.5
- Absolute performance data is likely better than shown below because of overhead with the profiler in Chrome.
3.1x Faster Drag-Selection (12.5 FPS vs. 4 FPS)
To perform this test, I drag-selected a melody and chord region in Arcade Madness and recorded frames per second (FPS) in chrome profiler
4.5x Faster Note Adding (29 notes per second vs. 6.7 notes per second)
To perform this test I held down the “1” key for five seconds to enter notes in rapid succession. macOS has a “Key Repeat” setting in System Preferences that I set to “Fast” to push Hookpad as much as possible.
- In Hookpad 2.6.0, 158 notes are processed in real time over five seconds while holding down the “1” key.
- In Hookpad 2.5.0, 152 notes are entered, but it takes 22.6 seconds to process the 5-second key-press event: 5 seconds while holding the “1” key plus 17.6 seconds of processing / painting after releasing the “1” key.
2.6X faster note editing (100 ms vs. 260 ms)
To perform this test a selected note was shifted by a scale degree with the up key.
- MIDI melody import! To use: File → Import Midi Melody
- Copy & paste between projects! To use: copy any selection like normal then Edit → “Paste From Clipboard”
- File → “Open from TheoryTab Library” opens a dialog that describes how to copy and paste melody or chord clips from the TheoryTab library into your project
- Fixed bug with lyrics (RM fill in more detail here)