Beispiel #1
0
        /// <summary>
        /// Contructor.
        /// </summary>
        public SoftPhoneUtils()
        {
            try
            {
                if (LicenseManager.Instance.LicenseType.ToString().Equals("Expired") || LicenseManager.Instance.LicenseType.ToString().Equals("Trial"))
                {
                    var userName = "******";
                    var key      = "UDoyMDMzLTEyLTI1LFVQOjIwMzMtMDEtMDEsTUNDOjUwMCxNUEw6NTAwLE1TTEM6NTAwLE1GQzo1MDAsRzcyOTp0cnVlLE1XUEM6NTAwLE1JUEM6NTAwfHFQZDBhQnhlaEFGaTlNMmV4cXZxaHUyVE5rMWh2S0FzaUZlVlowbFFseTZWZ3JKbmFMTXh3ZVV2elBGcEliTFpwNHZtZDArZlZwc2VkRGpjQWdKR3ZnPT0=";
                    LicenseManager.Instance.SetLicense(userName, key);
                }
            }
            catch (Exception e)
            {
                log.Error(e);
            }

            //Crear instancia softPhone. Rango 5000-10000
            softphone = SoftPhoneFactory.CreateSoftPhone(softPhoneRangeMin, softPhoneRangeMax);

            softphone.EnableCodec(0);
            softphone.EnableCodec(8);//PCMU(G711U)=> 0, PCMA(G711A)=> 8
            log.Info(softphone.Codecs);

            mediaSender = new PhoneCallAudioSender();
            connector   = new MediaConnector();
        }
        /// <summary>
        /// Initializes the audio handlers (microphone, speaker, DTMF player etc.).
        /// </summary>
        private void InitAudio()
        {
            // ----- CREATE -----
            // devices
            Microphone = Microphone.GetDefaultDevice();
            Speaker    = Speaker.GetDefaultDevice();

            // audio processors
            if (Microphone == null)
            {
                AudioEnhancer = new AudioQualityEnhancer(new AudioFormat());
            }
            else
            {
                AudioEnhancer = new AudioQualityEnhancer(Microphone.MediaFormat);
            }
            AudioEnhancer.SetEchoSource(Speaker);
            _dtmfPlayer = new DtmfEventWavePlayer();

            // ringtones
            var ringbackStream = LoadRingbackStream();
            var ringtoneStream = LoadRingtoneStream();

            _ringtonePlayer = new WaveStreamPlayback(ringtoneStream, true, false);
            _ringbackPlayer = new WaveStreamPlayback(ringbackStream, true, false);

            // mixers
            //outgoingDataMixer = new AudioForwarder();
            //speakerMixer = new AudioForwarder();
            //recordDataMixer = new AudioForwarder();

            // phone handlers
            _phoneCallAudioSender   = new PhoneCallAudioSender();
            _phoneCallAudioReceiver = new PhoneCallAudioReceiver();


            // ----- CONNECT -----
            // connect outgoing
            //audioConnector.Connect(AudioEnhancer, outgoingDataMixer);
            //audioConnector.Connect(outgoingDataMixer, phoneCallAudioSender);
            //audioConnector.Connect(outgoingDataMixer, recordDataMixer);
            _audioConnector.Connect(AudioEnhancer, _phoneCallAudioSender);
            if (Microphone != null)
            {
                Microphone.LevelChanged += (Microphone_LevelChanged);
                _audioConnector.Connect(Microphone, AudioEnhancer);
            }

            // connect incoming
            if (Speaker != null)
            {
                Speaker.LevelChanged += (Speaker_LevelChanged);
                _audioConnector.Connect(_phoneCallAudioReceiver, Speaker);
                _audioConnector.Connect(_ringtonePlayer, Speaker);
                _audioConnector.Connect(_ringbackPlayer, Speaker);
                _audioConnector.Connect(_dtmfPlayer, Speaker);
            }
        }
 public void OzekiInitialization()
 {
     softphone     = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
     microphone    = Microphone.GetDefaultDevice();
     speaker       = Speaker.GetDefaultDevice();
     mediaSender   = new PhoneCallAudioSender();
     mediaReceiver = new PhoneCallAudioReceiver();
     connector     = new MediaConnector();
 }
