Exemple #1
0
 private static void InitCommon(IWavePlayer waveout)
 {
     waveOut = waveout;
     mixer   = new MixingWaveProvider32();
     waveOut.Init(mixer);
     waveformat      = new WaveFormat(44100, 2);
     DctWaveProvider = new Dictionary <string, IWaveProvider>();
     audiofilereader = null;
 }
        //Cleart de lijst met Waves en gooit de Mixer weg en herinstatieert hem.
        public static void StopAll()
        {
            outputDevice.Stop();

            mixingWaveProvider = null;
            mixingWaveProvider = new MixingWaveProvider32();
            WaveList.Clear();
            Cleanup();
        }
Exemple #3
0
    public static void Init(string drivername, int channeloffset)
    {
        mixer = new MixingWaveProvider32();

        waveOut = new AsioOut(drivername);
        waveOut.ChannelOffset = channeloffset;
        waveOut.Init(mixer);
        waveformat = new WaveFormat(44100, 2);

        DctWaveProvider = new Dictionary <string, IWaveProvider>();
    }
Exemple #4
0
    public static void Init(string drivername)
    {
        mixer = new MixingWaveProvider32();

        waveOut = new AsioOut(drivername);//NAudio.CoreAudioApi.AudioClientShareMode.Exclusive,100);
        //waveOut = new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared, 100);
        waveOut.Init(mixer);
        waveformat = new WaveFormat(44100, 2);

        DctWaveProvider = new Dictionary <string, IWaveProvider>();
    }
Exemple #5
0
        private void ResetOutput()
        {
            SoundOutput.Dispose();

            SoundMixer = new MixingWaveProvider32(new List <WaveChannel32> {
                PitchSelector.GetWavePlayer(Pitch.Empty, WaveForm).Channel
            });
            SoundOutput = new DirectSoundOut();
            SoundOutput.Init(SoundMixer);
            SoundOutput.Play();
        }
            public void Init(
                MMDevice device)
            {
                if (device == null)
                {
                    return;
                }

                var config = Config.Instance;

                this.DeviceID = device.ID;

                this.Player = new WasapiOut(
                    device,
                    AudioClientShareMode.Shared,
                    false,
                    config.WasapiLatency);

                var list = new List <BufferedWaveProvider>();

                for (int i = 0; i < config.WasapiMultiplePlaybackCount; i++)
                {
                    var buffer = new BufferedWaveProvider(this.OutputFormat)
                    {
                        BufferDuration          = config.WasapiLoopBufferDuration,
                        DiscardOnBufferOverflow = true,
                    };

                    list.Add(buffer);
                }

                // シンクロ再生用のバッファを追加しておく
                list.Add(new BufferedWaveProvider(this.OutputFormat)
                {
                    BufferDuration          = config.WasapiLoopBufferDuration,
                    DiscardOnBufferOverflow = true,
                });

                this.Buffers = list.ToArray();

                // ミキサを生成する
                var mixer = new MixingWaveProvider32(
                    this.Buffers.Select(x => new Wave16ToFloatProvider(x)));

                this.Player.Init(mixer);
                this.Player.Play();
                this.Player.SetBackground();
            }
        public static void PlaySound(string path)
        {
            soundStream = getWaveStream(path);

            var mixer = new MixingWaveProvider32();

            soundWaveChannel = new WaveChannel32(soundStream);
            soundWaveChannel.PadWithZeroes = false;
            // set the volume of background file
            soundWaveChannel.Volume = soundVolume;
            //add stream into the mixer
            mixer.AddInputStream(soundWaveChannel);

            soundOutput.Init(mixer);

            soundOutput.Play();
        }
        public void MixWaveProviders(IList <WavePlayer> inputs)
        {
            try
            {
                _mixer = new MixingWaveProvider32(inputs.Select(c => c._channels));

                _waveStream = inputs[0]._reader;
                foreach (var obj in inputs)
                {
                    _waveStreamList.Add(obj._reader);
                }
                _device.Init(_mixer);
            }
            catch (Exception exception)
            {
                MessageBox.Show("The Driver is already in use", "Errror", MessageBoxButton.OK, MessageBoxImage.Error);
                throw new ArgumentException(exception.Message, exception);
            }
        }
        public void Play(IEnumerable <Beeper> beepers, bool looping = false)
        {
            Beepers = beepers;

            MixingWaveProvider32 mixer = new MixingWaveProvider32();

            foreach (Beeper beeper in beepers)
            {
                beeper.Stream.Seek(0, SeekOrigin.Begin);
                mixer.AddInputStream(new WaveChannel32(new WaveFileReader(beeper.Stream)));
            }

            Sound = new WaveOut(WaveCallbackInfo.FunctionCallback());
            Sound.Init(mixer);

            IsLooping              = looping;
            Sound.PlaybackStopped += OnSoundPlayBackStopped;
            Sound.Play();
            IsPlaying = true;
        }
