much happenings in this fucked up world

This commit is contained in:
Persephone Bubblegum-Holidy 2025-05-05 18:16:52 -07:00
parent 29fc81ef37
commit 2f6d3b7b5b
55 changed files with 1067 additions and 52 deletions

View file

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace MitziPlayer
{
public class INIFile
{
public Dictionary<string, string> Data { get; set; }
public INIFile(Dictionary<string, string> data)
{
Data = data;
}
public static INIFile Load(string inPath)
{
Dictionary<string, string> outData = new Dictionary<string, string>();
string[] rawFile = File.ReadAllLines(inPath);
foreach (string line in rawFile)
{
if (line.StartsWith(";") || line.Trim() == "") continue;
outData.Add(line.Split("=")[0].Trim(), line.Split("=")[1].Trim());
}
return new INIFile(outData);
}
}
}

View file

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.IO.Ports" Version="10.0.0-preview.2.25163.2" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Ports;
using System.Timers;
namespace MitziPlayer
{
public class Program
{
static INIFile Config;
static string PathPrefix="/";
static int[] Signals;
static SerialPort port = null;
static System.Timers.Timer FrameTimer;
static string MPVArgs = "";
static long index = 0;
static int frameSkip = 6;
static void Main(string[] args)
{
Config = INIFile.Load(args[0]);
PathPrefix = Path.GetFullPath(args[0]).Replace("manifest.ini", "");
Signals = LoadSignals(File.ReadAllLines(PathPrefix+Config.Data["data"]));
if (args.Count() == 3)
{
MPVArgs = $"--start={args[2]} ";
index = int.Parse(args[2])*60;
}
port = new SerialPort(args[1], 9600, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
FrameTimer = new System.Timers.Timer((1000d/double.Parse(Config.Data["frames-per-second"]))*frameSkip);
FrameTimer.Elapsed += PlaySignal;
FrameTimer.AutoReset = true;
PlayAudio();
FrameTimer.Start();
Console.ReadLine();
port.Close();
}
private static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.Write(port.ReadExisting());
}
static int[] LoadSignals(string[] inData)
{
List<int> tmpOut = new List<int>();
foreach (string frame in inData) tmpOut.Add(int.Parse(frame, NumberStyles.HexNumber));
return tmpOut.ToArray();
}
static void PlayAudio()
{
Process.Start("mpv", MPVArgs+PathPrefix+Config.Data["audio"]);
}
static void PlaySignal(Object sender, ElapsedEventArgs e)
{
if (index >= Signals.Length)
{
FrameTimer.Stop();
Console.WriteLine("Complete!");
return;
}
int b = Signals[index];
char[] bytesOut = { (char)(64 | ((b & 8) | (b & 4) | (b & 2) | (b & 1))), (char)(64 | (((b & 128) | (b & 64) | (b & 32) | (b & 16)) >> 4)), (char)(64 | (((b & 2048) | (b & 1024) | (b & 512) | (b & 256)) >> 8)), (char)(64 | (((b & 32768) | (b & 16384) | (b & 8192) | (b & 4096)) >> 12)), (char)(64 | (((b & 262144) | (b & 131072) | (b & 65536)) >> 16)) };
port.Write(new string(bytesOut));
Console.WriteLine(b.ToString("B19"));
index+=frameSkip;
}
}
}