Ian Burgmyer
7 years ago
4 changed files with 262 additions and 4 deletions
@ -0,0 +1,134 @@
|
||||
using System.Collections.Generic; |
||||
|
||||
namespace Sample.Audio { |
||||
internal static class Font { |
||||
internal const int Width = 4; |
||||
internal const int Height = 7; |
||||
|
||||
// Probably not particularly efficient (and definitely not elegant), |
||||
// but this *is* just a quick sample project. :) |
||||
internal static Dictionary<char, bool[,]> Glyph = new Dictionary<char, bool[,]> { |
||||
{ |
||||
'0', new[,] { |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'1', new[,] { |
||||
{ false, false, true, false }, |
||||
{ false, true, true, false }, |
||||
{ false, false, true, false }, |
||||
{ false, false, true, false }, |
||||
{ false, false, true, false }, |
||||
{ false, false, true, false }, |
||||
{ false, true, true, true } |
||||
} |
||||
}, { |
||||
'2', new[,] { |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ true, true, true, true }, |
||||
{ true, false, false, false }, |
||||
{ true, false, false, false }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'3', new[,] { |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'4', new[,] { |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true } |
||||
} |
||||
}, { |
||||
'5', new[,] { |
||||
{ true, true, true, true }, |
||||
{ true, false, false, false }, |
||||
{ true, false, false, false }, |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'6', new[,] { |
||||
{ true, true, true, true }, |
||||
{ true, false, false, false }, |
||||
{ true, false, false, false }, |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'7', new[,] { |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true } |
||||
} |
||||
}, { |
||||
'8', new[,] { |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'9', new[,] { |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, true, true, true }, |
||||
{ false, false, false, true }, |
||||
{ false, false, false, true }, |
||||
{ true, true, true, true } |
||||
} |
||||
}, { |
||||
'h', new[,] { |
||||
{ true, false, false, false }, |
||||
{ true, false, false, false }, |
||||
{ true, false, false, false }, |
||||
{ true, true, true, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true }, |
||||
{ true, false, false, true } |
||||
} |
||||
}, { |
||||
'z', new[,] { |
||||
{ false, false, false, false }, |
||||
{ false, false, false, false }, |
||||
{ false, false, false, false }, |
||||
{ true, true, true, true }, |
||||
{ false, false, true, false }, |
||||
{ false, true, false, false }, |
||||
{ true, true, true, true } |
||||
} |
||||
} |
||||
}; |
||||
} |
||||
} |
@ -1,8 +1,8 @@
|
||||
namespace Sample.Audio { |
||||
class Program { |
||||
static void Main(string[] args) { |
||||
var window = new Window(512, 256); |
||||
window.Start(500, 16); |
||||
var window = new Window(720, 180); |
||||
window.Start(16); |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,9 +1,132 @@
|
||||
using DotSDL.Graphics; |
||||
using DotSDL.Input.Keyboard; |
||||
|
||||
namespace Sample.Audio { |
||||
internal class Window : SdlWindow { |
||||
public Window(int width, int height) : base("DotSDL Audio Example", new Point{ X = WindowPosUndefined, Y = WindowPosUndefined }, width, height, 128, 32) { |
||||
|
||||
private bool UpPressed { get; set; } |
||||
private bool DownPressed { get; set; } |
||||
private bool Fast { get; set; } |
||||
|
||||
private int _freq = 440; |
||||
private int _minFreq = 1; |
||||
private int _maxFreq = 22050; |
||||
|
||||
private const int DrawX = 1; |
||||
private const int SpacingX = 5; |
||||
private const int DrawY = 1; |
||||
|
||||
private const byte OnDelta = 24; |
||||
private const byte OffColor = 72; |
||||
private Color TextColor = new Color { A = 255, R = 159, G = 159, B = 159 }; |
||||
|
||||
public Window(int width, int height) : base("DotSDL Audio Example", |
||||
new Point{ X = WindowPosUndefined, Y = WindowPosUndefined }, |
||||
width, height, |
||||
36, 9) { |
||||
KeyPressed += Window_KeyPressed; |
||||
KeyReleased += Window_KeyReleased; |
||||
} |
||||
|
||||
private void DrawGlyph(ref Canvas canvas, char ch, int xPos, Color c) { |
||||
var xPixel = DrawX + SpacingX * xPos; |
||||
var glyph = Font.Glyph[ch]; |
||||
|
||||
for(var y = 0; y < Font.Height; y++) { |
||||
for(var x = 0; x < Font.Width; x++) { |
||||
if(!glyph[y, x]) continue; |
||||
var index = canvas.GetIndex(x + xPixel, y + DrawY); |
||||
|
||||
canvas.Pixels[index] = TextColor; |
||||
} |
||||
} |
||||
} |
||||
|
||||
protected override void OnDraw(ref Canvas canvas) { |
||||
// Clear canvas. |
||||
for(var i = 0; i < canvas.Pixels.Length; i++) |
||||
canvas.Pixels[i].R = canvas.Pixels[i].G = canvas.Pixels[i].B = 0; |
||||
|
||||
// hz Text |
||||
DrawGlyph(ref canvas, 'h', 5, TextColor); |
||||
DrawGlyph(ref canvas, 'z', 6, TextColor); |
||||
|
||||
// Number |
||||
var freqText = _freq.ToString(); |
||||
var textPos = 5 - freqText.Length; |
||||
for(int x = 0; x < freqText.Length; x++) |
||||
DrawGlyph(ref canvas, freqText[x], textPos + x, TextColor); |
||||
|
||||
// Background/highlighting. |
||||
var component = 0; |
||||
|
||||
for(var i = 0; i < canvas.Pixels.Length; i++) { |
||||
canvas.Pixels[i].R += OffColor; |
||||
canvas.Pixels[i].G += OffColor; |
||||
canvas.Pixels[i].B += OffColor; |
||||
switch(component) { |
||||
default: |
||||
canvas.Pixels[i].R += OnDelta; |
||||
break; |
||||
case 1: |
||||
canvas.Pixels[i].G += OnDelta; |
||||
break; |
||||
case 2: |
||||
canvas.Pixels[i].B += OnDelta; |
||||
break; |
||||
} |
||||
component = component >= 2 ? 0 : ++component; |
||||
} |
||||
|
||||
|
||||
base.OnDraw(ref canvas); |
||||
} |
||||
|
||||
protected override void OnUpdate() { |
||||
var delta = Fast ? 10 : 1; |
||||
if(UpPressed) |
||||
_freq += delta; |
||||
if(DownPressed) |
||||
_freq -= delta; |
||||
|
||||
if(_freq > _maxFreq) _freq = _maxFreq; |
||||
if(_freq < _minFreq) _freq = _minFreq; |
||||
|
||||
base.OnUpdate(); |
||||
} |
||||
|
||||
private void Window_KeyPressed(object sender, DotSDL.Events.KeyboardEvent e) { |
||||
if(e.Repeat) return; |
||||
|
||||
switch(e.Keycode) { |
||||
case Keycode.Up: |
||||
UpPressed = true; |
||||
break; |
||||
case Keycode.Down: |
||||
DownPressed = true; |
||||
break; |
||||
case Keycode.LShift: |
||||
case Keycode.RShift: |
||||
Fast = true; |
||||
break; |
||||
case Keycode.Escape: |
||||
Stop(); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
private void Window_KeyReleased(object sender, DotSDL.Events.KeyboardEvent e) { |
||||
switch(e.Keycode) { |
||||
case Keycode.Up: |
||||
UpPressed = false; |
||||
break; |
||||
case Keycode.Down: |
||||
DownPressed = false; |
||||
break; |
||||
case Keycode.LShift: |
||||
case Keycode.RShift: |
||||
Fast = false; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue