Well, the layout of music trackers reminds me lot of spreadsheet processor's layout so I just thought, why not let the salarymen in offices do some music when they work with that expensive commercial Microsoft Excel? That Office's price and piracy protection is too damn high to be used just as an office suite. That's why my school and I have switched to OpenOffice, now LibreOffice.
Only thing it would need is some sort of macro or an extension that identifies the data in those .xls(x) files and writes it to audio buffer. Also a good sound outputting device would be handy, not those crappy speakers built in monitors (seriously why the fuck HDMI and DP bother with this, it only confuses my PC), yet the PC Speaker, if still present, will maybe do with PWM as it's not considered a normal sound device with a buffer by Windows NT. But 2.25" actual speakers are rare and piezo beepers can only beep.
Optionally, there might be implemented tracing by selecting the current row each GUI update and eventually jumping to current list with the playing pattern. Even visualization could be done by changing colors of some cells. Not sure if those Craperons and SumPr0ns could handle it. Anything with less than 4 threads should be given away for free, as it's essentially useless. 2-cores should be dead anyway, 4 make a square die. New series like Intel Niggore or AMD Fullen should encompass those 2C/4T and 3C/3T trash CPUs for the price of around $10 (essentially the packaging and shipping), so DIY-ists wouldn't fear breaking them. Anything lesser goes to charities. Pentiums should be penta-cores to come to their name again. Heptiums could come too.
Each thing has it's own name first, then comes a number. Samples need to be mapped to numbers in samplelist, pattern needs to be referred by name (which can be number anyway) in the orderlist. You can't mismatch the types and the fact that they share the same space in the spreadsheet makes it impossible to have patterns named after a sample, orderlist, songinfo, samplelist and vice versa.
I have finally (26.03.2017) found some relevant articles about DAW in spreadsheet procesors:
https://www.engadget.com/2012/01/11/a-spreadsheet-based-music-tracker-get-ready-to-rock-your-accoun/
https://thomaslevine.com/!/sheetmusic/
http://www.projectbarbq.com/bbq05/bbq05r8.htm
Song properties:
There are various keywords that indicate which value it actually is not to turn this page into a matrix of some numbers. Those can be named in any order. If no description of those would be found in column A nor B or C, the default order would be assumed.
From this tab the song is played. There can be more of these to provide different songs with the same samples. It's recommended to name this list the same name as the song name.
If you want the patterns to load before samples, exchange the Samples and Samplelist fields with Orders and Orderlist. It'll figure out.
| A | B |
--+-------------+-----------------------------------------------+
1|Name |Wonderful Music Module |
--+-------------+-----------------------------------------------+
2|Instructions |MOD/S3M/XM/IT/MPT/RNS |
--+-------------+-----------------------------------------------+
3|Compatibility|0/1 (fuck true and false) |
--+-------------+-----------------------------------------------+
4|Samples |666 (rows in samplelist to read, up to 65535) |
--+-------------+-----------------------------------------------+
5|Samplelist |Soundzz (name of the list) |
--+-------------+-----------------------------------------------+
6|Tempo |125 (all decimal) |
--+-------------+-----------------------------------------------+
7|Speed |6 (max 31 (MOD/XM) or 255 (IT/S3M)) |
--+-------------+-----------------------------------------------+
8|GlobalVolume |64 (max 255, not in MOD/S3M) |
--+-------------+-----------------------------------------------+
9|SampleVolume |64 (max 255) |
--+-------------+-----------------------------------------------+
10|LoopStart |01 (order #, not pattern) |
--+-------------+-----------------------------------------------+
11|Orders |32 (amount to read) |
--+-------------+-----------------------------------------------+
12|Orderlist |Sequenzz (name of the list) |
--+-------------+-----------------------------------------------+
13|Comments |This is my 1st song. I know it suck but still |
--+-------------+-----------------------------------------------+
14| |I'm gonna release it because I'm just stupid. |
--+-------------+-----------------------------------------------+
15| |Thanks for listening! Peace out! |
--+-------------+-----------------------------------------------+
Behavior at sequence end can be specified. Add an "AfterEnd" field and input Halt/Stop, Jump, Loop, or Next. Jump allows Bxx, and Cxx/Dxx command to take effect in final patterns.
If the value is Jump or Loop, a loop count can be specified in "Loops" field from 0 to 65535.
For playing hidden songs, add line "OrderOffset" at the end and input the length (in orders, of course) of the unhidden song.
"LinearSlide" Boolean value can be specified to facilitate making portamentos. Incompatible with Instructions MOD or S3M and Compatibility on.
"Precission" controls the mixer and resampler depth. Values are the same as by samples, that means 1~256, H/16F, S/32F, D/64F, Q/128F, O/256F.
"Mixrate" controls mixer output sample frequency. It can be from 1 to whatever fits the cell as integer. If it isn't supported by your soundcard, an error could occur if it can't resample. Default is the rate set in the Control Panel, usually 16/44.1.
"GUIUpdate" specifies how many times per second is the playing cursor refreshed. Up to 65535, or it could freeze your PC. Best at the duration of 1 row or screen refresh rate. Default is 60.
"OutputFile" specifies the export path. The default directory is that of the source file. The sound is not played to speakers.
Overflow input is handled by capping, that is substituting with highest possible value. Illegal input is ignored, if some value is required, it'll be a zero.
Samplelist:
It's sole function is to map tabs with samples to numbers used in patterns. Also it can override parameters (could be typed in the 1st row of the sample list (not samplelist), but it's way better to have everything human-readable in 1 place) and set paths, either to a file somewhere (even on the Internet) or just name a sheet with that sample data. "/sine", "/square", "/saw", "/revsaw", "/triangle", "/noise", "/brown"/"/red", "/pink" "/green" "/blue" "/purple" "/white", "/gray"/"/grey", "/black" and "/silence" are reserved for generators. A formula for intergrated Goniometric synthesizer shall be accepted too.
Sample:
This is the only number matrix you are going to be faced if you choose to embed samples in the file. There are no instruments because they suck. but if you really want, you can specify path in samplelist to an .XI or .ITI file. We're not making a complex module that is over 10 MB, remember salarymen have slow Pentiums and not i5s. Unless you're making an overeffected VST-plugin-centered EDM, you won't need them. Remember, this is still only a spreadsheet processor running a script, not a tracker or even a DAW.
These are only raw data. Bit depth, channels #, loop points, tune, volume and panning has to be specified in the samplelist. Numbers in cells can range to more than the actual maximum value and represent more than 1 sample (even parts, but not coherent to edit) if lesser amount of bits is specified. This can't be done with floating point ones as it produces noise.
Supported precisions are half (H or 16F), single (S or 32F), double (D or 64F), quad (Q or 128F) and octuple (O or 256F).
Supported sample rates are from 1 to whatever can fit the cell as an integer. Internally, those numbers are processed with optional precission in the main song infolist.
Each row represents a stream for 1 channel. Direct PCM stream is allowed only with even cell separation and is specified in the samplelist as everything else is.
| A | B | C | D |
-+-------------------
1| | | | |
-+--------------------
2| | | | |
-+------------------
Orderlist:
1 empty order - skip
2 or more empty orders - loop or end or next sequence
more patterns at the same time allowed
multiple or hidden songs possible
| A | B |
-+-----------+---------+
1|Intro | |
-+-----------+---------+
2|Intro2 | |
-+-----------+---------+
3| | |
-+-----------+---------+
4|Theme1 |Beat |
-+-----------+---------+
5|Theme2 |Beat |
-+-----------+---------+
6|BothThemes |Beat |
-+-----------+---------+
7|Build-Up |BeatRoll |
-+-----------+---------+
8| | |
-+-----------+---------+
9|Chorus |Blastoff |
-+-----------+---------+
Random-ass pattern:
The only limit is the list size. In old Excels it was 65536 rows and 256 colums, therefore 51 channels by standard columnization from Impulse Tracker. But there hasn't to be every column in each channel. You can have only Note and Instrument one and fit up to 85 channels. The channels are only separated by blank cells. You can have a large mess in it if you separate by always 1 and don't align it under each one.
Misread should not occur if you use Instrument before the note. Also continuing effects should work the way in the example table. If it reads 1 character, the effect is continued with previous parameter, and if it reads 2, the parameter is changed. Zeroes or nulls can be forced by dots. If there is no previous parameter, yet an effect with memory on x00 is called, nothing is done. The memory is not shared by default.
- or # denotes it's a note
number means instrument
lowercase letter denotes volume column command
uppercase letter means it's effect column command
if it's under some cell, empty spaces get filled with the character above so don't continue effects somewhere else
| A | B | C | D |E| F | G | H | I |J|
--+---+---+---+---+-+---+---+---+---+-+----------------------
00|C-5| 02|o01|X00| |A-3| 01|p64|H13| |
--+---+---+---+---+-+---+---+---+---+-+----------------------
01|G# | | 02| FF| | | |e01|H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
02|F | | 03| 00| | | |e |H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
03|A# | | 02| FF| | | |e |H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
Conclusion:
This is for the sole purpose of proofing the concept that music can be fed into normal tables and printed out for playing live. Not all people can read notes in realtime and I'm 1 of them. Also the notation is limited to approximate values and ideas about effects like fading, portamento, tremolo, vibrato, tempo slide and so on. It isn't meant to be an exact sequence, therefore introducing slight misinterpretations at conductor's will and contemporary tuning. Those were the times when the A was only 432 Hz, now it's 442 (Hollywood movies) or 440 (almost everyone else) and if humans continue, music will be ultrasound by year 5000. The only misinterpretations in playing modules are the mixing methods and tempo inaccuracy way smaller than mechanical metronome.
If someone feels like it, they shall write the macro or the extension and prove that Excel doesn't have to be just a shitty bloated spreadsheet processor with more code responsible for piracy protection and user identification than the actual spreadsheet processing features.
Only thing it would need is some sort of macro or an extension that identifies the data in those .xls(x) files and writes it to audio buffer. Also a good sound outputting device would be handy, not those crappy speakers built in monitors (seriously why the fuck HDMI and DP bother with this, it only confuses my PC), yet the PC Speaker, if still present, will maybe do with PWM as it's not considered a normal sound device with a buffer by Windows NT. But 2.25" actual speakers are rare and piezo beepers can only beep.
Optionally, there might be implemented tracing by selecting the current row each GUI update and eventually jumping to current list with the playing pattern. Even visualization could be done by changing colors of some cells. Not sure if those Craperons and SumPr0ns could handle it. Anything with less than 4 threads should be given away for free, as it's essentially useless. 2-cores should be dead anyway, 4 make a square die. New series like Intel Niggore or AMD Fullen should encompass those 2C/4T and 3C/3T trash CPUs for the price of around $10 (essentially the packaging and shipping), so DIY-ists wouldn't fear breaking them. Anything lesser goes to charities. Pentiums should be penta-cores to come to their name again. Heptiums could come too.
Each thing has it's own name first, then comes a number. Samples need to be mapped to numbers in samplelist, pattern needs to be referred by name (which can be number anyway) in the orderlist. You can't mismatch the types and the fact that they share the same space in the spreadsheet makes it impossible to have patterns named after a sample, orderlist, songinfo, samplelist and vice versa.
I have finally (26.03.2017) found some relevant articles about DAW in spreadsheet procesors:
https://www.engadget.com/2012/01/11/a-spreadsheet-based-music-tracker-get-ready-to-rock-your-accoun/
https://thomaslevine.com/!/sheetmusic/
http://www.projectbarbq.com/bbq05/bbq05r8.htm
Song properties:
There are various keywords that indicate which value it actually is not to turn this page into a matrix of some numbers. Those can be named in any order. If no description of those would be found in column A nor B or C, the default order would be assumed.
From this tab the song is played. There can be more of these to provide different songs with the same samples. It's recommended to name this list the same name as the song name.
If you want the patterns to load before samples, exchange the Samples and Samplelist fields with Orders and Orderlist. It'll figure out.
| A | B |
--+-------------+-----------------------------------------------+
1|Name |Wonderful Music Module |
--+-------------+-----------------------------------------------+
2|Instructions |MOD/S3M/XM/IT/MPT/RNS |
--+-------------+-----------------------------------------------+
3|Compatibility|0/1 (fuck true and false) |
--+-------------+-----------------------------------------------+
4|Samples |666 (rows in samplelist to read, up to 65535) |
--+-------------+-----------------------------------------------+
5|Samplelist |Soundzz (name of the list) |
--+-------------+-----------------------------------------------+
6|Tempo |125 (all decimal) |
--+-------------+-----------------------------------------------+
7|Speed |6 (max 31 (MOD/XM) or 255 (IT/S3M)) |
--+-------------+-----------------------------------------------+
8|GlobalVolume |64 (max 255, not in MOD/S3M) |
--+-------------+-----------------------------------------------+
9|SampleVolume |64 (max 255) |
--+-------------+-----------------------------------------------+
10|LoopStart |01 (order #, not pattern) |
--+-------------+-----------------------------------------------+
11|Orders |32 (amount to read) |
--+-------------+-----------------------------------------------+
12|Orderlist |Sequenzz (name of the list) |
--+-------------+-----------------------------------------------+
13|Comments |This is my 1st song. I know it suck but still |
--+-------------+-----------------------------------------------+
14| |I'm gonna release it because I'm just stupid. |
--+-------------+-----------------------------------------------+
15| |Thanks for listening! Peace out! |
--+-------------+-----------------------------------------------+
Behavior at sequence end can be specified. Add an "AfterEnd" field and input Halt/Stop, Jump, Loop, or Next. Jump allows Bxx, and Cxx/Dxx command to take effect in final patterns.
If the value is Jump or Loop, a loop count can be specified in "Loops" field from 0 to 65535.
For playing hidden songs, add line "OrderOffset" at the end and input the length (in orders, of course) of the unhidden song.
"LinearSlide" Boolean value can be specified to facilitate making portamentos. Incompatible with Instructions MOD or S3M and Compatibility on.
"Precission" controls the mixer and resampler depth. Values are the same as by samples, that means 1~256, H/16F, S/32F, D/64F, Q/128F, O/256F.
"Mixrate" controls mixer output sample frequency. It can be from 1 to whatever fits the cell as integer. If it isn't supported by your soundcard, an error could occur if it can't resample. Default is the rate set in the Control Panel, usually 16/44.1.
"GUIUpdate" specifies how many times per second is the playing cursor refreshed. Up to 65535, or it could freeze your PC. Best at the duration of 1 row or screen refresh rate. Default is 60.
"OutputFile" specifies the export path. The default directory is that of the source file. The sound is not played to speakers.
Overflow input is handled by capping, that is substituting with highest possible value. Illegal input is ignored, if some value is required, it'll be a zero.
Samplelist:
It's sole function is to map tabs with samples to numbers used in patterns. Also it can override parameters (could be typed in the 1st row of the sample list (not samplelist), but it's way better to have everything human-readable in 1 place) and set paths, either to a file somewhere (even on the Internet) or just name a sheet with that sample data. "/sine", "/square", "/saw", "/revsaw", "/triangle", "/noise", "/brown"/"/red", "/pink" "/green" "/blue" "/purple" "/white", "/gray"/"/grey", "/black" and "/silence" are reserved for generators. A formula for intergrated Goniometric synthesizer shall be accepted too.
Sample:
This is the only number matrix you are going to be faced if you choose to embed samples in the file. There are no instruments because they suck. but if you really want, you can specify path in samplelist to an .XI or .ITI file. We're not making a complex module that is over 10 MB, remember salarymen have slow Pentiums and not i5s. Unless you're making an overeffected VST-plugin-centered EDM, you won't need them. Remember, this is still only a spreadsheet processor running a script, not a tracker or even a DAW.
These are only raw data. Bit depth, channels #, loop points, tune, volume and panning has to be specified in the samplelist. Numbers in cells can range to more than the actual maximum value and represent more than 1 sample (even parts, but not coherent to edit) if lesser amount of bits is specified. This can't be done with floating point ones as it produces noise.
Supported precisions are half (H or 16F), single (S or 32F), double (D or 64F), quad (Q or 128F) and octuple (O or 256F).
Supported sample rates are from 1 to whatever can fit the cell as an integer. Internally, those numbers are processed with optional precission in the main song infolist.
Each row represents a stream for 1 channel. Direct PCM stream is allowed only with even cell separation and is specified in the samplelist as everything else is.
| A | B | C | D |
-+-------------------
1| | | | |
-+--------------------
2| | | | |
-+------------------
Orderlist:
1 empty order - skip
2 or more empty orders - loop or end or next sequence
more patterns at the same time allowed
multiple or hidden songs possible
| A | B |
-+-----------+---------+
1|Intro | |
-+-----------+---------+
2|Intro2 | |
-+-----------+---------+
3| | |
-+-----------+---------+
4|Theme1 |Beat |
-+-----------+---------+
5|Theme2 |Beat |
-+-----------+---------+
6|BothThemes |Beat |
-+-----------+---------+
7|Build-Up |BeatRoll |
-+-----------+---------+
8| | |
-+-----------+---------+
9|Chorus |Blastoff |
-+-----------+---------+
Random-ass pattern:
The only limit is the list size. In old Excels it was 65536 rows and 256 colums, therefore 51 channels by standard columnization from Impulse Tracker. But there hasn't to be every column in each channel. You can have only Note and Instrument one and fit up to 85 channels. The channels are only separated by blank cells. You can have a large mess in it if you separate by always 1 and don't align it under each one.
Misread should not occur if you use Instrument before the note. Also continuing effects should work the way in the example table. If it reads 1 character, the effect is continued with previous parameter, and if it reads 2, the parameter is changed. Zeroes or nulls can be forced by dots. If there is no previous parameter, yet an effect with memory on x00 is called, nothing is done. The memory is not shared by default.
- or # denotes it's a note
number means instrument
lowercase letter denotes volume column command
uppercase letter means it's effect column command
if it's under some cell, empty spaces get filled with the character above so don't continue effects somewhere else
| A | B | C | D |E| F | G | H | I |J|
--+---+---+---+---+-+---+---+---+---+-+----------------------
00|C-5| 02|o01|X00| |A-3| 01|p64|H13| |
--+---+---+---+---+-+---+---+---+---+-+----------------------
01|G# | | 02| FF| | | |e01|H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
02|F | | 03| 00| | | |e |H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
03|A# | | 02| FF| | | |e |H | |
--+---+---+---+---+-+---+---+---+---+-+-----------------------
Conclusion:
This is for the sole purpose of proofing the concept that music can be fed into normal tables and printed out for playing live. Not all people can read notes in realtime and I'm 1 of them. Also the notation is limited to approximate values and ideas about effects like fading, portamento, tremolo, vibrato, tempo slide and so on. It isn't meant to be an exact sequence, therefore introducing slight misinterpretations at conductor's will and contemporary tuning. Those were the times when the A was only 432 Hz, now it's 442 (Hollywood movies) or 440 (almost everyone else) and if humans continue, music will be ultrasound by year 5000. The only misinterpretations in playing modules are the mixing methods and tempo inaccuracy way smaller than mechanical metronome.
If someone feels like it, they shall write the macro or the extension and prove that Excel doesn't have to be just a shitty bloated spreadsheet processor with more code responsible for piracy protection and user identification than the actual spreadsheet processing features.
No comments:
Post a Comment
Barely anyone comments, so I don't moderate. Free advertising, I guess.