コード例 #1
1
ファイル: Audio.cs プロジェクト: bisquitthe/RockNRolla
        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)
            {
                
            };
        }
コード例 #2
0
ファイル: ASIO.cs プロジェクト: Surigoma/Electronicboard
 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();
 }
コード例 #3
0
ファイル: Audio.cs プロジェクト: bisquitthe/RockNRolla
        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();
        }
コード例 #4
0
ファイル: AudioPluginEngine.cs プロジェクト: janbert/VSTiBox
        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();
            }
        }
コード例 #5
0
        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();
        }