Skip to content
This repository was archived by the owner on Jul 5, 2018. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions src/main/com/darkprograms/speech/HelloWorld.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.darkprograms.speech;

import javax.sound.sampled.AudioFileFormat.Type;
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;


import com.darkprograms.speech.microphone.Microphone;
import com.darkprograms.speech.recognizer.*;
import com.darkprograms.speech.synthesiser.Synthesiser;
import javaFlacEncoder.FLACFileWriter;
import org.bytedeco.javacpp.opencv_face;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

/**
* Jarvis Speech API Tutorial
* @author Aaron Gokaslan (Skylion)
*
*/
public class HelloWorld {





public static void talk(String text){
//String language = "auto";//Uses language autodetection
//** While the API can detect language by itself, this is reliant on the Google Translate API which is prone to breaking. For maximum stability, please specify the language.**//
String language = "en-us";//English (US) language code //If you want to specify a language use the ISO code for your country. Ex: en-us
/*If you are unsure of this code, use the Translator class to automatically detect based off of
* Either text from your language or your system settings.
*/
Synthesiser synth = new Synthesiser(language);

try {
InputStream is = synth.getMP3Data(text);
AudioStream as = new AudioStream(is);
AudioPlayer.player.start(as);

//TODO Use any Java MP3 Implementation to play back the AudioFile from the InputStream.
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Error");
e.printStackTrace();

return;
}
}
}
283 changes: 283 additions & 0 deletions src/main/java/org/themachineproject/machine/command/qui/QUIShell.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
package org.themachineproject.machine.command.qui;


import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.text.*;
import javafx.stage.*;
import org.bytedeco.javacv.CanvasFrame;
import org.themachineproject.machine.*;
import org.themachineproject.machine.command.Command;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;

import java.awt.ScrollPane;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

