dac_additive: Decouple the buffer length from the waveform length (#22276)
* dac_additive: Decouple the buffer length from the waveform length * Formatting changes for the previous commit * Reformat waveform tables with rows of 16 entries, ending at column 116 * Revert "Reformat waveform tables with rows of 16 entries, ending at column 116" This reverts commit 6f2d37908d6e73e1505ce61e63190f32f051586f.
This commit is contained in:
		
							parent
							
								
									02c5afc7d5
								
							
						
					
					
						commit
						229a1690a7
					
				
					 3 changed files with 82 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -23,11 +23,6 @@
 | 
			
		|||
#    define A5 PAL_LINE(GPIOA, 5)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Size of the dac_buffer arrays. All must be the same size.
 | 
			
		||||
 */
 | 
			
		||||
#define AUDIO_DAC_BUFFER_SIZE 256U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Highest value allowed sample value.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +91,35 @@
 | 
			
		|||
#    define AUDIO_DAC_SAMPLE_RATE 44100U
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Size of the dac_buffer array. This controls the length of the runtime buffer
 | 
			
		||||
 * which accumulates the data to be sent to the DAC every few milliseconds, and
 | 
			
		||||
 * it does not need to correspond to the length of the wavetable for the chosen
 | 
			
		||||
 * waveform defined by AUDIO_DAC_SAMPLE_WAVEFORM_* in the additive DAC driver.
 | 
			
		||||
 * By default, this is set to be as close to 3.3 ms as possible, giving 300 DAC
 | 
			
		||||
 * interrupts per second. Any smaller and the interrupt load gets too heavy and
 | 
			
		||||
 * this results in crackling due to buffer underrun in the additive DAC driver;
 | 
			
		||||
 * too large and the RAM (additive driver) or flash (basic driver) usage may be
 | 
			
		||||
 * too high, causing build failures, and matrix scanning is liable to have long
 | 
			
		||||
 * periodic pauses that delay key presses or releases or fully lose short taps.
 | 
			
		||||
 * Large buffers also cause notes to take longer to stop after they should from
 | 
			
		||||
 * music mode or MIDI input.
 | 
			
		||||
 * This should be a power of 2 for maximum compatibility.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef AUDIO_DAC_BUFFER_SIZE
 | 
			
		||||
#    if AUDIO_DAC_SAMPLE_RATE < 5100U
 | 
			
		||||
#        define AUDIO_DAC_BUFFER_SIZE 16U
 | 
			
		||||
#    elif AUDIO_DAC_SAMPLE_RATE < 9900U
 | 
			
		||||
#        define AUDIO_DAC_BUFFER_SIZE 32U
 | 
			
		||||
#    elif AUDIO_DAC_SAMPLE_RATE < 19500U
 | 
			
		||||
#        define AUDIO_DAC_BUFFER_SIZE 64U
 | 
			
		||||
#    elif AUDIO_DAC_SAMPLE_RATE < 38700U
 | 
			
		||||
#        define AUDIO_DAC_BUFFER_SIZE 128U
 | 
			
		||||
#    else
 | 
			
		||||
#        define AUDIO_DAC_BUFFER_SIZE 256U
 | 
			
		||||
#    endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The number of tones that can be played simultaneously. If too high a value
 | 
			
		||||
 * is used here, the keyboard will freeze and glitch-out when that many tones
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue