reafactoring
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using Discord.Audio;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Kasbot.Services.Internal
|
||||
{
|
||||
@@ -6,7 +7,57 @@ namespace Kasbot.Services.Internal
|
||||
{
|
||||
public AudioService() { }
|
||||
|
||||
public Process CreateStream()
|
||||
public void StartAudioTask(Stream inputStream, IAudioClient outputAudioClient, Action<Stream> onStartAudio, Action<Task> onFinish)
|
||||
{
|
||||
var ffmpeg = CreateFFmpeg();
|
||||
|
||||
Task stdin = new Task(() =>
|
||||
{
|
||||
using (var output = inputStream)
|
||||
{
|
||||
try
|
||||
{
|
||||
output.CopyTo(ffmpeg.StandardInput.BaseStream);
|
||||
ffmpeg.StandardInput.Close();
|
||||
}
|
||||
catch { }
|
||||
finally
|
||||
{
|
||||
output.Flush();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Task stdout = new Task(() =>
|
||||
{
|
||||
using (var output = ffmpeg.StandardOutput.BaseStream)
|
||||
using (var discord = outputAudioClient.CreatePCMStream(AudioApplication.Music))
|
||||
{
|
||||
try
|
||||
{
|
||||
onStartAudio.Invoke(ffmpeg.StandardOutput.BaseStream);
|
||||
output.CopyTo(discord);
|
||||
}
|
||||
catch { }
|
||||
finally
|
||||
{
|
||||
discord.Flush();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
stdin.Start();
|
||||
stdout.Start();
|
||||
|
||||
stdin.ContinueWith(onFinish);
|
||||
stdout.ContinueWith(onFinish);
|
||||
|
||||
Task.WaitAll(stdin, stdout);
|
||||
|
||||
ffmpeg.Close();
|
||||
}
|
||||
|
||||
private Process CreateFFmpeg()
|
||||
{
|
||||
var process = Process.Start(new ProcessStartInfo
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user