Beispiel #4
0
        public CallHandler(Softphone softphone, IPhoneCall Call, PhoneCallAudioSender mediaSender)
        {
            _softphone = softphone;

            _Call        = Call;
            _mediaSender = new PhoneCallAudioSender();
            _connector   = new MediaConnector();
            _mediaSender = mediaSender;
        }
        /// <summary>
        /// Handler of making call and receiving call
        /// </summary>
        /// <param name="registerName">The SIP ID what will registered into your PBX</param>
        /// <param name="domainHost">The address of your PBX</param>
        public CallHandlerSample(string registerName, string domainHost)
        {
            microphone = Microphone.GetDefaultDevice();
            speaker = Speaker.GetDefaultDevice();
            connector = new MediaConnector();
            mediaSender = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();

            InitializeSoftPhone(registerName, domainHost);
        }
        /// <summary>
        /// Handler of making call and receiving call
        /// </summary>
        /// <param name="registerName">The SIP ID what will registered into your PBX</param>
        /// <param name="domainHost">The address of your PBX</param>
        public CallHandlerSample(string registerName, string domainHost)
        {
            microphone    = Microphone.GetDefaultDevice();
            speaker       = Speaker.GetDefaultDevice();
            connector     = new MediaConnector();
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();

            InitializeSoftPhone(registerName, domainHost);
        }
Beispiel #7
0
 private void frmTelefono_Load(object sender, EventArgs e)
 {
     //Inicializa los componentes para las llamadas
     _microphone    = Microphone.GetDefaultDevice();
     _speaker       = Speaker.GetDefaultDevice();
     _connector     = new MediaConnector();
     _mediaSender   = new PhoneCallAudioSender();
     _mediaReceiver = new PhoneCallAudioReceiver();
     InitializeSoftphone();
 }
        /// <summary>
        /// Default constructor, initalizes the softphone with deafult parameters.
        /// </summary>
        public Softphone()
        {
            _softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);

            _microphone    = Microphone.GetDefaultDevice();
            _speaker       = Speaker.GetDefaultDevice();
            _connector     = new MediaConnector();
            _mediaSender   = new PhoneCallAudioSender();
            _mediaReceiver = new PhoneCallAudioReceiver();
        }
Beispiel #9
0
        public CallHandler(ICall call)
        {
            _call = call;

            _phoneCallAudioSender = new PhoneCallAudioSender();
            _mp3Player            = new MP3StreamPlayback(@"..\..\test.mp3");
            _mp3Player.Stopped   += mp3Player_Stopped;
            _phoneCallAudioSender.AttachToCall(call);
            _mediaConnector = new MediaConnector();
            _mediaConnector.Connect(_mp3Player, _phoneCallAudioSender);
        }
Beispiel #10
0
        public Softphone()
        {
            softphone     = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
            microphone    = Microphone.GetDefaultDevice();
            speaker       = Speaker.GetDefaultDevice();
            connector     = new MediaConnector();
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();

            incomingCall = false;
        }
Beispiel #11
0
 static void OzekiInit()
 {
     //softphone = SoftPhoneFactory.CreateSoftPhone(6000, 6200);
     softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
     //Console.WriteLine("OZEKI: CreatedSoftPhone");
     microphone    = Microphone.GetDefaultDevice();
     speaker       = Speaker.GetDefaultDevice();
     mediaSender   = new PhoneCallAudioSender();
     mediaReceiver = new PhoneCallAudioReceiver();
     connector     = new MediaConnector();
 }
Beispiel #12
0
        public PhoneForm()
        {
            InitializeComponent();
            softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);

            microphone    = Microphone.GetDefaultDevice();
            speaker       = Speaker.GetDefaultDevice();
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();
            connector     = new MediaConnector();
        }
