User Tools

Site Tools


tonegen_design

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
tonegen_design [2022/03/17 02:34]
dpisuperadmin [Minimal Tone Generator with Volume Control]
tonegen_design [2022/03/20 03:45]
dpisuperadmin
Line 12: Line 12:
  
 ==== Minimal Tone Generator with Volume Control ==== ==== Minimal Tone Generator with Volume Control ====
-A full synthesizer, as described below, may take more that its fair share of FPGA logic.  This is fine if the goal of the project is a synthesizer but is not fine if the user wants something that just beeps.  This section describes something that beeps but includes volume control.+A full synthesizer may take more that its fair share of FPGA logic.  This is fine if the goal of the project is a synthesizer but is not fine if the user wants something that just beeps.  This section describes something that beeps but includes volume control.
  
 The API for a simple tone generator might specify the musical note to play, the volume in the range of 0 to 100, and the number of milliseconds to play the note.  We might also want to play a file of notes where each line the the file has the note, volume, and duration.  For example: The API for a simple tone generator might specify the musical note to play, the volume in the range of 0 to 100, and the number of milliseconds to play the note.  We might also want to play a file of notes where each line the the file has the note, volume, and duration.  For example:
-    dpset tonegen tone b4 30 200 +    dpset tonegen note b4 30 200 
-    dpset tonegen play mymelody.txt+    dpset tonegen melody mymelody.txt
  
 {{ wiki:audiotaper.png?200|}} Square waves are easy to generate and have a pleasing sound since they have lots of higher harmonics.  A more difficult question for a simple tone generator is how to control the volume.  Human hearing perceives audio volume on a logarithmic scale.  Electronics manufactures use what is called a 'audio taper' for potentiometers in audio applications. The diagram to the right shows an audio taper and we want our gain control to follow the same curve. {{ wiki:audiotaper.png?200|}} Square waves are easy to generate and have a pleasing sound since they have lots of higher harmonics.  A more difficult question for a simple tone generator is how to control the volume.  Human hearing perceives audio volume on a logarithmic scale.  Electronics manufactures use what is called a 'audio taper' for potentiometers in audio applications. The diagram to the right shows an audio taper and we want our gain control to follow the same curve.
Line 155: Line 155:
 grid on; grid on;
 print -dpng '/tmp/r2-2.png'; print -dpng '/tmp/r2-2.png';
- 
-% Generate 100 points on an log curve and map the gain 
-% to setting in pwm - nonlinear DAC scheme.  This gives 
-% the actual table to use in the API driver modules. 
-% Manually add {0,0,0,0} and {15,15,15,15}. 
- 
-% Get the target gains 
-x = 1:1:100; 
-out = exp((5 .* x) ./ 100) ./ 150; 
-target_idx = 1; 
-% loop past all possible gains recording the first to pass out(target_idx) 
-idx = 0; 
- for i3 = 0:15; 
-  for i2 = 0:15; 
-   for i1 = 0:15; 
-    for i0 = 0:15; 
-     idx = idx +1; 
-     outval = ((i3 .* .73203) + (i2 .* .19608) + (i1 .* 0.05229) + (i0 .* 0.01307)) ./ 16; 
-     if outval > out(target_idx), 
-         %printf("%d %f {%d, %d, %d, %d},\n", target_idx, outval, i3, i2, i1, i0); 
-         printf("{%d, %d, %d, %d},\n", i3, i2, i1, i0); 
-         target_idx = target_idx + 1; 
-     end 
-    end 
-   end 
-  end 
- end 
  
 */ */
tonegen_design.txt · Last modified: 2022/03/20 03:51 by dpisuperadmin