Exemple #10
0
        public MainWindow()
        {
            _shunterLocoSimulation = new ShunterLocoSimulation();
            _trainSimulation       = new TrainSimulation(_shunterLocoSimulation);
            InitializeComponent();

            var soundMixer = new MixingWaveProvider32();

            InitializeSounds(soundMixer);

            _waveOut.Init(soundMixer);
            _waveOut.Volume = 1.0f;

            DispatcherTimer timer = new DispatcherTimer();

            timer.Interval = TimeSpan.FromSeconds(TimerInterval);
            timer.Tick    += timer_Tick;
            timer.Start();
            _waveOut.Play();
        }
Exemple #11
0
        public void MixWaveProviders(IList <WavePlayer> inputs)
        {
            try
            {
                _mixer = new MixingWaveProvider32(inputs.Select(c => c._channels));


                _waveStream = inputs[0]._reader;
                foreach (var obj in inputs)
                {
                    _waveStreamList.Add(obj._reader);
                }

                _device.Init(_mixer);
            }
            catch (Exception exception)
            {
                MessageBox.Show("All incoming channels must have the same format", "Errror", MessageBoxButton.OK, MessageBoxImage.Error);
                Log.Write(LogLevel.Error, "File Name : AsioAudioService.cs, Method Name : MixWaveProviders(), Line Number : 131");
                throw new ArgumentException(exception.Message, exception);
            }
        }
        public MixingWaveProvider32 Overlay(ISampleProvider music, ISampleProvider watermark, double watermarkOffset)
        {
            if (music == null || watermark == null)
            {
                throw new ArgumentNullException("Не удалось наложить водяной знак. Трек или водяной знак были пустыми");
            }

            // Инициализация энкодера(чтобы получать на выходе любой формат)
            NAudio.MediaFoundation.MediaFoundationApi.Startup();

            var sampleProvider = new OffsetSampleProvider(watermark.ToWaveProvider().ToSampleProvider()); //Деление на sample

            sampleProvider.DelayBy = TimeSpan.FromSeconds(watermarkOffset);                               //Добавление задержки

            var watermarkWaveProvider = sampleProvider.ToWaveProvider();                                  //Перевод в wave водяного знака
            var musicWaveProvider     = music.ToWaveProvider();                                           //Перевод в wave музыки

            // Слияние трека и водяного знака
            var result = new MixingWaveProvider32(new[] { musicWaveProvider, watermarkWaveProvider });

            result.ToSampleProvider().ToWaveProvider16();

            return(result);
        }