Beispiel #13
0
        public SoftphoneEngine()
        {
            AlarmList  = new ObservableCollection <string>();
            alarmCalls = new List <OutGoingCallEngine>();

            _connector   = new MediaConnector();
            _videoSender = new PhoneCallVideoSender();
            _audioSender = new PhoneCallAudioSender();

            Softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
            Softphone.IncomingCall += softphone_IncomingCall;
        }
		public SoftphoneEngine()
		{
            AlarmList = new ObservableCollection<string>();
            alarmCalls = new List<OutGoingCallEngine>();

            _connector = new MediaConnector();
            _videoSender = new PhoneCallVideoSender();
            _audioSender = new PhoneCallAudioSender();

			Softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
			Softphone.IncomingCall += softphone_IncomingCall;
		}
Beispiel #15
0
        void form_CallAssistant_Load(object sender, EventArgs e)
        {
            _microphone    = Microphone.GetDefaultDevice();
            _speaker       = Speaker.GetDefaultDevice();
            _connector     = new MediaConnector();
            _mediaSender   = new PhoneCallAudioSender();
            _mediaReceiver = new PhoneCallAudioReceiver();

            _databaseManager = new DatabaseManager();

            InitializeSoftphone();
        }
        public OutGoingCallEngine(string dialedNumber, ISoftPhone softPhone, IPhoneLine phoneLine)
        {
            _connector = new MediaConnector();
            _videoSender = new PhoneCallVideoSender();
            _audioSender = new PhoneCallAudioSender();

            var dial = new DialParameters(dialedNumber) { CallType = CallType.AudioVideo };
            Call = softPhone.CreateCallObject(phoneLine, dial);
            Call.CallStateChanged += _call_CallStateChanged;        

            _videoSender.AttachToCall(Call);
            _audioSender.AttachToCall(Call);
        }
Beispiel #17
0
        /// <summary>
        /// Default constructor, initalizes the softphone with deafult parameters.
        /// </summary>
        public SoftPhone()
        {
            //you can specify the User-Agent of the softphone
            string userAgent = "ORX SoftPhone";

            _softphone     = SoftPhoneFactory.CreateSoftPhone(5000, 10000, userAgent);
            _microphone    = Microphone.GetDefaultDevice();
            _speaker       = Speaker.GetDefaultDevice();
            _connector     = new MediaConnector();
            _mediaSender   = new PhoneCallAudioSender();
            _mediaReceiver = new PhoneCallAudioReceiver();

            _incomingCall = false;

            MediaHandlers = new MediaHandlers();
            InitMedia();
        }
        public OutGoingCallEngine(string dialedNumber, ISoftPhone softPhone, IPhoneLine phoneLine)
        {
            _connector   = new MediaConnector();
            _videoSender = new PhoneCallVideoSender();
            _audioSender = new PhoneCallAudioSender();

            var dial = new DialParameters(dialedNumber)
            {
                CallType = CallType.AudioVideo
            };

            Call = softPhone.CreateCallObject(phoneLine, dial);
            Call.CallStateChanged += _call_CallStateChanged;

            _videoSender.AttachToCall(Call);
            _audioSender.AttachToCall(Call);
        }
