PocAsioFreqBit.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using Bmp.Core.Playback.Inputs;
  5. using Bmp.Core.Playback.Outputs.NAudioASIO;
  6. using NAudio.Wave;
  7. using AsioOut = Bmp.Core.Playback.Outputs.NAudioASIO.AsioOut;
  8. using static Bmp.Poc.Const;
  9. namespace Bmp.Poc.PoCs;
  10. internal static class PocAsioFreqBit
  11. {
  12. public static void MainFunc()
  13. {
  14. var asioDriverName = "Creative SB USB RT ASIO Device";
  15. AsioDriverExt driver;
  16. driver = new AsioDriverExt(asioDriverName);
  17. var flag24000 = driver.IsSampleRateSupported(24000);
  18. var flag256000 = driver.IsSampleRateSupported(256000);
  19. var flag44100 = driver.IsSampleRateSupported(44100);
  20. var flag48000 = driver.IsSampleRateSupported(48000);
  21. var flag88200 = driver.IsSampleRateSupported(88200);
  22. var flag96000 = driver.IsSampleRateSupported(96000);
  23. var flag192000 = driver.IsSampleRateSupported(192000);
  24. var flag384000 = driver.IsSampleRateSupported(384000);
  25. driver.ReleaseDriver();
  26. driver = new AsioDriverExt(asioDriverName);
  27. driver.SetSampleRate(44100);
  28. var sampleRate44100 = driver.GetSampleRate();
  29. var bit44100 = driver.Capabilities.OutputChannelInfos.First().type; //32
  30. driver.ReleaseDriver();
  31. driver = new AsioDriverExt(asioDriverName);
  32. driver.SetSampleRate(48000);
  33. var sampleRate48000 = driver.GetSampleRate();
  34. var bit48000 = driver.Capabilities.OutputChannelInfos.First().type; //24
  35. driver.ReleaseDriver();
  36. driver = new AsioDriverExt(asioDriverName);
  37. driver.SetSampleRate(88200);
  38. var sampleRate88200 = driver.GetSampleRate();
  39. var bit88200 = driver.Capabilities.OutputChannelInfos.First().type; //32
  40. driver.ReleaseDriver();
  41. driver = new AsioDriverExt(asioDriverName);
  42. driver.SetSampleRate(96000);
  43. var sampleRate96000 = driver.GetSampleRate();
  44. var bit96000 = driver.Capabilities.OutputChannelInfos.First().type; //24
  45. driver.ReleaseDriver();
  46. driver = new AsioDriverExt(asioDriverName);
  47. driver.SetSampleRate(192000);
  48. driver.ReleaseDriver();
  49. driver = new AsioDriverExt(asioDriverName);
  50. var sampleRate192000 = driver.GetSampleRate();
  51. var bit192000 = driver.Capabilities.OutputChannelInfos.First().type; //24
  52. driver.ReleaseDriver();
  53. driver = new AsioDriverExt(asioDriverName);
  54. driver.SetSampleRate(384000);
  55. var sampleRate384000 = driver.GetSampleRate();
  56. var bit384000 = driver.Capabilities.OutputChannelInfos.First().type; //32
  57. driver.ReleaseDriver();
  58. var source = new FFMPEGAudioReader(UrlFlac24Bit96Khz);
  59. var driverNames = AsioOut.GetDriverNames();
  60. var driverIndex = Array.IndexOf(driverNames, asioDriverName);
  61. var outputDevice = new AsioOut(driverIndex);
  62. var x = outputDevice.IsSampleRateSupported(source.WaveFormat.SampleRate);
  63. outputDevice.AudioAvailable += delegate { Console.WriteLine("AudioAvailable"); };
  64. outputDevice.DriverResetRequest += delegate { Console.WriteLine("DriverResetRequest"); };
  65. outputDevice.Init(source);
  66. outputDevice.Play();
  67. while (outputDevice.PlaybackState == PlaybackState.Playing)
  68. {
  69. Console.WriteLine($"{source.CurrentTime}/{source.TotalTime}");
  70. Thread.Sleep(5000);
  71. outputDevice.Pause();
  72. source.CurrentTime = source.CurrentTime.Add(TimeSpan.FromSeconds(-1));
  73. outputDevice.Play();
  74. }
  75. }
  76. }