/// <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);
        }
Пример #2
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));
        }
Пример #3
0
        /// <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");
        }