Beispiel #19
0
        //OZEKI
        void Ozeki()
        {
            softphone = SoftPhoneFactory.CreateSoftPhone(6000, 6200);

            microphone    = Microphone.GetDefaultDevice();
            speaker       = Speaker.GetDefaultDevice();
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();
            connector     = new MediaConnector();

            var config = new DirectIPPhoneLineConfig(local_ip, 5060);

            phoneLine = softphone.CreateDirectIPPhoneLine(config);
            phoneLine.RegistrationStateChanged += line_RegStateChanged;
            softphone.IncomingCall             += softphone_IncomingCall;
            softphone.RegisterPhoneLine(phoneLine);
        }
        ISoftPhone softphone; // softphone object

        #endregion Fields

        #region Methods

        public string Get(string id)
        {
            Regex regexObj = new Regex(@"[^\d]");
            id2 = regexObj.Replace(id, "");
            softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
            var registrationRequired = true;
            var userName = "******";
            var displayName = "730";
            var authenticationId = "730";
            var registerPassword = "";
            var domainHost = "192.168.60.225";
            var domainPort = 5060;
            var account = new SIPAccount(registrationRequired, displayName, userName, authenticationId, registerPassword, domainHost, domainPort);
            RegisterAccount(account);
            mediaSender = new PhoneCallAudioSender();
            connector = new MediaConnector();
            int count = 0;
            while (done == 0 && count < 120) { count++; Thread.Sleep(1000); }
            return message;
        }
        private void Nasluchuj()
        {
            softphone     = SoftPhoneFactory.CreateSoftPhone(zalogowanyUzytkownik.AdresIP, 4900, 5100);
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();
            connector     = new MediaConnector();
            var config = new DirectIPPhoneLineConfig(zalogowanyUzytkownik.AdresIP.ToString(), 5060);

            phoneLine = softphone.CreateDirectIPPhoneLine(config);
            phoneLine.Config.SRTPMode           = Ozeki.Common.SRTPMode.Prefer;
            phoneLine.RegistrationStateChanged += line_RegStateChanged;
            phoneLine.SIPAccount.UserName       = zalogowanyUzytkownik.login;
            phoneLine.SIPAccount.DisplayName    = zalogowanyUzytkownik.imie + " " + zalogowanyUzytkownik.nazwisko;
            System.Windows.Application.Current.Dispatcher.Invoke(() => { System.Windows.Application.Current.MainWindow.Title = "SuperIP Phone - " + zalogowanyUzytkownik.login + "@" + zalogowanyUzytkownik.AdresIP + ":" + phoneLine.SIPAccount.DomainServerPort; });//ustawienie nazwy okna
            softphone.IncomingCall += softphone_IncomingCall;
            phoneLine.InstantMessaging.MessageReceived += PhoneLine_InstantMessageReceived;
            softphone.RegisterPhoneLine(phoneLine);
            foreach (var kodek in softphone.Codecs)
            {
                softphone.EnableCodec(kodek.PayloadType);
            }
        }