/**
* Created by Rocco on 05/06/2016.
*/
public class QUIShell {

private Label currentPrompt;

private TextField currentCommandEntry;
private javafx.scene.control.ScrollPane scrollPane;
private HBox currentLine;
private Stage primaryStage;
private Scene scene;
private VBox allLines;
private boolean currentlyOpen;
private javafx.scene.text.Font machineTerminalFont;

public static double INITIAL_WINDOW_WIDTH = 800, INITIAL_WINDOW_HEIGHT = 500;

private void initialize() {
currentlyOpen = true;

primaryStage = new Stage();
primaryStage.setTitle(Assets.TheMachineTerminal);
allLines = new VBox(5);
allLines.setBackground(new Background(new BackgroundFill(javafx.scene.paint.Color.BLACK, CornerRadii.EMPTY, javafx.geometry.Insets.EMPTY)));
allLines.setBorder(new Border(new BorderStroke(javafx.scene.paint.Color.TRANSPARENT, BorderStrokeStyle.NONE, CornerRadii.EMPTY, BorderWidths.EMPTY)));
scrollPane = new javafx.scene.control.ScrollPane(allLines);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
scrollPane.setHbarPolicy(javafx.scene.control.ScrollPane.ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(javafx.scene.control.ScrollPane.ScrollBarPolicy.ALWAYS);
scene = new Scene(scrollPane, INITIAL_WINDOW_WIDTH, INITIAL_WINDOW_HEIGHT, javafx.scene.paint.Color.WHITE);
primaryStage.setScene(scene);
primaryStage.setOnCloseRequest((v) -> {
currentlyOpen = false;
allLines.getChildren().clear();
});
}

private IdentityDataBaseFile identityDataBaseFile;

public QUIShell(IdentityDataBaseFile id) {

currentlyOpen = false;
try {
machineTerminalFont = javafx.scene.text.Font.loadFont(new FileInputStream(new File(Assets.CALL_ONE_REGULAR)), 10f);
} catch(FileNotFoundException ex) {
Alert alert = new Alert(Alert.AlertType.ERROR, "Font extraction error, exiting the Machine.", ButtonType.OK);
alert.showAndWait();
System.exit(1);
}
}

public void clearTerminal() {
allLines.getChildren().clear();
initializeNewLine("#>");
}

public void closeTerminal() {
primaryStage.close();
currentlyOpen = false;
allLines.getChildren().clear();
}

private String getPromptString(Permissions.PermissionLevel pl) {
if(pl == Permissions.PermissionLevel.KIND_LOCKED)
return "";
else if(pl == Permissions.PermissionLevel.KIND_REGULAR)
return "! >";
else if(pl == Permissions.PermissionLevel.KIND_READ)
return "^ >";
else if(pl == Permissions.PermissionLevel.KIND_READ_WRITE)
return "* >";
else if(pl == Permissions.PermissionLevel.KIND_READ_WRITE_MODIFY)
return "# >";
return "";
}

private void handleEnteredCommand(String command) {
if(command.length() == 0) {
initializeNewLine("#>");
return;
}
String[] keywords = command.split(" ");
java.util.List<String> keys = new ArrayList<>(Arrays.asList(keywords));
HBox box = new HBox();
Text text = new Text();
text.setFont(machineTerminalFont);
text.setTranslateY(2);

text.setFill(javafx.scene.paint.Color.WHITE);
if(contains(keys, "HI")){
text.setText("Hi, Admin!");
}
else if(contains(keys, "TIME")){
text.setText(new Date().toString());
}
else if(contains(keys, "THREAT") && contains(keys, "WHO")){

ArrayList<Identity> ids = StartUpAnimation.wh.getIdentityList();

for(Identity id : ids){
if(id.getPermissionsKind() == Identity.PermissionsKind.KIND_THREAT){
text.setText(" ======= THREAT ======\n\n" +
"Name: " + id.getUserName() + "\n\nSSN: " + id.getSocialSecurityNumber() +
"\n\nAbout: " + id.getAbout());
}
}



}
else if(contains(keys, "EXIT")){
closeTerminal();
this.currentlyOpen = false;
}
else if(contains(keys, "SHUTDOWN")){
closeTerminal();
StartUpAnimation.wh.terminal.handleEnteredCommand("#>", "killall");
}
else if(contains(keys, "SSN")){
if(keys.contains("di")){
String nome = keys.get(keys.indexOf("of") + 1);
ArrayList<Identity> ids = StartUpAnimation.wh.getIdentityList();
for(Identity id : ids){
if(id.getUserName().equalsIgnoreCase(nome)){
text.setText("\n\nSSN: " + id.getSocialSecurityNumber());
}
}

}
}
else if(contains(keys, "PROFILE")){
if(keys.contains("of")) {
String nome = keys.get(keys.indexOf("of") + 1);
ArrayList<Identity> ids = StartUpAnimation.wh.getIdentityList();
for(Identity id : ids){
if(id.getUserName().equalsIgnoreCase(nome)){


text.setText("\n\n===== PROFILE =====\n\n" +
"Name: " + id.getUserName() + "\n\nSSN: " + id.getSocialSecurityNumber() +
"\n\nAbout: " + id.getAbout() + "\n\nRole: " + id.getPermissionsString() + "" +
"\n\nUUID: " + id.getGeneratedId());




}
else if(id.getSocialSecurityNumber().equalsIgnoreCase(nome)){
text.setText("\n\n===== PROFILE =====\n\n" +
"Name: " + id.getUserName() + "\n\nSSN: " + id.getSocialSecurityNumber() +
"\n\nAbout: " + id.getAbout() + "\n\nRole: " + id.getPermissionsString() + "\n\nUUID: " + id.getGeneratedId());

}
}
}
}
else if(contains(keys, "CLEAR")){
clearTerminal();
}




box.getChildren().add(text);
allLines.getChildren().add(box);
initializeNewLine("#>");


}



private void initializeNewLine(String promptString) {
currentLine = new HBox();
currentLine.setBackground(new Background(new BackgroundFill(javafx.scene.paint.Color.BLACK, CornerRadii.EMPTY, javafx.geometry.Insets.EMPTY)));
currentPrompt = new javafx.scene.control.Label(promptString);
currentPrompt.setFont(machineTerminalFont);
currentPrompt.setTextFill(javafx.scene.paint.Color.WHITE);
currentPrompt.setTranslateY(2);
currentPrompt.setFocusTraversable(false);
currentCommandEntry = new javafx.scene.control.TextField();
currentCommandEntry.setBackground(new Background(new BackgroundFill(javafx.scene.paint.Color.BLACK, CornerRadii.EMPTY, javafx.geometry.Insets.EMPTY)));
currentCommandEntry.setBorder(new Border(new BorderStroke(javafx.scene.paint.Color.TRANSPARENT, BorderStrokeStyle.NONE, CornerRadii.EMPTY, BorderWidths.EMPTY)));
currentCommandEntry.setStyle("-fx-text-inner-color: white;");
currentCommandEntry.setFont(machineTerminalFont);
currentCommandEntry.setPrefWidth(scrollPane.getWidth() - 10 - currentPrompt.getWidth() - 35);
currentCommandEntry.requestFocus();
currentCommandEntry.setTranslateY(-2);
currentCommandEntry.setOnKeyPressed((event) -> {
if(event.getCode().equals(KeyCode.ENTER)) {
currentLine.getChildren().remove(currentCommandEntry);
javafx.scene.control.Label label = new javafx.scene.control.Label(currentCommandEntry.getText());
label.setTranslateX(2);
label.setTranslateY(2);
label.setBackground(new Background(new BackgroundFill(javafx.scene.paint.Color.BLACK, CornerRadii.EMPTY, javafx.geometry.Insets.EMPTY)));
label.setBorder(new Border(new BorderStroke(javafx.scene.paint.Color.TRANSPARENT, BorderStrokeStyle.NONE, CornerRadii.EMPTY, BorderWidths.EMPTY)));
label.setTextFill(javafx.scene.paint.Color.WHITE);
label.setFont(machineTerminalFont);
label.setFocusTraversable(false);
currentLine.getChildren().add(label);
handleEnteredCommand(currentCommandEntry.getText());
}
});
currentLine.setPadding(new javafx.geometry.Insets(0, 5, 0, 5));
currentLine.getChildren().add(currentPrompt);
currentLine.getChildren().add(currentCommandEntry);
allLines.getChildren().add(currentLine);
primaryStage.show();
}

private void createPrompt(boolean create, String promptString) {
if(create)
initializeNewLine(promptString);
else {
currentPrompt.setText(promptString);
currentCommandEntry.setPrefWidth(scrollPane.getWidth() - 10 - currentPrompt.getWidth() - 35);
}
}

public boolean getCurrentlyOpen() {
return currentlyOpen;
}

public void showShell() {

boolean store = currentlyOpen;
if(!currentlyOpen)
initialize();

createPrompt(!store, "#>");
}

private boolean contains(java.util.List<String> list, String contains){

java.util.List<String> uppers = new ArrayList<>();
for(String s : list){
uppers.add(s.toUpperCase());
}

return uppers.contains(contains);

}
}

32 changes: 32 additions & 0 deletions src/main/org/themachineproject/machine/command/QUICommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.themachineproject.machine.command;

import org.themachineproject.machine.IdentityDataBaseFile;
import org.themachineproject.machine.Permissions;
import org.themachineproject.machine.Terminal;
import org.themachineproject.machine.TextFragment;
import org.themachineproject.machine.command.qui.QUIShell;

import java.util.ArrayList;

/**
* Created by Rocco on 05/06/2016.
*/
public class QUICommand extends Command {


public QUICommand(IdentityDataBaseFile idbf) {
super(idbf, "qui", Permissions.PermissionLevel.KIND_REGULAR);
}

@Override
public ArrayList<ArrayList<TextFragment>> getCommandOutput(String[] input) {
QUIShell shell = new QUIShell(getIdentityDataBaseFile());
shell.showShell();
return null;
}

@Override
public ArrayList<ArrayList<TextFragment>> getHelpOutput() {
return null;
}
}