CachedSound.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using NAudio.Wave;
  2. using System;
  3. namespace Client.MirSounds.Libraries
  4. {
  5. class CachedSound
  6. {
  7. public int Index { get; private set; }
  8. public long ExpireTime { get; set; }
  9. public float[] AudioData { get; private set; }
  10. public WaveFormat WaveFormat { get; private set; }
  11. public CachedSound(int index, string fileName)
  12. {
  13. Index = index;
  14. fileName = Path.Combine(Settings.SoundPath, fileName);
  15. string fileType = Path.GetExtension(fileName);
  16. // attempt to find file
  17. if (String.IsNullOrEmpty(fileType))
  18. {
  19. foreach (String ext in SoundManager.SupportedFileTypes)
  20. {
  21. if (File.Exists($"{fileName}{ext}"))
  22. {
  23. fileName = $"{fileName}{ext}";
  24. fileType = ext;
  25. break;
  26. }
  27. }
  28. }
  29. if (SoundManager.SupportedFileTypes.Contains(fileType) &&
  30. File.Exists(fileName))
  31. {
  32. using (var audioFileReader = new AudioFileReader(fileName))
  33. {
  34. WaveFormat = audioFileReader.WaveFormat;
  35. var wholeFile = new List<float>((int)(audioFileReader.Length / 4));
  36. var readBuffer = new float[audioFileReader.WaveFormat.SampleRate * audioFileReader.WaveFormat.Channels];
  37. int samplesRead;
  38. while ((samplesRead = audioFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0)
  39. {
  40. wholeFile.AddRange(readBuffer.Take(samplesRead));
  41. }
  42. AudioData = wholeFile.ToArray();
  43. }
  44. }
  45. }
  46. }
  47. }