Browse Source

Completed UI for Sample.Audio.

improved_timing
Ian Burgmyer 7 years ago
parent
commit
9200e8473f
  1. 134
      Samples/Sample.Audio/Font.cs
  2. 4
      Samples/Sample.Audio/Program.cs
  3. 1
      Samples/Sample.Audio/Sample.Audio.csproj
  4. 127
      Samples/Sample.Audio/Window.cs

134
Samples/Sample.Audio/Font.cs

@ -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 }
}
}
};
}
}

4
Samples/Sample.Audio/Program.cs

@ -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
Samples/Sample.Audio/Sample.Audio.csproj

@ -56,6 +56,7 @@
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Font.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Window.cs" />

127
Samples/Sample.Audio/Window.cs

@ -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…
Cancel
Save