- fixed some conversion
- fixed DB
- audio now use Javax instead of sun
- wav now works (apparently they must be at 16bit)
This commit is contained in:
2018-09-24 17:24:59 +02:00
parent 75ebc025a3
commit abd68e0eb1
18 changed files with 62 additions and 31 deletions

View File

@@ -147,9 +147,9 @@ public class Fitbit {
*
* @return un intero rappresentante le ore passate a dormire
*/
public synchronized long getHoursSleep() {
public synchronized double getHoursSleep() {
sleep = update(Sleep.class, sleep,"1.2" + USER + "sleep/date/today.json");
return sleep.getMinutesAsleep()/60;
return (double)sleep.getMinutesAsleep()/60;
}
/**

View File

@@ -16,13 +16,13 @@ import java.util.Map;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Sleep {
private long minutesAsleep;
private int minutesAsleep;
private List<SleepData> datas;
@JsonProperty("summary")
private void setMinutesAsleep(Map<String, Object> map) {
minutesAsleep = (long) map.get("totalMinutesAsleep");
minutesAsleep = (int) map.get("totalMinutesAsleep");
}
@JsonProperty("sleep")

View File

@@ -70,6 +70,8 @@ public class SeniorAssistant {
LOG.info("Connessione al database...");
Database database = remoteDbUser == null ? new LocalDB() : new RemoteDB(remoteDbUser);
if(remoteDbUser != null && !database.isReachable())
database = new LocalDB();
threads.startInsertData(database, fitbit);
threads.startHueControlledByHeartBeat(lights, fitbit, database);

View File

@@ -8,7 +8,6 @@ import device.fitbitdata.HeartRate;
import device.fitbitdata.Steps;
import support.audio.Audio;
import support.audio.AudioFile;
import support.audio.Musich;
import support.database.Database;
import java.sql.Timestamp;
@@ -102,8 +101,8 @@ public class VariousThreads {
return String.format("Oggi hai percorso circa %.2f kilometri", steps/2000);
});
df.addOnAction("ReqSleep", (params) -> {
long sleep = fitbit.getHoursSleep();
return String.format("Oggi hai dormito per %.2f ore", (double)sleep/3600000);
double sleep = fitbit.getHoursSleep();
return String.format("Oggi hai dormito per %.2f ore", sleep);
});
df.startServer();
@@ -172,7 +171,6 @@ public class VariousThreads {
public void startHueControlledByHeartBeat(final Hue lights, final Fitbit fitbit, final Database database) {
final int minutes = 30;
final int delta = 15;
final Audio audio = new AudioFile();
Thread thread = getThreadStartingEach(new Runnable() {
@Override
public synchronized void run() {
@@ -198,11 +196,11 @@ public class VariousThreads {
if (Math.abs(rateNow-average) > delta ) { // ALTO
lights.decreaseBrightness();
audio.playRandom("relax");
new AudioFile().play("molti battiti.wav");
new AudioFile("molti battiti.wav");
}
else if (Math.abs(rateNow-average) < delta) { // BASSO avvisa ma niente musica
lights.increaseBrightness();
audio.play("pochi battiti.wav");
new AudioFile("pochi battiti.wav");
}
}
}, minutes, "lights-with-heartbeat");
@@ -219,7 +217,6 @@ public class VariousThreads {
public void startCheckSteps(final Database database) {
final int norm = 4500;
final int delta = 1500; // average steps for 60 year old -> 3.500-5.500 or so they say
final Audio audio = new AudioFile();
Thread thread = getThreadStartingAt(new Runnable() {
@Override
@@ -233,9 +230,9 @@ public class VariousThreads {
final long average = size!=0? (long)(sum/size):0;
if (Math.abs(norm-average) > delta )
audio.play("molti passi.wav");
new AudioFile("molti passi.wav");
else if (Math.abs(norm-average) < delta)
audio.play("pochi passi.wav");
new AudioFile("pochi passi.wav");
}
}, 20, "checking-steps");

View File

@@ -1,11 +1,10 @@
package support.audio;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -24,7 +23,7 @@ public class AudioFile implements Audio {
/**
* L'ultimo audio fatto partire
*/
private AudioStream lastIn = null;
private final Clip clip;
/**
* Serve per crearsi una mappa di tutte le canzoni
@@ -36,6 +35,28 @@ public class AudioFile implements Audio {
*/
private final static Map<String, List<File>> dirs = getAllDirs(PATH_AUDIO);
/**
* Crea un oggetto audio che si puo' poi far riprodurre e stoppare
*/
public AudioFile() {
Clip clip = null;
try {
clip = AudioSystem.getClip();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
this.clip = clip;
}
/**
* Utilizzando questo costruttore si fa partire in automatico il file scelto
* @param file il nome del file scelto da far partire subito
*/
public AudioFile(String file) {
this();
this.play(file);
}
/**
* Fa partire una canzone che si trova nella cartella audio o in una delle sue sottocartelle
* @param name la stringa per far partire la canzone
@@ -45,10 +66,10 @@ public class AudioFile implements Audio {
stop();
try {
File file = files.get(name);
lastIn = new AudioStream( new FileInputStream(file));
AudioPlayer.player.start(lastIn);
} catch (IOException e) {
AudioInputStream audioIn = AudioSystem.getAudioInputStream(file);
clip.open(audioIn);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@@ -66,12 +87,11 @@ public class AudioFile implements Audio {
@Override
public void stop() {
try {
AudioPlayer.player.stop(lastIn);
lastIn.close();
lastIn = null;
} catch (IOException e) {
clip.stop();
clip.close();
} catch (Exception e) {
e.printStackTrace();
} catch (NullPointerException e) {}
}
}
/**

View File

@@ -20,7 +20,7 @@ public class LocalDB implements Database {
/**
* Il percorso dove trovare il database, strutturato in: &lt;interfaccia&gt;:&lt;implementazione&gt;:&lt;percorso vero e proprio&gt;
*/
public static final String DB_LOCATION = "jdbc:sqlite:";
public static final String DB_LOCATION = "jdbc:sqlite:src/main/resources/";
/**
* Il nome del database (aka il nome del file)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,2 +1,2 @@
org.slf4j.simpleLogger.defaultLogLevel=warn
org.slf4j.simpleLogger.defaultLogLevel=info
org.slf4j.simpleLogger.logFile=System.out

Binary file not shown.

View File

@@ -21,7 +21,7 @@ public class TestMusich {
@Test
public void test2() {
AudioFile audio = new AudioFile();
audio.play("Godzilla.wav"); // apparently it doesn't like some wav
audio.play("Godzilla.wav");
waitAndPrint(3);
audio.play("Tullio.wav");
waitAndPrint(10);
@@ -46,6 +46,18 @@ public class TestMusich {
audio2.stop();
}
@Test
public void test4() {
AudioFile audio = new AudioFile();
new AudioFile("pochi passi.wav");
waitAndPrint(3);
audio.play("molti battiti.wav");
waitAndPrint(3);
audio.stop();
}
public void waitAndPrint(Integer seconds) {
if(seconds != null) synchronized (seconds) {
try {