public void Play() { asioOut = new AsioOut(settings.DeviceNumber); //FIX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! asioOut.InitRecordAndPlayback(new SampleToWaveProvider(mixingProvider), 2, Convert.ToInt32(settings.SampleRate)); asioOut.AudioAvailable += AsioOut_AudioAvailable; asioOut.Play(); connection.NewClientConnected += delegate(object source, EventArgs args) { }; connection.Disconnected += delegate(object source, EventArgs args) { }; }
public override void Init(int DeviceID = 0, int channels = 2, int samplerate = 44100, int bufferMax = (44100 * 3)) { base.Init(DeviceID, channels, samplerate, bufferMax); DisposeAsio(); buffer = new float[bufferMax]; result = new float[bufferMax]; bcount = 0; bwriteIndex = 0; input = new AsioOut(DeviceID); //provider = new BufferedWaveProvider(new WaveFormat(samplerate, channels)); input.InitRecordAndPlayback(null, channels, samplerate); //input.ShowControlPanel(); input.AudioAvailable += Input_AudioAvailable; System.Diagnostics.Debug.WriteLine(input.PlaybackLatency + "ms"); input.Play(); tick.AutoReset = true; tick.Elapsed += Tick_Elapsed; tick.Start(); }
public void Play() { asioOut = new AsioOut(settings.DeviceNumber); inputAudioBufferedWaveProvider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(Convert.ToInt32(settings.SampleRate), 1)); incomingAudioBufferedWaveProvider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(Convert.ToInt32(settings.SampleRate), 1)); inputAudioPanningProvider = new PanningSampleProvider(inputAudioBufferedWaveProvider.ToSampleProvider()); incomingAudioPanningProvider = new PanningSampleProvider(incomingAudioBufferedWaveProvider.ToSampleProvider()); inputAudioPanningProvider.Pan = 0.0f; mixingProvider = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(Convert.ToInt32(settings.SampleRate), 2)); mixingProvider.AddMixerInput(inputAudioPanningProvider); mixingProvider.AddMixerInput(incomingAudioPanningProvider); mixingProvider.ReadFully = true; asioOut.InitRecordAndPlayback(new SampleToWaveProvider(mixingProvider), 2, Convert.ToInt32(settings.SampleRate)); incomingBytes = new byte[Settings.GetInstance().BufferSize * 4]; asioOut.AudioAvailable += AsioOut_AudioAvailable; asioOut.Play(); connection.Connected += delegate (object source, EventArgs args) { inputAudioPanningProvider.Pan = +1.0f; incomingAudioPanningProvider.Pan = -1.0f; isAudioReceiving = true; isNewAudioAvailable = false; receivingAudio.Start(); }; connection.Disconnected += delegate (object source, EventArgs args) { inputAudioPanningProvider.Pan = 0.0f; isAudioReceiving = false; }; connection.StartMessageReceiving(); }
public unsafe void asioThread() { if (mSettingsMgr.Settings.MidiInDeviceNumbers == null) { mSettingsMgr.Settings.MidiInDeviceNumbers = new List <int>(); } for (int i = 0; i < mSettingsMgr.Settings.MidiInDeviceNumbers.Count(); i++) { mMidiDevice.OpenInPort(mSettingsMgr.Settings.MidiInDeviceNumbers[i]); } try { #if NAUDIO_ASIO mAsio = new NAudio.Wave.AsioOut(mSettingsMgr.Settings.AsioDeviceNr); #else mAsio = AsioDriver.SelectDriver(AsioDriver.InstalledDrivers[mSettingsMgr.Settings.AsioDeviceNr]); #endif } catch (Exception ex) { MessageBox.Show(ex.Message); } if (mAsio != null) { #if NAUDIO_ASIO if (mAsio != null) { mWaveProvider = new NAudio.Wave.BufferedWaveProvider(new NAudio.Wave.WaveFormat(44100, 16, 2)); mAsio.InitRecordAndPlayback(mWaveProvider, 2, 44100); mAsio.AudioAvailable += mAsio_AudioAvailable; mAsioBuffSize = mSettingsMgr.Settings.AsioBufferSize; } #else int p = mAsio.BufferSizex.PreferredSize; int max = mAsio.BufferSizex.MaxSize; int min = mAsio.BufferSizex.MinSize; if (mSettingsMgr.Settings.AsioBufferSize < min) { mSettingsMgr.Settings.AsioBufferSize = min; mSettingsMgr.SaveSettings(); } if (mSettingsMgr.Settings.AsioBufferSize > max) { mSettingsMgr.Settings.AsioBufferSize = max; mSettingsMgr.SaveSettings(); } mAsioBuffSize = mSettingsMgr.Settings.AsioBufferSize; // get our driver wrapper to create its buffers mAsio.CreateBuffers(mAsioBuffSize); // this is our buffer fill event we need to respond to mAsio.BufferUpdate += new EventHandler(asio_BufferUpdateHandler); mAsioOutputLeft = mAsio.OutputChannels[0]; // Use only 1x stereo out mAsioOutputRight = mAsio.OutputChannels[1]; mAsioInputBuffers = new AudioBufferInfo(2, mAsioBuffSize); mAsioInputLeft = mAsio.InputChannels[0]; // Use only 1x stereo in mAsioInputRight = mAsio.InputChannels[1]; #endif // todo: test //mMixLeft = new float[mAsioBuffSize]; //mMixRight = new float[mAsioBuffSize]; // and off we go stopWatchTicksForOneAsioBuffer = (long)(Stopwatch.Frequency / (mAsio.SampleRate / mAsioBuffSize)); #if NAUDIO_ASIO mAsioLeftInt32LSBBuff = new byte[mAsioBuffSize * 4]; mAsioRightInt32LSBBuff = new byte[mAsioBuffSize * 4]; mAsio.Play(); #else mAsio.Start(); #endif mAsioStartEvent.Set(); // Keep running untill stop request! mAsioStopEvent.Wait(); StopAsio(); } else { mIsAsioRunning = false; mAsioStartEvent.Set(); } }
private void Start() { // allow change device if (asioOut != null && (asioOut.DriverName != comboBoxAsioDevice.Text || asioOut.ChannelOffset != GetUserSpecifiedChannelOffset())) { asioOut.AudioAvailable -= OnAsioOutAudioAvailable; asioOut.Dispose(); asioOut = null; } int recordChannelCount = GetUserSpecifiedChannelCount(); // create device if necessary if (asioOut == null) { asioOut = new AsioOut(comboBoxAsioDevice.Text); asioOut.InputChannelOffset = GetUserSpecifiedChannelOffset(); asioOut.InitRecordAndPlayback(null, recordChannelCount, 44100); asioOut.AudioAvailable += OnAsioOutAudioAvailable; } fileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".wav"); writer = new WaveFileWriter(fileName, new WaveFormat(44100, recordChannelCount)); asioOut.Play(); timer1.Enabled = true; SetButtonStates(); }