Beispiel #22
0
        void Glowna(string DocIP)
        {
            softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);

            microphone    = Microphone.GetDefaultDevice();
            speaker       = Speaker.GetDefaultDevice();
            mediaSender   = new PhoneCallAudioSender();
            mediaReceiver = new PhoneCallAudioReceiver();
            connector     = new MediaConnector();

            DoceloweIP = DocIP;

            //Console.WriteLine("Please enter the IP address of your machine: ");
            //var ipAddress = LocalIP;
            var config = new DirectIPPhoneLineConfig(LocalIP, 5060);

            //var config = new DirectIPPhoneLineConfig(textBox1.Text, 5060);
            phoneLine = softphone.CreateDirectIPPhoneLine(config);
            phoneLine.RegistrationStateChanged += line_RegStateChanged;
            softphone.IncomingCall             += softphone_IncomingCall;
            softphone.RegisterPhoneLine(phoneLine);

            //Console.ReadLine();
        }
        /// <summary>
        /// Creates the incoming and outgoing media handlers such as microphone or speaker
        /// </summary>
        private void CreateMediaHandlers()
        {
            MediaHandlerFactory factory = new MediaHandlerFactory();
            activeAudioCallListener = factory.CreateSoftPhoneCallListener();
            activeVideoCallListener = factory.CreateSoftPhoneVideoCallListener();

            phoneCallAudioReceiver = activeAudioCallListener.GetComponent("AudiReceiver") as PhoneCallAudioReceiver;
            phoneCallAudioSender = activeAudioCallListener.GetComponent("AudioSender") as PhoneCallAudioSender;

            phonecallVideoSender = activeVideoCallListener.GetComponent("VideoSender") as PhoneCallVideoSender;
            phonecallVideoReceiver = activeVideoCallListener.GetComponent("VideoReceiver") as PhoneCallVideoReceiver;

            mediaConnector = activeAudioCallListener.MediaConnector;

            microphone = activeAudioCallListener.GetComponent("Microphone") as Microphone;
            if (microphone != null)
            {
                microphone.LevelChanged += (Microphone_LevelChanged);
            }

            speaker = activeAudioCallListener.GetComponent("Speaker") as Speaker;
            if (speaker != null)
            {
                speaker.LevelChanged += (Speaker_LevelChanged);
            }

            incomingDataMixer = activeAudioCallListener.GetComponent("SpeakerMixer") as AudioMixerMediaHandler;
            camera = activeVideoCallListener.GetComponent("WebCamera") as WebCamera;

            remoteImageHandler = activeVideoCallListener.GetComponent("RemoteImageHandler") as ImageProvider<Image>;
            localImageHandler = activeVideoCallListener.GetComponent("LocalImageHandler") as ImageProvider<Image>;

            AudioProcessor = activeAudioCallListener.GetComponent("AudioProcessor") as AudioQualityEnhancer;
            outgoingDataMixer = activeAudioCallListener.GetComponent("OutGoingDataMixer") as AudioMixerMediaHandler;
            RecordDataMixer = activeAudioCallListener.GetComponent("RecordDataMixer") as AudioMixerMediaHandler;

            dtmfEventWavePlayer = activeAudioCallListener.GetComponent("DTMF") as DtmfEventWavePlayer;
            ringtoneWavePlayer = activeAudioCallListener.GetComponent("Ringtones") as PhoneCallStateWavePlayer;

            Stream basicRing = Assembly.GetExecutingAssembly().GetManifestResourceStream(
                "OzekiDemoSoftphone.Resources.basic_ring.wav"
                );

            ringtoneWavePlayer.UpdateIncomingStateStream(CallState.Ringing, @"..\..\Resources\basic_ring.wav");
            ringtoneWavePlayer.UpdateOutgoingStateStream(CallState.Ringing, @"..\..\Resources\ringback.wav");
        }
        /// <summary>
        /// Creates a complex phone call listener, built up from microphone, speaker, waverecorder, waveplayer, dtmf and ringtone sounds.
        /// </summary>
        /// <returns>The media handler collection that represent the phone call listener.</returns>
        public MediaHandlerCollection CreateSoftPhoneCallListener()
        {
            var phoneCallAudioReceiver = new PhoneCallAudioReceiver();
            var phoneCallAudioSender = new PhoneCallAudioSender();

            var microphone =  Microphone.GetDefaultDevice();
            var speaker =  Speaker.GetDefaultDevice();

            var audioProcessor = new AudioQualityEnhancer();
            audioProcessor.SetEchoSource(speaker);   // Handles the audio that comes from the PhoneCallListener

            var outgoingDataMixer = new AudioMixerMediaHandler();
            var recordDataMixer = new AudioMixerMediaHandler();
            var speakerMixer = new AudioMixerMediaHandler();

            var dtmf = new DtmfEventWavePlayer();
            var ringtones = new PhoneCallStateWavePlayer(
                commonWaveFormat,
                outGoingToneStreams,
                incomingToneStreams
            );

            if (microphone != null) mediaConnector.Connect(microphone, audioProcessor);
            mediaConnector.Connect(audioProcessor, outgoingDataMixer);
            mediaConnector.Connect(outgoingDataMixer, phoneCallAudioSender);
            // No WaveStreamPlayback (see CreateWaveStreamPlayback method)

            //mediaConnector.Connect(phoneCallAudioReceiver, speaker);
            mediaConnector.Connect(phoneCallAudioReceiver, speakerMixer);
            mediaConnector.Connect(dtmf, speakerMixer);
            mediaConnector.Connect(ringtones, speakerMixer);
            if (speaker != null) mediaConnector.Connect(speakerMixer, speaker);

            mediaConnector.Connect(phoneCallAudioReceiver, recordDataMixer);
            mediaConnector.Connect(outgoingDataMixer, recordDataMixer);

            // No WaveStreamRecorder (see CreateWaveStreamRecorder method)

            /*
             * Media Connections:
             *
             * +---------------------------------------------------------------+
             * |                           PhoneCall                           |**************
             * +---------------------------------------------------------------+  *          *
             *              ^^                              VV                    *          *
             *     +--------------------+             +----------------------+  +----+   +---------+
             *     |PhoneCallAudioSender|             |PhoneCallAudioReceiver|  |DMTF|   |Ringtones|
             *     +--------------------+             +----------------------+  +----+   +---------+
             *                ^^                            V              V       V          |
             *       +-----------------+              +---------------+   +------------+      |
             *       |OutgoingDataMixer|----- >> -----|RecordDataMixer|   |SpeakerMixer|--<<--/
             *       +-----------------+              +---------------+   +------------+
             *         ^^          ^^                       V                      |
             *+--------------+   +------------------+    +------------------+      |
             *|AudioProcessor|   |WaveStreamPlayback|    |WaveStreamRecorder|      V
             *+--------------+   +------------------+    +------------------+      V
             *        ^^                                                           |
             *    +----------+                                                 +-------+
             *    |Microphone|                                                 |Speaker|
             *    +----------+                                                 +-------+
             */
            var mediaHandlers = new Dictionary<string, VoIPMediaHandler>
                                    {
                                        {"AudioProcessor", audioProcessor},
                                        {"OutGoingDataMixer", outgoingDataMixer},
                                        {"RecordDataMixer", recordDataMixer},
                                        {"SpeakerMixer", speakerMixer},
                                        {"DTMF", dtmf},
                                        {"Ringtones", ringtones},

                                        {"AudioSender",phoneCallAudioSender},
                                        {"AudiReceiver",phoneCallAudioReceiver},
            };
            if(microphone != null)
                mediaHandlers.Add("Microphone", microphone);
            if (speaker != null)
                mediaHandlers.Add("Speaker", speaker);

            return new MediaHandlerCollection(mediaConnector,mediaHandlers);
        }