Exemple #13
0
        public void Start(string serverIpAddress, string clientID, string inputDevice, string outputDevice)
        {
            _startTime = DateTime.Now;
            callsign   = clientID;

            taskDataPub = new Task(() => TaskDataPub(cancelTokenSource.Token, dataPublishInputQueue, "tcp://" + serverIpAddress + ":60001"), TaskCreationOptions.LongRunning);
            taskDataPub.Start();
            taskDataSub = new Task(() => TaskDataSub(cancelTokenSource.Token, "tcp://" + serverIpAddress + ":60000"), TaskCreationOptions.LongRunning);
            taskDataSub.Start();
            taskAudioPub = new Task(() => TaskAudioPub(cancelTokenSource.Token, audioPublishInputQueue, "tcp://" + serverIpAddress + ":60003"), TaskCreationOptions.LongRunning);
            taskAudioPub.Start();
            taskAudioSub = new Task(() => TaskAudioSub(cancelTokenSource.Token, audioPlaybackQueue, "tcp://" + serverIpAddress + ":60002"), TaskCreationOptions.LongRunning);
            taskAudioSub.Start();

            _segmentFrames   = 960;
            _encoder         = OpusEncoder.Create(48000, 1, FragLabs.Audio.Codecs.Opus.Application.Voip);
            _encoder.Bitrate = 65536;
            _decoder         = OpusDecoder.Create(48000, 1);
            _bytesPerSegment = _encoder.FrameByteCount(_segmentFrames);

            _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback());
            _waveIn.BufferMilliseconds = 50;
            Console.WriteLine("Input device: " + WaveIn.GetCapabilities(0).ProductName);
            _waveIn.DeviceNumber   = MapInputDevice(inputDevice);
            _waveIn.DataAvailable += _waveIn_DataAvailable;
            _waveIn.WaveFormat     = new WaveFormat(48000, 16, 1);

            networkAudioBuffers = new List <ClientMixerInput>
            {
                new ClientMixerInput()
                {
                    InUse    = false,
                    Provider = new BufferedWaveProvider(new WaveFormat(48000, 16, 1))
                               //Provider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(48000, 1))
                },
                new ClientMixerInput()
                {
                    InUse    = false,
                    Provider = new BufferedWaveProvider(new WaveFormat(48000, 16, 1))
                               //Provider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(48000, 1))
                },
                new ClientMixerInput()
                {
                    InUse    = false,
                    Provider = new BufferedWaveProvider(new WaveFormat(48000, 16, 1))
                               //Provider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(48000, 1))
                },
                new ClientMixerInput()
                {
                    InUse    = false,
                    Provider = new BufferedWaveProvider(new WaveFormat(48000, 16, 1))
                               //Provider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(48000, 1))
                }
            };

            mixer = new MixingWaveProvider32();
            //mixer.ReadFully = true;
            foreach (var buffer in networkAudioBuffers)
            {
                mixer.AddInputStream(new SampleToWaveProvider(new Equalizer(new WaveToSampleProvider(new Wave16ToFloatProvider(buffer.Provider)), bands)));
            }
            //_playBuffer = new BufferedWaveProvider(mixer.WaveFormat);
            //mixer.AddInputStream(_playBuffer);
            taskAudioPlayback = new Task(() => TaskAudioPlayback(cancelTokenSource.Token, audioPlaybackQueue), TaskCreationOptions.LongRunning);
            taskAudioPlayback.Start();

            //_waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
            _waveOut = new WaveOut();
            Console.WriteLine("Output device: " + WaveOut.GetCapabilities(0).ProductName);
            _waveOut.DeviceNumber   = MapOutputDevice(outputDevice);
            _waveOut.DesiredLatency = 200;      //Default is 300
            //_waveOut.Init(_playBuffer);
            _waveOut.Init(mixer);
            _waveOut.Play();
            _waveIn.StartRecording();

            if (_timer == null)
            {
                _timer          = new System.Timers.Timer();
                _timer.Interval = 1000;
                _timer.Elapsed += _timer_Elapsed;
            }
            _timer.Start();

            started = true;
        }
 public AudioMixer()
 {
     WaveProvider = new MixingWaveProvider32();
     Output       = new DirectSoundOut();
 }
 public void SaveToFile(MixingWaveProvider32 music, string path)
 {
     MediaFoundationEncoder.EncodeToMp3(music, path, 320000);
     //WaveFileWriter.CreateWaveFile(path, music);
 }