Guest User

Untitled

a guest
Jul 20th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.26 KB | None | 0 0
  1. MAJOR REMAINING FEATURES:
  2. - distortion? (how would it affect polyphonic channels?)
  3. - bar box selection
  4. - PWA, web app for home screen. (is there a requirement for a service worker?)
  5. - audio worklet thread
  6. - live input when song is paused
  7. - live keyboard performance. (make sure piano can play while song is paused?)
  8. - MIDI live input, live output?
  9. - "inspire me" random song generator.
  10. - link shortener
  11. - embedded player
  12. - remember recent songs
  13. - export mp3/ogg and audio buffer
  14. - tutorial + music theory primer
  15. - playlist editor
  16. - translation
  17.  
  18.  
  19. TODO:
  20. - Why do prompts sometimes not go away until you move the mouse after importing a song? hmm maybe the problem is the delay between the user action and the navigation action crosses some safety threshold...
  21. - Maybe support older versions by detecting if the incoming link is version #6 and adding /2.3/ to the url via history.setState(), and otherwise adding /3.0/ via setState. If the loaded page is not the most recent version, there'll be a notice and button at the top to upgrade to the latest version. If I want to improve a branched version 2.3 I can call it 2.3.1 while preserving the URL.
  22. - Song settings icons: piano keys for scale, tuning fork for key, metronome for tempo, isometric cube-shaped empty room with tiny door/windows on walls and thicker border emphasizing the floor for reverb, classic eighth or sixteenth note triplet symbol for rhythm. for the reverb cube, use 3 point perspective, use thin lines for the corners, use more foreshortening on the floor than the ceiling to show the camera is near the floor, make the floor solid color, add vaulted arch ceiling? honestly I don't have much fidelity to work with...
  23. - Export prompt wav file export should tell the synth what sample rate to use instead of assuming 44100. const sampleRate: number = 44100; // synth.samplesPerSecond?
  24. - If the page loses and regains focus, re-read preferences and update the interface? In case another tab changed preferences.
  25. - Maybe make several tabs at the bottom for instructions, about, twitter, mastadon, etc, and save which tab was selected when reloading.
  26. - New pref: in paused mode, when editing a note, play it out loud.
  27. - Add some kind of warning if an error is thrown, it may prevent saving progress.
  28. - I don't like how BeepBox jumps into the loop if it was previously in a loop but the loop was moved to a later time and the left square bracket hasn't been pressed. at the very least, loading a new song should inhibit that behavior. Manually moving to a bar before the loop should inhibit it too, either with arrow keys or clicking (unlike square brackets which actually do what I want). maybe only trigger it if the loop was explicitly clicked to a later bar. (but not if undoing moved the loop?)
  29. - Make all colors controlled by CSS. Come up with themes.
  30. - Is there space between the instrument volume slider and label for a toggleable speaker/mute icon?
  31. - New file command: export channels as wavs. (Maybe this should just be a checkbox in the export dialog?)
  32. - If I paste a pattern with the wrong number of beats, (or too many beats?) just stretch it?
  33. - An edit option to push notes to the left or right some number of beats, creating new patterns as necessary for various combinations of old patterns. Or maybe just rotate all notes within a pattern, and let the author fix up the seams? Why not both! Also refactor ChangeBeatsPerBar a bit, pulling out a generic "note projection" function to be used by both.
  34. - The JSON export should include the scale flags, not just the name.
  35. - The piano key display accidental naming convention needs work. "C#" is a fine name for a minor scale but misnames F# as Gb, but the same key in major scale should be "Db" and the names of all the black keys should be flats instead of sharps.
  36. - The purple loop should have arrows at the ends to imply cyclical motion.
  37. - Get rid of flash code... after porting the embed player?
  38. - Rename compile scripts to make more sense.
  39. - built-in link shortener?
  40. - Feature-detect audio worklets, use toString() to get synth code (and FFT, Deque) for worklet, maybe use pooling for Note, Pattern, Channel, Instrument to deal with frequently regenerating song from string when user edits in main thread.
  41. - make the bot smarter. look at mentions, ignore "beepbox.co"... is it possible to drill down the redirects? maybe even parse the song and check if it has *any* notes? If the bot is good enough, use that instead of the search feature to display tweets on the front page. notify me about any questionable tweets? While we're at it, improve the home page twitter feed, maybe a new api or iframe is available now.
  42. - Live input tones should still play when song is paused.
  43. - Live input tones should handle slide mode better.
  44. - When viewing a 0 pattern bar, check if there is an unused (and unreferenced) pattern, and if so, get ready to use that one in the pattern editor, show the available scale pitch rows, and if the user adds a note, the change sequence should include settings the bar to use the pattern. If no pattern is available, leave the background black and display a note that more patterns can be added from the edit song size feature. (If a pattern has notes in it, but is unreferenced, should it be coopted? Maybe after all the empty patterns are used?)
  45. - recording performances via keyboard or even midi... If you record over an existing pattern, do you erase it? Does it depend on whether you actually perform any notes during that pattern? If you perform over a 0 pattern bar, does it automatically find the next blank pattern and start using it? Can it automatically extend the number of patterns? Why not allow that for normal 0 pattern editing? The black background in the pattern editor always kinda bugged me anyway. Maybe different channels can have different numbers of patterns!
  46. - Eventually, maybe even stop forcing the user to manually choose pattern counts, and just autopopulate patterns as needed. And also provide mobile-style context buttons above selected bar to facilitate sharing patterns across bars, sort of a paste-shared vs paste-unique, and selecting a range of bars, looping the selection over more bars... Basically making it easier to use on mobile and without needing to remember numbers.
  47. -Box selection: Computer mouse can drag box selection immediately. Fingers have to select first, then little drag circle at corner. After copying an NxM grid, you can paste the same NxM grid over another section starting with the top left corner at the current selection, or if you first make another box selection before pasting, it will fill in that box selection, tiling the original selection within it. Pasting in this manner only pastes patter numbers, not patterns, and the same numbers are available in all channels, so you can paste in any channel. Additionally, you can just type a number into a box selection to fill it, as lumitrap suggested.
  48. When you first click a bar, you get a light box around it, plus two rounded knobs at the top left and bottom right corners. Click or drag the knobs, and when you let go, you get onscreen mobile style context menus. Drags are generously interpreted as originating from the knobs even if you miss a little. On desktop, you can drag a fresh selection without using the tabs and the context menu shows up immediately.
  49. Still tempted by a method of repeating sections just by dragging from a box selection without copying and pasting, but let's not add too many verbs. Also, how will I deal with having multiple competing kinds of copy-paste?
  50. Also, what if you just want to make a bunch of unique patterns in a sequence? Well I guess that's where automatically populating "0" patterns fits in. How does it decide which number to select? I'm currently imagining several heuristics where it picks the first valid option that isn't already full of notes or otherwise used:
  51. 1. Take the same number as the box immediately above or below.
  52. 2. Or increment from immediately to the left, or decrement from immediately to the right.
  53. 3. Take the first available number that isn't assigned to any bar in this channel.
  54. If no pattern isn't already assigned, prevent editing and dim the background.
  55. - random song generator!?
  56. - remember recent songs in local shared object.
  57. - add a tutorial + music theory primer. exercise restraint choosing pitches, develop a rhythm first, explore intervals/pitch relationships. It would be cool to have mini beepbox editors with preloaded songs demonstrating concepts, with play, reset, clear, and "open in full editor" options. Mostly it would focus on the pattern editor, but may have one-off additions like a tempo slider to demonstrate tempo.
  58. - Oh shoot, if I hide the title options in the edit/prefs menus, mac chrome puts a checkmark next to the first displayed option instead, which confuses matters because I use checkmarks to indicate toggling prefs options. :(
  59. - Edit options to add or remove bars at the beginning of the song.
  60. - Edit options to remove specific channels.
  61. - Edit options for compacting and concatenating songs. I'm increasingly interested in the idea of allowing multiple songs, called sections, to be appended to each other. The song settings would apply to whichever section contains the currently selected pattern. But maybe this is just a hack, and it wouldn't make it any easier to gradually transition volume or tempo or stagger instrument changes. Being able to change reverb might be interesting. A more immediately plausible option is the ability to combine songs. I'm imagining a dialog box where you can paste in song urls and it concatenates the songs. you may need to select the beats per bar from a menu populated by the songs if they're not all the same, and the other songs would just get stretched? Use the validation/simplification to skip duplicate/unused patterns and also duplicate/unused instruments to avoid filling up all the slots quickly. Not sure how to handle different song keys, maybe a checkbox to transpose all songs to the first song's key.
  62. - asynchronous export. worker thread?
  63. - is it possible to get pitch slides and seamless transitions to detect notes across bars?
  64. - a way to pre-generate a javascript sound buffer.
  65. - in firefox, after selecting options, spacebar both reopens options and toggles play. Same problem with arrow keys, and even ctrl+brackets to change tabs. Apparently this is a known firefox bug. https://bugzilla.mozilla.org/show_bug.cgi?id=1019630
  66. - polyphonic fm midi export when there are multiple carriers. careful of overlapping note on/off events combined with slides...
  67. - It's probably okay if "parts" and "arpeggios" don't transition at exact sample boundaries, rather than fractional sample points. Maybe still keep beats aligned to sample boundaries, but you can have more precise BPM tempos by loosening up the alignment.
  68. - maybe command+S should do something useful?
  69. - wav export quality: CD (44100) vs Video (48000) standards, 1x, downsampled from 2x to 1x, downsampled from 4x to 2x. How does this affect FM feedback and noise volume?
  70. - Maybe support stereo delay effects in high quality mode.
  71. - maybe sum adjacent fm synth samples (at half volume) to cancel out inaudible feedback artifacts? for the carrier wave(s), try that integral thing to reduce the aliasing... or is that not really the problem here? (fortunately the integral of a sine wave is just an offset sinewave!) The FM feedback has been bugging me because it has a tendency to alternate between high and low values every other output sample. This is probably (?) inaudible, but is nevertheless an artifact. I could probably mitigate it by adding each FM sample to the previous sample before outputting (and cutting the volume in half to compensate). Does this help with more complicated structures? Note that this won't fix the audible FM aliasing, I'm not sure if there's anything besides super sampling that would fix that.
  72. - The parts of computeTone inside "if (pitches != null)" could actually be in the synth function instead! I guess bits that are shared between instrument types could be in helper functions.
  73. - divert www traffic to beepbox.co. Okay wow this is a lot more complicated than it ought to be... You can only get load balancing on most available web servers by using CNAME records to repeat the request with a different domain whose DNS records are managed by the web server provider, which will choose an appropriate IP address for your location. For naked domains, your dns records can only provide static hardcoded IP addresses, (assuming you don't rapidly manage the ip addresses yourself via the user interface!) which can be cycled to distribute the load but generally isn't smart enough to actually detect server availability. :/
  74. - export mp3 and ogg?
  75. - snap to tone edges from other channels, to help making NES style harmonies.
  76. - translation/localization
  77. - Bring beepbox and openscores coding styles closer together. See html functions, Synth-vs-SongPlayer
  78. - Improve naming/documentation/api so it's clear how replaceState and prospectiveChange would interact if used together. prospectiveChange is only used for keeping track of oldValue while dragging to determine if a recorded change ultimately isNoop() and should be commmitted. replaceState is used when a change is overwriting the previously committed change, like transposing notes. However, prospective change erases information about previously *committed* change, making it unclear if replaceState should be used. Additionally, if multiple inputs are setting prospectiveChange simultaneously, it's unclear what the correct oldValue is and thus whether either change isNoop(). (I considered just committing prospective changes when a competing input is used, but that could result in frequent, useless commits while dragging two inputs simultaneously.)
  79. - document synth api
  80.  
  81. EMBEDDED PLAYER:
  82. - put title in data format if provided. show "artist - title" in placeholder text. make sure it is sanitized for security. :)
  83. - maybe instead of squashing notes really tiny, consider scrolling them instead.
  84. - If you hold control or shift and click play, put "*" in storage instead, and allow anything to continue playing until it is replaced with a unique id again or manually paused.
  85. - It probably doesn't make sense to integrate licenses like creative commons into the data format: it would imply more authority than is actually possible. It is up to users to say how they want their songs to be used. However, there should be an option to disable the "Edit in BeepBox" link, which would turn on basic encryption.
  86. - Start generating the first few seconds of the song on hover, for fast response when clicking "play". Finish generating the entire song as a pcm track after clicking "play", and use that.
  87. - maybe add a download/export button? set default file title based on embedded title. (restricting character set appropriately)
  88. - support both flash and js embedded players?
  89. - should the author be able to set the default loop behavior?
  90. - under the file menu make a "share" button that displays a link that can be copied easily on mobile.
  91. - the embed player itself should have a share button, for social media. which should link to a full page player instead of the editor?
  92. - These icons at the bottom of the embed player should have tooltips.
  93. - maybe also make a full page song player, to link to from tweets when you don't want others to edit.
  94. - add "Share" or "HTML Embed" button under export? or "File" menu. Include "title" and "author" fields.
  95. - manifests to allow installing web app as mobile app. add note in instructions. add any new files to app.yaml
  96. - allow copying the url from the share menu, so the app version can hide the url bar.
  97. - sharing menu uses localSharedObject to remember your settings. same as editor volume?
  98. - should I make cards for twitter/facebook/slack/discord etc?
  99. - make sure bots ignore embed.html
  100.  
  101. PLAYLIST EDITOR:
  102. - button to add more songs to list extracted from urls
  103. - update embed player to show all songs
  104. - song rearranging
  105. - song loop count
  106. - song fade-in/out
  107. - example songs on the website. Mario overworld? Tetris is basically public domain...
  108. - when starting at a bar where all tones are at the end of the bar, go ahead and skip the beginning of the bar, up to maybe one beat before the first tone.
  109. - put songs in browser history before/after pasting new songs.
  110. - offsite album/playlist player, with scrolling notes. hashbang urls, bot indexable.
  111. - custom cover art, color schemes in playlists and embed player.
  112.  
  113. MAYBE:
  114. - Can I use WebRTC to enable real-time collaboration? (How would I handle parallel edits since I got rid of Change history? Maybe record inputs like a video game somehow and use rewinding?)
  115. - Social media cards? Sadly only Twitter seems to support embedded javascript in an iframe, and even at that I'd need a server able to handle song links without hashmarks.
  116. - Make a page with a recording of my voice explaining how sound works, along with some musical samples. Visualize the audio in several different ways, including timespace amplitude, timespace spectrogram, and frequency-synced amplitude to easily follow the shapes of semi-periodic waves. Make a script that checks the progress of the audio track and transitions between the visualizations as appropriate. Make a few non-live slides comparing different sounds and frequencies and showing how the periodic waves are composed out of sums of sine waves.
  117. - Should I add echo and/or flanger as a delay effect? Should Echo have feedback? Can you configure the echo delay length? (If no feedback, you could configure the delay length by changing how far into the future to write the samples.) Also flanger. Maybe just have one LFO controlling flanger, like how there's one LFO for vibrato. But maybe flanger's not worth it, especially when there's already the old chorus setting which is similar.
  118. - It should be possible to reselect the same scale/rhythm to force notes onto it? Or just go to expert and back.
  119. - when importing json, console.log stuff that doesn't parse correctly?
  120. - Custom scale designer. There are six rows, one for each role (e.g. second, third, seventh... excluding root which is required), with checkboxes to enable each. Next to the checkbox is a menu to choose whether the role is "high second", "low second" or both. The options for the third are "major third :)" and "minor third :(" or both. The fifth has no menu, and the options for the fourth are "fourth", "tritone D:", and both. Maybe instead of checkboxes just have "none" or "off" in the menu. There's a visualization of the scale as pitches, to the right of the menus, sharing the same rows. You can also click the pitches on the scale to toggle them, and the checkboxes and menu update accordingly. There's also a visualization of the available major and minor chords with roman numerals, a column for each available chord highlighting the associate pitches. There's also a circular visualization of the circle of fifths, also with highlighted keys at the roots of chords, color-coded the same as the roman numeral visualization. Ooh, and a button to rotate through the available "modes" of the scale. And a menu at the top to use an existing scale as a template.
  121. - maybe noise waves should be a separate property from chip waves?
  122. - Record the "type" of channels (separately from instruments). Can be pitch or drum. Use instead of getChannelIsDrum. When exporting base64, write the pitch channels first even if they were somehow rearranged, but JSON could theoretically have channels in any order.
  123. - maybe drums can have their own phase modulation mode, with different fractions for frequency? can modulator pitches bend at different rates? maybe the "envelopes" are basically the same except instead of controlling modulation they control pitch?
  124. - can I improve the interaction for volume envelope dragging and pitch dragging? illustrate volume envelope dragging to make it less confusing.
  125. - I could parse the algorithm name, pull out the arrows and parens, rotate them 90 degrees and put them between the numbers. That's... diabolical. Wait that doesn't work for a single example: 1<3 2<4 because the numbers are out of order! >:( (What about feedback arrows?)
  126. - Maybe add a "release" envelope that decays carrier volume until the next note starts and cuts it off? Or is that redundant since you can do the same thing with envelope editing? (could it extend into the next bar? for 0 pattern bars, use same instrument as previous bar?) Also on "0" pattern bars, use the previous instrument in that channel to continue the fade out.
  127. - Guitar distortion applying to some channels? new song setting: distortion, nonlinear mixing of channels... can't handle a range of volumes?
  128. - on mobile, should move the new/edit/prefs/export/import etc buttons to the bottom, just above beepbox 2.X, but keep the play/volume controls between the track editor and the song/instrument settings.
  129. - If adding new note and mouse drags at least two beats closer to start than previous max, then enter precise mode where you can have any length. If flipping to backwards or <= doc.parts, reset out of precise mode.
  130. - make some button to bookmark the song in your browser
  131. - Get in touch with ludum dare about linking to beepbox: http://www.ludumdare.com/compo/tools/
  132. - get in touch with http://youcanmakevideogames.com/resources/music
  133. - multitouch?
  134. - replace piano/drums canvas with svg
  135. - illustrate arpeggio texture on tones with multiple notes, striped fill
  136. - on linux chrome, select drop downs use same background color as select element, it's a bit too bright when focused.
  137. - export fade in/out checkboxes
  138. - per-pattern drop down menu for instrument selection, prepopulated with common ones.
  139. - circle of fifths display
  140. - Dim the column occupied by a tone to communicate mono voice?
  141. - visual feedback when a note is played
  142. - when on the same pitch as a tone in an adjacent part, and you're really close to it, and you drag horizontally, go ahead and drag that adjacent tone instead of creating a new one.
  143. - options for timing offset
  144. - phoneme filter option, imitate vowels and voiced consonants with IIR filters, fall back on noise channel for S, T, CH, SH, etc.
  145. - a facebook app to put songs in your profile
  146. - preload some common tone shapes into the recentShape list. increment format number.
  147. - Make a bunch of asserts, that the tones don't overlap, that the pins have the same duration as the tones, that the pins are in order, etc. And trace out the arguments to every change constructor and maybe even trace out the entire bar document data after every step.
Add Comment
Please, Sign In to add comment