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.
 |