コード例 #1
0
ファイル: AudioPluginEngine.cs プロジェクト: janbert/VSTiBox
        private void StopAsio()
        {
            if (mAsio != null)
            {
                mAsio.Stop();
                // Wait at least 200 ms for the last buffer update event to have happened
                Thread.Sleep(200);
#if NAUDIO_ASIO
                mAsio.Dispose();
#else
                mAsio.Release();
#endif
                mAsio = null;
            }
            mIsAsioRunning = false;
            mAsioStopCompleteEvent.Set();
        }
コード例 #2
0
 private void DeviceCB_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     tmp = new AsioOut(Convert.ToInt32(deviceCB.SelectedIndex));
     inputCB.Items.Clear();
     for (int i = 0; i < tmp.DriverInputChannelCount; i++)
     {
         inputCB.Items.Add(i + 1);
     }
     tmp.Dispose();
     tmp = null;
 }
コード例 #3
0
        /// <summary>
        /// 再生する
        /// </summary>
        /// <param name="deviceID">再生デバイスID</param>
        /// <param name="waveFile">wavファイル</param>
        /// <param name="isDelete">再生後に削除する</param>
        /// <param name="volume">ボリューム</param>
        public static void Play(
            string deviceID,
            string waveFile,
            bool isDelete,
            int volume)
        {
            var sw = Stopwatch.StartNew();

            var volumeAsFloat = ((float)volume / 100f);

            try
            {
                IWavePlayer player = null;
                IWaveProvider provider = null;

                switch (TTSYukkuriConfig.Default.Player)
                {
                    case WavePlayers.WaveOut:
                        player = new WaveOut()
                        {
                            DeviceNumber = int.Parse(deviceID),
                            DesiredLatency = PlayerLatencyWaveOut,
                        };
                        break;

                    case WavePlayers.DirectSound:
                        player = new DirectSoundOut(
                            Guid.Parse(deviceID),
                            PlayerLatencyDirectSoundOut);
                        break;

                    case WavePlayers.WASAPI:
                        player = new WasapiOut(
                            deviceEnumrator.GetDevice(deviceID),
                            AudioClientShareMode.Shared,
                            false,
                            PlayerLatencyWasapiOut);
                        break;

                    case WavePlayers.ASIO:
                        player = new AsioOut(deviceID);
                        break;
                }

                if (player == null)
                {
                    return;
                }

                provider = new AudioFileReader(waveFile)
                {
                    Volume = volumeAsFloat
                };

                player.Init(provider);
                player.PlaybackStopped += (s, e) =>
                {
                    player.Dispose();

                    var file = provider as IDisposable;
                    if (file != null)
                    {
                        file.Dispose();
                    }

                    if (isDelete)
                    {
                        File.Delete(waveFile);
                    }
                };

                // 再生する
                player.Play();
            }
            catch (Exception ex)
            {
                ActGlobals.oFormActMain.WriteExceptionLog(
                    ex,
                    "サウンドの再生で例外が発生しました。");
            }
            finally
            {
                sw.Stop();
                Debug.WriteLine(
                    "PlaySound ({0}) -> {1:N0} ticks",
                    TTSYukkuriConfig.Default.Player,
                    sw.ElapsedTicks);
            }
        }