Beispiel #25
0
        /// <summary>
        /// Creates a complex phone call listener, built up from microphone, speaker, waverecorder, waveplayer, dtmf and ringtone sounds.
        /// </summary>
        /// <returns>The media handler collection that represent the phone call listener.</returns>
        public MediaHandlerCollection CreateSoftPhoneCallListener()
        {
            var phoneCallAudioReceiver = new PhoneCallAudioReceiver();
            var phoneCallAudioSender   = new PhoneCallAudioSender();

            var microphone = Microphone.GetDefaultDevice();
            var speaker    = Speaker.GetDefaultDevice();


            var audioProcessor = new AudioQualityEnhancer();

            audioProcessor.SetEchoSource(speaker);   // Handles the audio that comes from the PhoneCallListener

            var outgoingDataMixer = new AudioMixerMediaHandler();
            var recordDataMixer   = new AudioMixerMediaHandler();
            var speakerMixer      = new AudioMixerMediaHandler();

            var dtmf      = new DtmfEventWavePlayer();
            var ringtones = new PhoneCallStateWavePlayer(
                commonWaveFormat,
                outGoingToneStreams,
                incomingToneStreams
                );


            if (microphone != null)
            {
                mediaConnector.Connect(microphone, audioProcessor);
            }
            mediaConnector.Connect(audioProcessor, outgoingDataMixer);
            mediaConnector.Connect(outgoingDataMixer, phoneCallAudioSender);
            // No WaveStreamPlayback (see CreateWaveStreamPlayback method)

            //mediaConnector.Connect(phoneCallAudioReceiver, speaker);
            mediaConnector.Connect(phoneCallAudioReceiver, speakerMixer);
            mediaConnector.Connect(dtmf, speakerMixer);
            mediaConnector.Connect(ringtones, speakerMixer);
            if (speaker != null)
            {
                mediaConnector.Connect(speakerMixer, speaker);
            }

            mediaConnector.Connect(phoneCallAudioReceiver, recordDataMixer);
            mediaConnector.Connect(outgoingDataMixer, recordDataMixer);



            // No WaveStreamRecorder (see CreateWaveStreamRecorder method)

            /*
             * Media Connections:
             *
             * +---------------------------------------------------------------+
             * |                           PhoneCall                           |**************
             * +---------------------------------------------------------------+  *          *
             *              ^^                              VV                    *          *
             *     +--------------------+             +----------------------+  +----+   +---------+
             *     |PhoneCallAudioSender|             |PhoneCallAudioReceiver|  |DMTF|   |Ringtones|
             *     +--------------------+             +----------------------+  +----+   +---------+
             *                ^^                            V              V       V          |
             *       +-----------------+              +---------------+   +------------+      |
             *       |OutgoingDataMixer|----- >> -----|RecordDataMixer|   |SpeakerMixer|--<<--/
             *       +-----------------+              +---------------+   +------------+
             *         ^^          ^^                       V                      |
             *+--------------+   +------------------+    +------------------+      |
             *|AudioProcessor|   |WaveStreamPlayback|    |WaveStreamRecorder|      V
             *+--------------+   +------------------+    +------------------+      V
             *        ^^                                                           |
             *    +----------+                                                 +-------+
             *    |Microphone|                                                 |Speaker|
             *    +----------+                                                 +-------+
             */
            var mediaHandlers = new Dictionary <string, VoIPMediaHandler>
            {
                { "AudioProcessor", audioProcessor },
                { "OutGoingDataMixer", outgoingDataMixer },
                { "RecordDataMixer", recordDataMixer },
                { "SpeakerMixer", speakerMixer },
                { "DTMF", dtmf },
                { "Ringtones", ringtones },

                { "AudioSender", phoneCallAudioSender },
                { "AudiReceiver", phoneCallAudioReceiver },
            };

            if (microphone != null)
            {
                mediaHandlers.Add("Microphone", microphone);
            }
            if (speaker != null)
            {
                mediaHandlers.Add("Speaker", speaker);
            }


            return(new MediaHandlerCollection(mediaConnector, mediaHandlers));
        }
        /// <summary>
        /// Initializes the audio handlers (microphone, speaker, DTMF player etc.).
        /// </summary>
        private void InitAudio()
        {
            // ----- CREATE -----
            // devices
            Microphone = Microphone.GetDefaultDevice();
            Speaker = Speaker.GetDefaultDevice();

            // audio processors
            AudioEnhancer = new AudioQualityEnhancer();
            AudioEnhancer.SetEchoSource(Speaker);
            dtmfPlayer = new DtmfEventWavePlayer();

            // ringtones
            var ringbackStream = LoadRingbackStream();
            var ringtoneStream = LoadRingtoneStream();
            ringtonePlayer = new WaveStreamPlayback(ringtoneStream, true, false);
            ringbackPlayer = new WaveStreamPlayback(ringbackStream, true, false);

            // mixers
            outgoingDataMixer = new AudioMixerMediaHandler();
            speakerMixer = new AudioMixerMediaHandler();
            recordDataMixer = new AudioMixerMediaHandler();

            // phone handlers
            phoneCallAudioSender = new PhoneCallAudioSender();
            phoneCallAudioReceiver = new PhoneCallAudioReceiver();

            // ----- CONNECT -----
            // connect outgoing
            audioConnector.Connect(AudioEnhancer, outgoingDataMixer);
            audioConnector.Connect(outgoingDataMixer, phoneCallAudioSender);
            audioConnector.Connect(outgoingDataMixer, recordDataMixer);
            if (Microphone != null)
            {
                Microphone.LevelChanged += (Microphone_LevelChanged);
                audioConnector.Connect(Microphone, AudioEnhancer);
            }

            // connect incoming
            audioConnector.Connect(phoneCallAudioReceiver, speakerMixer);
            audioConnector.Connect(phoneCallAudioReceiver, recordDataMixer);
            audioConnector.Connect(ringtonePlayer, speakerMixer);
            audioConnector.Connect(ringbackPlayer, speakerMixer);
            audioConnector.Connect(dtmfPlayer, speakerMixer);
            if (Speaker != null)
            {
                Speaker.LevelChanged += (Speaker_LevelChanged);
                audioConnector.Connect(speakerMixer, Speaker);
            }

            // add to collection
            Dictionary<string, VoIPMediaHandler> collection = new Dictionary<string, VoIPMediaHandler>();
            collection.Add("AudioEnhancer", AudioEnhancer);
            collection.Add("DTMFPlayer", dtmfPlayer);
            collection.Add("OutgoingDataMixer", outgoingDataMixer);
            collection.Add("SpeakerMixer", speakerMixer);
            collection.Add("PhoneCallAudioSender", phoneCallAudioSender);
            collection.Add("PhoneCallAudioReceiver", phoneCallAudioReceiver);
            audioCollection = new MediaHandlerCollection(audioConnector, collection);
        }
