|
@@ -0,0 +1,95 @@
|
|
|
+using System;
|
|
|
+using System.Linq;
|
|
|
+using System.Threading;
|
|
|
+using Bmp.Core.Playback.Inputs;
|
|
|
+using Bmp.Core.Playback.Outputs.NAudioASIO;
|
|
|
+using NAudio.Wave;
|
|
|
+using AsioOut = Bmp.Core.Playback.Outputs.NAudioASIO.AsioOut;
|
|
|
+using static Bmp.Poc.Const;
|
|
|
+
|
|
|
+namespace Bmp.Poc.PoCs;
|
|
|
+
|
|
|
+internal static class PocAsioFreqBit
|
|
|
+{
|
|
|
+ public static void MainFunc()
|
|
|
+ {
|
|
|
+ var asioDriverName = "Creative SB USB RT ASIO Device";
|
|
|
+
|
|
|
+ AsioDriverExt driver;
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ var flag24000 = driver.IsSampleRateSupported(24000);
|
|
|
+ var flag256000 = driver.IsSampleRateSupported(256000);
|
|
|
+
|
|
|
+ var flag44100 = driver.IsSampleRateSupported(44100);
|
|
|
+ var flag48000 = driver.IsSampleRateSupported(48000);
|
|
|
+ var flag88200 = driver.IsSampleRateSupported(88200);
|
|
|
+ var flag96000 = driver.IsSampleRateSupported(96000);
|
|
|
+ var flag192000 = driver.IsSampleRateSupported(192000);
|
|
|
+ var flag384000 = driver.IsSampleRateSupported(384000);
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(44100);
|
|
|
+ var sampleRate44100 = driver.GetSampleRate();
|
|
|
+ var bit44100 = driver.Capabilities.OutputChannelInfos.First().type; //32
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(48000);
|
|
|
+ var sampleRate48000 = driver.GetSampleRate();
|
|
|
+ var bit48000 = driver.Capabilities.OutputChannelInfos.First().type; //24
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(88200);
|
|
|
+ var sampleRate88200 = driver.GetSampleRate();
|
|
|
+ var bit88200 = driver.Capabilities.OutputChannelInfos.First().type; //32
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(96000);
|
|
|
+ var sampleRate96000 = driver.GetSampleRate();
|
|
|
+ var bit96000 = driver.Capabilities.OutputChannelInfos.First().type; //24
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(192000);
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ var sampleRate192000 = driver.GetSampleRate();
|
|
|
+ var bit192000 = driver.Capabilities.OutputChannelInfos.First().type; //24
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ driver = new AsioDriverExt(asioDriverName);
|
|
|
+ driver.SetSampleRate(384000);
|
|
|
+ var sampleRate384000 = driver.GetSampleRate();
|
|
|
+ var bit384000 = driver.Capabilities.OutputChannelInfos.First().type; //32
|
|
|
+ driver.ReleaseDriver();
|
|
|
+
|
|
|
+ var source = new FFMPEGAudioReader(UrlFlac24Bit96Khz);
|
|
|
+
|
|
|
+ var driverNames = AsioOut.GetDriverNames();
|
|
|
+ var driverIndex = Array.IndexOf(driverNames, asioDriverName);
|
|
|
+
|
|
|
+ var outputDevice = new AsioOut(driverIndex);
|
|
|
+ var x = outputDevice.IsSampleRateSupported(source.WaveFormat.SampleRate);
|
|
|
+
|
|
|
+ outputDevice.AudioAvailable += delegate { Console.WriteLine("AudioAvailable"); };
|
|
|
+ outputDevice.DriverResetRequest += delegate { Console.WriteLine("DriverResetRequest"); };
|
|
|
+
|
|
|
+ outputDevice.Init(source);
|
|
|
+
|
|
|
+ outputDevice.Play();
|
|
|
+
|
|
|
+ while (outputDevice.PlaybackState == PlaybackState.Playing)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"{source.CurrentTime}/{source.TotalTime}");
|
|
|
+ Thread.Sleep(5000);
|
|
|
+ outputDevice.Pause();
|
|
|
+ source.CurrentTime = source.CurrentTime.Add(TimeSpan.FromSeconds(-1));
|
|
|
+ outputDevice.Play();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|