You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2014/01/14 17:24:44 UTC

svn commit: r1558098 - in /openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart: AudioTone.java CoreScreenShare.java RTMPSScreenShare.java RTMPScreenShare.java RTMPTScreenShare.java gui/ScreenSharerFrame.java

Author: solomax
Date: Tue Jan 14 16:24:44 2014
New Revision: 1558098

URL: http://svn.apache.org/r1558098
Log:
[OPENMEETINGS-857] possibility to play sound on screensharing disconnect is added; code clean up

Added:
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
Modified:
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
    openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java

Added: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java?rev=1558098&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java (added)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java Tue Jan 14 16:24:44 2014
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.SourceDataLine;
+
+public class AudioTone {
+	public static final float SAMPLE_RATE = 44100F;
+
+	public static void play() {
+		byte[] buf = new byte[1];
+		
+		SourceDataLine sdl = null;
+		try {
+		AudioFormat af = new AudioFormat(SAMPLE_RATE, 8, 1, true, false);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl.open(af);
+		sdl.start();
+		for (int i = 0; i < (int)SAMPLE_RATE; ++i) {
+			double angle = i / (SAMPLE_RATE / 440) * 2.0 * Math.PI;
+			buf[0] = (byte) (Math.sin(angle) * 128);
+			sdl.write(buf, 0, 1);
+		}
+		} catch (LineUnavailableException e) {
+			//no-op
+		} finally {
+			if (sdl != null) {
+				sdl.drain();
+				sdl.stop();
+				sdl.close();
+			}
+		}
+	}
+}

Modified: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java?rev=1558098&r1=1558097&r2=1558098&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java (original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java Tue Jan 14 16:24:44 2014
@@ -81,6 +81,7 @@ public class CoreScreenShare implements 
 	public float Ampl_factor = 1f;
 	public boolean isConnected = false;
 	private boolean readyToRecord = false;
+	private boolean audioNotify = false;
 
 	public Map<Integer, Boolean> currentPressedKeys = new HashMap<Integer, Boolean>();
 
@@ -671,4 +672,12 @@ public class CoreScreenShare implements 
 			log.error("[resultReceived]", err);
 		}
 	}
+
+	public boolean isAudioNotify() {
+		return audioNotify;
+	}
+
+	public void setAudioNotify(boolean audioNotify) {
+		this.audioNotify = audioNotify;
+	}
 }

Modified: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java?rev=1558098&r1=1558097&r2=1558098&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java (original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java Tue Jan 14 16:24:44 2014
@@ -31,9 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class RTMPSScreenShare extends RTMPSClient implements ClientExceptionHandler, IScreenShare {
-
-	private static final Logger logger = LoggerFactory
-			.getLogger(RTMPSScreenShare.class);
+	private static final Logger logger = LoggerFactory.getLogger(RTMPSScreenShare.class);
 
 	private CoreScreenShare core = null;
 
@@ -76,6 +74,9 @@ public class RTMPSScreenShare extends RT
 	public void connectionClosed(RTMPConnection conn, RTMP rtmp) {
 		logger.debug("connection closed");
 		super.connectionClosed(conn, rtmp);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
 		core.stopStream();
 	}
 

Modified: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java?rev=1558098&r1=1558097&r2=1558098&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java (original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java Tue Jan 14 16:24:44 2014
@@ -28,9 +28,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class RTMPScreenShare extends RTMPClient implements ClientExceptionHandler, IScreenShare {
-
-	private static final Logger logger = LoggerFactory
-			.getLogger(RTMPScreenShare.class);
+	private static final Logger logger = LoggerFactory.getLogger(RTMPScreenShare.class);
 
 	private CoreScreenShare core = null;
 
@@ -58,6 +56,9 @@ public class RTMPScreenShare extends RTM
 	public void connectionClosed(RTMPConnection conn, RTMP rtmp) {
 		logger.debug("connection closed");
 		super.connectionClosed(conn, rtmp);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
 		core.stopStream();
 	}
 

Modified: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java?rev=1558098&r1=1558097&r2=1558098&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java (original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java Tue Jan 14 16:24:44 2014
@@ -56,6 +56,9 @@ public class RTMPTScreenShare extends RT
 	public void connectionClosed(RTMPConnection conn, RTMP rtmp) {
 		logger.debug("connection closed");
 		super.connectionClosed(conn, rtmp);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
 		core.stopStream();
 	}
 

Modified: openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java?rev=1558098&r1=1558097&r2=1558098&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java (original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java Tue Jan 14 16:24:44 2014
@@ -39,6 +39,7 @@ import javax.swing.GroupLayout;
 import javax.swing.GroupLayout.Alignment;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
@@ -108,6 +109,7 @@ public class ScreenSharerFrame extends J
 	private String reduceYLabel;
 	private String recordingTipLabel;
 	private String publishingTipLabel;
+	private JCheckBox audioNotify;
 	
 	private class PublishTextField extends JTextField {
 		private static final long serialVersionUID = -2104245360975135871L;
@@ -281,6 +283,14 @@ public class ScreenSharerFrame extends J
 		
 		JLabel lblSelectArea = new JLabel(getTextLabel(textLabels, 4)); //#id 734
 		JPanel panelStatus = new JPanel();
+		audioNotify = new JCheckBox(getTextLabel(textLabels, 36)); //#id 1589
+		audioNotify.setBackground(Color.WHITE);
+		audioNotify.setSelected(core.isAudioNotify());
+		audioNotify.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				core.setAudioNotify(audioNotify.isSelected());
+			}
+		});
 		
 		GroupLayout gl_contentPane = new GroupLayout(contentPane);
 		gl_contentPane.setHorizontalGroup(
@@ -289,7 +299,9 @@ public class ScreenSharerFrame extends J
 					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
 						.addGroup(gl_contentPane.createSequentialGroup()
 							.addGap(7)
-							.addComponent(lblStartSharing))
+							.addComponent(lblStartSharing)
+							.addGap(15)
+							.addComponent(audioNotify))
 						.addGroup(gl_contentPane.createSequentialGroup()
 							.addGap(21)
 							.addComponent(btnStartStopSharing, 200, 200, 200)
@@ -315,7 +327,7 @@ public class ScreenSharerFrame extends J
 					.addComponent(lblStartSharing)
 					.addGap(4)
 					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
-						.addComponent(btnStartStopSharing, 32, 32, 32)
+						.addComponent(btnStartStopSharing, 32, 32, 32).addComponent(audioNotify, 32, 32, 32)
 						)
 					.addGap(4)
 					.addComponent(lblSelectArea)