Beispiel #27
0
        /// <summary>
        /// Initializes the audio handlers (microphone, speaker, DTMF player etc.).
        /// </summary>
        private void InitAudio()
        {
            // ----- CREATE -----
            // devices
            Microphone = Microphone.GetDefaultDevice();
            Speaker    = Speaker.GetDefaultDevice();

            // audio processors
            AudioEnhancer = new AudioQualityEnhancer();
            AudioEnhancer.SetEchoSource(Speaker);
            dtmfPlayer = new DtmfEventWavePlayer();

            // ringtones
            var ringbackStream = LoadRingbackStream();
            var ringtoneStream = LoadRingtoneStream();

            ringtonePlayer = new WaveStreamPlayback(ringtoneStream, true, false);
            ringbackPlayer = new WaveStreamPlayback(ringbackStream, true, false);

            // mixers
            outgoingDataMixer = new AudioMixerMediaHandler();
            speakerMixer      = new AudioMixerMediaHandler();
            recordDataMixer   = new AudioMixerMediaHandler();

            // phone handlers
            phoneCallAudioSender   = new PhoneCallAudioSender();
            phoneCallAudioReceiver = new PhoneCallAudioReceiver();


            // ----- CONNECT -----
            // connect outgoing
            audioConnector.Connect(AudioEnhancer, outgoingDataMixer);
            audioConnector.Connect(outgoingDataMixer, phoneCallAudioSender);
            audioConnector.Connect(outgoingDataMixer, recordDataMixer);
            if (Microphone != null)
            {
                Microphone.LevelChanged += (Microphone_LevelChanged);
                audioConnector.Connect(Microphone, AudioEnhancer);
            }

            // connect incoming
            audioConnector.Connect(phoneCallAudioReceiver, speakerMixer);
            audioConnector.Connect(phoneCallAudioReceiver, recordDataMixer);
            audioConnector.Connect(ringtonePlayer, speakerMixer);
            audioConnector.Connect(ringbackPlayer, speakerMixer);
            audioConnector.Connect(dtmfPlayer, speakerMixer);
            if (Speaker != null)
            {
                Speaker.LevelChanged += (Speaker_LevelChanged);
                audioConnector.Connect(speakerMixer, Speaker);
            }

            // add to collection
            Dictionary <string, VoIPMediaHandler> collection = new Dictionary <string, VoIPMediaHandler>();

            collection.Add("AudioEnhancer", AudioEnhancer);
            collection.Add("DTMFPlayer", dtmfPlayer);
            collection.Add("OutgoingDataMixer", outgoingDataMixer);
            collection.Add("SpeakerMixer", speakerMixer);
            collection.Add("PhoneCallAudioSender", phoneCallAudioSender);
            collection.Add("PhoneCallAudioReceiver", phoneCallAudioReceiver);
            audioCollection = new MediaHandlerCollection(audioConnector, collection);
        }