/// <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> /// 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> /// 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"); }