79 lines
		
	
	
		
			4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # PowerNoise instrument editor
 | |
| 
 | |
| the PowerNoise instrument editor consists of two tabs.
 | |
| 
 | |
| ## LFSR-based synthesis
 | |
| 
 | |
| PowerNoise employs LFSR-based synthesis for the noise channels, using linear-feedback shift registers for sound generation.
 | |
| 
 | |
| a linear-feedback shift register is one method used for random number generation.
 | |
| it works by shifting a sequence of binary numbers (bits), taking the last bit into the output. then one of the bits is either pushed back into the register, or combined with another, doing a XOR (exclusive or) operation and then being pushed back.
 | |
| 
 | |
| think of it as a conveyor carrying glass bottles. each bottle may be empty or carrying water.
 | |
| the bottle at the end is taken. if there's water, then the output is 1. if it's empty, the output is 0.
 | |
| depending on the LFSR configuration:
 | |
| - a bottle is pushed into the conveyor. it is either empty or filled with water depending on the bottle at a specific position in the conveyor (this is called a "tap"), or
 | |
| - two bottles at specific positions ("taps") are looked at and combined as follows:
 | |
|   - if the bottles are identical, an empty bottle is pushed.
 | |
|   - if one bottle has water but the other is empty, a water bottle is pushed.
 | |
| the process is repeated indefinitely.
 | |
| 
 | |
| PowerNoise uses either one or two taps for the LFSR, configurable via the Control macro.
 | |
| 
 | |
| the LFSR must be initialized before it can produce sound. the Load LFSR macro allows you to do so.
 | |
| 
 | |
| by default the LFSR is configured to produce square waves, by having a single tap in position 1 and an alternating LFSR pattern.
 | |
| 
 | |
| ## Macros (noise)
 | |
| 
 | |
| - **Volume**: volume sequence.
 | |
| - **Arpeggio**: pitch sequence.
 | |
| - **Panning (left)**: output level for left channel.
 | |
| - **Panning (right)**: output level for right channel.
 | |
| - **Pitch**: fine pitch.
 | |
| - **Phase Reset**: trigger reloading the LFSR.
 | |
| - **Control**: channel settings:
 | |
|   - **slope AM**: when enabled, this channel's output and the slope channel go through amplitude modulation.
 | |
|   - **tap B**: enables use of two taps for the LFSR.
 | |
| - **Tap A Location**: sets the position of the first tap.
 | |
| - **Tap B Location**: sets the position of the second tap.
 | |
| - **Load LFSR**: allows you to load the LFSR with a specific pattern.
 | |
| 
 | |
| ## PowerNoise tab
 | |
| 
 | |
| this tab allows you to change the base octave - important when you have set a longer LFSR pattern.
 | |
| 
 | |
| ## PowerNoise (slope) instrument editor
 | |
| 
 | |
| this channel has its own instrument type, as it does not use LFSR-based synthesis but instead generates saw waves.
 | |
| 
 | |
| it uses a custom algorithm which will be (roughly) described below.
 | |
| 
 | |
| the slope channel uses two "portions" - each with length, offset, invert and clip parameters.
 | |
| the channel alternates between these portions as it is cycled.
 | |
| 
 | |
| on every cycle, the offset of the current portion is either added or subtracted into the accumulator (depending on the invert parameter), effectively behaving like a multiplier.
 | |
| if the clip parameter is enabled, this will make sure the accumulator doesn't go past 0 or 127 (depending on the invert parameter, again). otherwise, the accumulator will be ANDed with 127.
 | |
| once an amount of cycles set by the portion length parameter have elapsed, the channel switches into the other portion.
 | |
| 
 | |
| the current value of the accumulator is output.
 | |
| 
 | |
| ## Macros (slope)
 | |
| 
 | |
| - **Volume**: volume sequence.
 | |
| - **Arpeggio**: pitch sequence.
 | |
| - **Panning (left)**: output level for left channel.
 | |
| - **Panning (right)**: output level for right channel.
 | |
| - **Pitch**: fine pitch.
 | |
| - **Control**: channel settings:
 | |
|   - **clip A**: sets clip parameter of first portion.
 | |
|   - **clip B**: sets clip parameter of second portion.
 | |
|   - **reset A**: resets the first portion.
 | |
|   - **reset B**: resets the second portion.
 | |
|   - **invert A**: sets invert parameter of first portion.
 | |
|   - **invert B**: sets invert parameter of second portion.
 | |
| - **Portion A Length**: sets the duration of the first portion.
 | |
| - **Portion B Length**: sets the duration of the second portion.
 | |
| - **Portion A Offset**: sets the accumulator speed of the first portion.
 | |
| - **Portion B Offset**: sets the accumulator speed of the second portion.
 | 
