Scripting changes and background music!

This commit is contained in:
Michael 2017-01-29 11:59:18 -05:00
parent b5d5178411
commit abfd774638
9 changed files with 185 additions and 0 deletions

View file

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShiftOS.WinForms
{
public static class AudioManager
{
public static void Test()
{
}
}
}

View file

@ -47,6 +47,7 @@ namespace ShiftOS.WinForms
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//if ANYONE puts code before those two winforms config lines they will be declared a drunky. - Michael
ShiftOS.Engine.AudioManager.Init(new ShiftOSAudioProvider());
Localization.RegisterProvider(new WFLanguageProvider());
Shiftorium.RegisterProvider(new WinformsShiftoriumProvider());
AppearanceManager.OnExit += () =>

View file

@ -47,6 +47,10 @@
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Vlc.DotNet.Core.Interops, Version=2.1.130.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86">
<HintPath>..\packages\Vlc.DotNet.Core.Interops.2.1.130\lib\net45\x86\Vlc.DotNet.Core.Interops.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Applications\Artpad.cs">
@ -169,6 +173,7 @@
<Compile Include="Applications\Terminal.Designer.cs">
<DependentUpon>Terminal.cs</DependentUpon>
</Compile>
<Compile Include="AudioManager.cs" />
<Compile Include="Commands.cs" />
<Compile Include="Controls\ColorControl.cs">
<SubType>UserControl</SubType>
@ -198,6 +203,7 @@
<Compile Include="Oobe.Designer.cs">
<DependentUpon>Oobe.cs</DependentUpon>
</Compile>
<Compile Include="ShiftOSAudioProvider.cs" />
<Compile Include="Tools\ColorPickerDataBackend.cs" />
<Compile Include="Tools\ControlManager.cs" />
<Compile Include="Tools\DitheringEngine.cs" />

View file

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using ShiftOS.Engine;
namespace ShiftOS.WinForms
{
class ShiftOSAudioProvider : IAudioProvider
{
public int Count
{
get
{
var wc = new System.Net.WebClient();
return JsonConvert.DeserializeObject<List<string>>(wc.DownloadString("http://getshiftos.ml/api.php?q=soundtrack")).Count;
}
}
private float _vol = 1.0f;
public float Volume
{
get
{
return _vol;
}
set
{
_vol = value;
}
}
public byte[] GetTrack(int index)
{
var wc = new System.Net.WebClient();
var st = JsonConvert.DeserializeObject<List<string>>(wc.DownloadString("http://getshiftos.ml/api.php?q=soundtrack"));
return wc.DownloadData(st[index]);
}
}
}

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
<package id="Vlc.DotNet.Core.Interops" version="2.1.130" targetFramework="net451" />
</packages>

View file

@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NAudio;
using NAudio.Wave;
namespace ShiftOS.Engine
{
public static class AudioManager
{
private static WaveOut _out = null;
private static AudioFileReader _reader = null;
private static IAudioProvider _provider = null;
private static bool _running = true;
public static void Init(IAudioProvider _p)
{
_provider = _p;
AppearanceManager.OnExit += () =>
{
_running = false;
_out?.Stop();
_reader?.Dispose();
_out?.Dispose();
System.IO.File.Delete("temp.mp3");
};
var t = new Thread(() =>
{
Random rnd = new Random();
while(_running == true)
{
int track = rnd.Next(0, _provider.Count);
byte[] mp3 = _provider.GetTrack(track);
System.IO.File.WriteAllBytes("temp.mp3", mp3);
_reader = new AudioFileReader("temp.mp3");
_out = new WaveOut();
_out.Init(_reader);
_out.Volume = _provider.Volume;
_out.Play();
while(_out.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(5000); //even when the player isn't playing, this will give a good delay between songs.
}
}
});
t.IsBackground = true;
t.Start();
}
}
public interface IAudioProvider
{
/// <summary>
/// Gets a byte[] array corresponding to an MP3 track given an index.
/// </summary>
/// <param name="index">A track index to use when finding the right track.</param>
/// <returns>The MP3 byte[] array.</returns>
byte[] GetTrack(int index);
/// <summary>
/// Gets the 1-based count of all available tracks.
/// </summary>
int Count { get; }
/// <summary>
/// Gets or sets the track player's volume.
/// </summary>
float Volume { get; set; }
}
}

View file

@ -148,6 +148,37 @@ namespace ShiftOS.Engine.Scripting
}
}
[Exposed("console")]
public class ConsoleFunctions
{
public void write(dynamic text)
{
Console.Write(text.ToString());
}
public void writeLine(dynamic text)
{
Console.WriteLine(text.ToString());
}
}
[Exposed("sos")]
public class SystemFunctions
{
public int getCodepoints() { return SaveSystem.CurrentSave.Codepoints; }
public bool runCommand(string cmd)
{
var args = TerminalBackend.GetArgs(ref cmd);
return TerminalBackend.RunClient(cmd, args);
}
}
public class ExposedAttribute : Attribute
{
/// <summary>

View file

@ -61,6 +61,10 @@
<Reference Include="Discoursistency.Util">
<HintPath>..\Libraries\Discoursistency.Util.dll</HintPath>
</Reference>
<Reference Include="NAudio, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NAudio.1.8.0\lib\net35\NAudio.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NetSockets">
<HintPath>..\Libraries\NetSockets.dll</HintPath>
</Reference>
@ -115,6 +119,7 @@
<ItemGroup>
<Compile Include="AppearanceManager.cs" />
<Compile Include="AppLauncherDaemon.cs" />
<Compile Include="AudioManager.cs" />
<Compile Include="Commands.cs" />
<Compile Include="Command.cs" />
<Compile Include="CrashHandler.cs" />

View file

@ -3,5 +3,6 @@
<package id="DynamicLua" version="1.1.2.0" targetFramework="net452" />
<package id="IronPython" version="2.7.5" targetFramework="net452" />
<package id="IronPython.Interpreter" version="2.7.4" targetFramework="net452" />
<package id="NAudio" version="1.8.0" targetFramework="net451" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
</packages>