Guest User

Untitled

a guest
Nov 17th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. using NAudio.Wave;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Babble.Core
  9. {
  10. public class NAudioSoundEngine : ISoundEngine
  11. {
  12. WaveInEvent waveIn;
  13. WaveOut waveOut;
  14. BufferedWaveProvider waveOutProvider;
  15. Action<byte[]> RecordCallback;
  16.  
  17. public void Init()
  18. {
  19. waveIn = new WaveInEvent();
  20. waveIn.BufferMilliseconds = 100;
  21. waveIn.DeviceNumber = -1;
  22. waveIn.WaveFormat = new WaveFormat(8000, 1);
  23. waveIn.DataAvailable += WaveIn_DataAvailable;
  24.  
  25.  
  26. waveOut = new WaveOut();
  27. waveOutProvider = new BufferedWaveProvider(waveIn.WaveFormat);
  28. waveOut.Init(waveOutProvider);
  29. waveOut.Play();
  30. }
  31.  
  32. private void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
  33. {
  34. if (RecordCallback != null)
  35. {
  36. RecordCallback(e.Buffer);
  37. }
  38. }
  39.  
  40. public void StopRecording()
  41. {
  42. if (!CanRecord()) { return; }
  43.  
  44. waveIn.StopRecording();
  45. }
  46.  
  47. public void Play(byte[] data)
  48. {
  49. waveOutProvider.AddSamples(data, 0, data.Length);
  50. }
  51.  
  52. public void Record()
  53. {
  54. if (!CanRecord()) { return; }
  55.  
  56. waveIn.StartRecording();
  57. }
  58.  
  59. public void SetRecordCallback(Action<byte[]> callback)
  60. {
  61. RecordCallback = callback;
  62. }
  63.  
  64. private bool CanRecord()
  65. {
  66. if (waveIn == null) { return false; }
  67. if (WaveIn.DeviceCount == 0) { return false; }
  68.  
  69. return true;
  70. }
  71. }
  72. }
Add Comment
Please, Sign In to add comment