diff --git a/.idea/deployment.xml b/.idea/deployment.xml
index d516610..17772f2 100644
--- a/.idea/deployment.xml
+++ b/.idea/deployment.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/.idea/libraries/slf4j_simple.xml b/.idea/libraries/slf4j_simple.xml
new file mode 100644
index 0000000..06b1109
--- /dev/null
+++ b/.idea/libraries/slf4j_simple.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/nanopi_intercom.xml b/.idea/runConfigurations/nanopi_intercom.xml
new file mode 100644
index 0000000..b011c9e
--- /dev/null
+++ b/.idea/runConfigurations/nanopi_intercom.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Properties/tinylog.properties b/Properties/tinylog.properties
new file mode 100644
index 0000000..0c4bb17
--- /dev/null
+++ b/Properties/tinylog.properties
@@ -0,0 +1,4 @@
+exception = unpack, strip: jdk.internal
+writer = console
+writer.exception = drop cause
+writer.format = {date:dd-MM-yyyy HH:mm:ss} {class}.{method}()
\ No newline at end of file
diff --git a/SIPIntercom.iml b/SIPIntercom.iml
index 44e6f58..0994aef 100644
--- a/SIPIntercom.iml
+++ b/SIPIntercom.iml
@@ -16,5 +16,6 @@
+
\ No newline at end of file
diff --git a/libs/linux-aarch64/libbass_aac.so b/libs/linux-aarch64/libbass_aac.so
new file mode 100644
index 0000000..722d9eb
Binary files /dev/null and b/libs/linux-aarch64/libbass_aac.so differ
diff --git a/libs/linux-aarch64/libbass_ac3.so b/libs/linux-aarch64/libbass_ac3.so
new file mode 100644
index 0000000..fe7ee0f
Binary files /dev/null and b/libs/linux-aarch64/libbass_ac3.so differ
diff --git a/libs/linux-aarch64/libbass_fx.so b/libs/linux-aarch64/libbass_fx.so
new file mode 100644
index 0000000..45faa93
Binary files /dev/null and b/libs/linux-aarch64/libbass_fx.so differ
diff --git a/libs/linux-aarch64/libbass_mpc.so b/libs/linux-aarch64/libbass_mpc.so
new file mode 100644
index 0000000..82a22af
Binary files /dev/null and b/libs/linux-aarch64/libbass_mpc.so differ
diff --git a/libs/linux-aarch64/libbass_spx.so b/libs/linux-aarch64/libbass_spx.so
new file mode 100644
index 0000000..d2af193
Binary files /dev/null and b/libs/linux-aarch64/libbass_spx.so differ
diff --git a/libs/linux-aarch64/libbass_tta.so b/libs/linux-aarch64/libbass_tta.so
new file mode 100644
index 0000000..3468f2c
Binary files /dev/null and b/libs/linux-aarch64/libbass_tta.so differ
diff --git a/libs/linux-aarch64/libbassalac.so b/libs/linux-aarch64/libbassalac.so
new file mode 100644
index 0000000..606b3c9
Binary files /dev/null and b/libs/linux-aarch64/libbassalac.so differ
diff --git a/libs/linux-aarch64/libbassape.so b/libs/linux-aarch64/libbassape.so
new file mode 100644
index 0000000..d00e380
Binary files /dev/null and b/libs/linux-aarch64/libbassape.so differ
diff --git a/libs/linux-aarch64/libbasscd.so b/libs/linux-aarch64/libbasscd.so
new file mode 100644
index 0000000..0a8115d
Binary files /dev/null and b/libs/linux-aarch64/libbasscd.so differ
diff --git a/libs/linux-aarch64/libbassdsd.so b/libs/linux-aarch64/libbassdsd.so
new file mode 100644
index 0000000..c61136e
Binary files /dev/null and b/libs/linux-aarch64/libbassdsd.so differ
diff --git a/libs/linux-aarch64/libbassenc.so b/libs/linux-aarch64/libbassenc.so
new file mode 100644
index 0000000..82fb7be
Binary files /dev/null and b/libs/linux-aarch64/libbassenc.so differ
diff --git a/libs/linux-aarch64/libbassenc_flac.so b/libs/linux-aarch64/libbassenc_flac.so
new file mode 100644
index 0000000..f4f344a
Binary files /dev/null and b/libs/linux-aarch64/libbassenc_flac.so differ
diff --git a/libs/linux-aarch64/libbassenc_mp3.so b/libs/linux-aarch64/libbassenc_mp3.so
new file mode 100644
index 0000000..1611982
Binary files /dev/null and b/libs/linux-aarch64/libbassenc_mp3.so differ
diff --git a/libs/linux-aarch64/libbassenc_ogg.so b/libs/linux-aarch64/libbassenc_ogg.so
new file mode 100644
index 0000000..3c14d69
Binary files /dev/null and b/libs/linux-aarch64/libbassenc_ogg.so differ
diff --git a/libs/linux-aarch64/libbassenc_opus.so b/libs/linux-aarch64/libbassenc_opus.so
new file mode 100644
index 0000000..9802f2e
Binary files /dev/null and b/libs/linux-aarch64/libbassenc_opus.so differ
diff --git a/libs/linux-aarch64/libbassflac.so b/libs/linux-aarch64/libbassflac.so
new file mode 100644
index 0000000..dbc9738
Binary files /dev/null and b/libs/linux-aarch64/libbassflac.so differ
diff --git a/libs/linux-aarch64/libbasshls.so b/libs/linux-aarch64/libbasshls.so
new file mode 100644
index 0000000..b02f6d0
Binary files /dev/null and b/libs/linux-aarch64/libbasshls.so differ
diff --git a/libs/linux-aarch64/libbassmidi.so b/libs/linux-aarch64/libbassmidi.so
new file mode 100644
index 0000000..062b5d7
Binary files /dev/null and b/libs/linux-aarch64/libbassmidi.so differ
diff --git a/libs/linux-aarch64/libbassmix.so b/libs/linux-aarch64/libbassmix.so
new file mode 100644
index 0000000..af5a600
Binary files /dev/null and b/libs/linux-aarch64/libbassmix.so differ
diff --git a/libs/linux-aarch64/libbassopus.so b/libs/linux-aarch64/libbassopus.so
new file mode 100644
index 0000000..6cebe42
Binary files /dev/null and b/libs/linux-aarch64/libbassopus.so differ
diff --git a/libs/linux-aarch64/libbasswebm.so b/libs/linux-aarch64/libbasswebm.so
new file mode 100644
index 0000000..421cf32
Binary files /dev/null and b/libs/linux-aarch64/libbasswebm.so differ
diff --git a/libs/linux-aarch64/libbasswv.so b/libs/linux-aarch64/libbasswv.so
new file mode 100644
index 0000000..a3b27d2
Binary files /dev/null and b/libs/linux-aarch64/libbasswv.so differ
diff --git a/libs/linux-aarch64/libtags.so b/libs/linux-aarch64/libtags.so
new file mode 100644
index 0000000..6ab6dec
Binary files /dev/null and b/libs/linux-aarch64/libtags.so differ
diff --git a/libs/linux-armhf/libbass.so b/libs/linux-arm/libbass.so
similarity index 100%
rename from libs/linux-armhf/libbass.so
rename to libs/linux-arm/libbass.so
diff --git a/libs/linux-arm/libbass_aac.so b/libs/linux-arm/libbass_aac.so
new file mode 100644
index 0000000..69215c2
Binary files /dev/null and b/libs/linux-arm/libbass_aac.so differ
diff --git a/libs/linux-arm/libbass_ac3.so b/libs/linux-arm/libbass_ac3.so
new file mode 100644
index 0000000..23deded
Binary files /dev/null and b/libs/linux-arm/libbass_ac3.so differ
diff --git a/libs/linux-arm/libbass_fx.so b/libs/linux-arm/libbass_fx.so
new file mode 100644
index 0000000..0a78d8f
Binary files /dev/null and b/libs/linux-arm/libbass_fx.so differ
diff --git a/libs/linux-arm/libbass_mpc.so b/libs/linux-arm/libbass_mpc.so
new file mode 100644
index 0000000..c2b3a9e
Binary files /dev/null and b/libs/linux-arm/libbass_mpc.so differ
diff --git a/libs/linux-arm/libbass_spx.so b/libs/linux-arm/libbass_spx.so
new file mode 100644
index 0000000..d45bde9
Binary files /dev/null and b/libs/linux-arm/libbass_spx.so differ
diff --git a/libs/linux-arm/libbass_tta.so b/libs/linux-arm/libbass_tta.so
new file mode 100644
index 0000000..c482e2f
Binary files /dev/null and b/libs/linux-arm/libbass_tta.so differ
diff --git a/libs/linux-arm/libbassalac.so b/libs/linux-arm/libbassalac.so
new file mode 100644
index 0000000..f306078
Binary files /dev/null and b/libs/linux-arm/libbassalac.so differ
diff --git a/libs/linux-arm/libbassape.so b/libs/linux-arm/libbassape.so
new file mode 100644
index 0000000..37923b3
Binary files /dev/null and b/libs/linux-arm/libbassape.so differ
diff --git a/libs/linux-arm/libbasscd.so b/libs/linux-arm/libbasscd.so
new file mode 100644
index 0000000..f9e0add
Binary files /dev/null and b/libs/linux-arm/libbasscd.so differ
diff --git a/libs/linux-arm/libbassdsd.so b/libs/linux-arm/libbassdsd.so
new file mode 100644
index 0000000..01179f0
Binary files /dev/null and b/libs/linux-arm/libbassdsd.so differ
diff --git a/libs/linux-arm/libbassenc.so b/libs/linux-arm/libbassenc.so
new file mode 100644
index 0000000..20016ee
Binary files /dev/null and b/libs/linux-arm/libbassenc.so differ
diff --git a/libs/linux-arm/libbassenc_flac.so b/libs/linux-arm/libbassenc_flac.so
new file mode 100644
index 0000000..58713b4
Binary files /dev/null and b/libs/linux-arm/libbassenc_flac.so differ
diff --git a/libs/linux-arm/libbassenc_mp3.so b/libs/linux-arm/libbassenc_mp3.so
new file mode 100644
index 0000000..218240d
Binary files /dev/null and b/libs/linux-arm/libbassenc_mp3.so differ
diff --git a/libs/linux-arm/libbassenc_ogg.so b/libs/linux-arm/libbassenc_ogg.so
new file mode 100644
index 0000000..ca7ffac
Binary files /dev/null and b/libs/linux-arm/libbassenc_ogg.so differ
diff --git a/libs/linux-arm/libbassenc_opus.so b/libs/linux-arm/libbassenc_opus.so
new file mode 100644
index 0000000..ae5dc15
Binary files /dev/null and b/libs/linux-arm/libbassenc_opus.so differ
diff --git a/libs/linux-arm/libbassflac.so b/libs/linux-arm/libbassflac.so
new file mode 100644
index 0000000..bb8c5a9
Binary files /dev/null and b/libs/linux-arm/libbassflac.so differ
diff --git a/libs/linux-arm/libbasshls.so b/libs/linux-arm/libbasshls.so
new file mode 100644
index 0000000..f6428a7
Binary files /dev/null and b/libs/linux-arm/libbasshls.so differ
diff --git a/libs/linux-arm/libbassmidi.so b/libs/linux-arm/libbassmidi.so
new file mode 100644
index 0000000..42f3566
Binary files /dev/null and b/libs/linux-arm/libbassmidi.so differ
diff --git a/libs/linux-arm/libbassmix.so b/libs/linux-arm/libbassmix.so
new file mode 100644
index 0000000..23d9c67
Binary files /dev/null and b/libs/linux-arm/libbassmix.so differ
diff --git a/libs/linux-arm/libbassopus.so b/libs/linux-arm/libbassopus.so
new file mode 100644
index 0000000..c21b493
Binary files /dev/null and b/libs/linux-arm/libbassopus.so differ
diff --git a/libs/linux-arm/libbasswebm.so b/libs/linux-arm/libbasswebm.so
new file mode 100644
index 0000000..f6b43ad
Binary files /dev/null and b/libs/linux-arm/libbasswebm.so differ
diff --git a/libs/linux-arm/libbasswv.so b/libs/linux-arm/libbasswv.so
new file mode 100644
index 0000000..45f2fef
Binary files /dev/null and b/libs/linux-arm/libbasswv.so differ
diff --git a/libs/linux-arm/libtags.so b/libs/linux-arm/libtags.so
new file mode 100644
index 0000000..c83f284
Binary files /dev/null and b/libs/linux-arm/libtags.so differ
diff --git a/libs/linux-x86-64/libbass_aac.so b/libs/linux-x86-64/libbass_aac.so
new file mode 100644
index 0000000..eaa273a
Binary files /dev/null and b/libs/linux-x86-64/libbass_aac.so differ
diff --git a/libs/linux-x86-64/libbass_ac3.so b/libs/linux-x86-64/libbass_ac3.so
new file mode 100644
index 0000000..f1466c4
Binary files /dev/null and b/libs/linux-x86-64/libbass_ac3.so differ
diff --git a/libs/linux-x86-64/libbass_fx.so b/libs/linux-x86-64/libbass_fx.so
new file mode 100644
index 0000000..bb23051
Binary files /dev/null and b/libs/linux-x86-64/libbass_fx.so differ
diff --git a/libs/linux-x86-64/libbass_mpc.so b/libs/linux-x86-64/libbass_mpc.so
new file mode 100644
index 0000000..a7418d5
Binary files /dev/null and b/libs/linux-x86-64/libbass_mpc.so differ
diff --git a/libs/linux-x86-64/libbass_spx.so b/libs/linux-x86-64/libbass_spx.so
new file mode 100644
index 0000000..b309b35
Binary files /dev/null and b/libs/linux-x86-64/libbass_spx.so differ
diff --git a/libs/linux-x86-64/libbass_tta.so b/libs/linux-x86-64/libbass_tta.so
new file mode 100644
index 0000000..465461c
Binary files /dev/null and b/libs/linux-x86-64/libbass_tta.so differ
diff --git a/libs/linux-x86-64/libbassalac.so b/libs/linux-x86-64/libbassalac.so
new file mode 100644
index 0000000..0cde673
Binary files /dev/null and b/libs/linux-x86-64/libbassalac.so differ
diff --git a/libs/linux-x86-64/libbassape.so b/libs/linux-x86-64/libbassape.so
new file mode 100644
index 0000000..cd3edf6
Binary files /dev/null and b/libs/linux-x86-64/libbassape.so differ
diff --git a/libs/linux-x86-64/libbasscd.so b/libs/linux-x86-64/libbasscd.so
new file mode 100644
index 0000000..d3dd2d6
Binary files /dev/null and b/libs/linux-x86-64/libbasscd.so differ
diff --git a/libs/linux-x86-64/libbassdsd.so b/libs/linux-x86-64/libbassdsd.so
new file mode 100644
index 0000000..28e1ec4
Binary files /dev/null and b/libs/linux-x86-64/libbassdsd.so differ
diff --git a/libs/linux-x86-64/libbassenc.so b/libs/linux-x86-64/libbassenc.so
new file mode 100644
index 0000000..bb7240b
Binary files /dev/null and b/libs/linux-x86-64/libbassenc.so differ
diff --git a/libs/linux-x86-64/libbassenc_flac.so b/libs/linux-x86-64/libbassenc_flac.so
new file mode 100644
index 0000000..b1d8675
Binary files /dev/null and b/libs/linux-x86-64/libbassenc_flac.so differ
diff --git a/libs/linux-x86-64/libbassenc_mp3.so b/libs/linux-x86-64/libbassenc_mp3.so
new file mode 100644
index 0000000..33f1248
Binary files /dev/null and b/libs/linux-x86-64/libbassenc_mp3.so differ
diff --git a/libs/linux-x86-64/libbassenc_ogg.so b/libs/linux-x86-64/libbassenc_ogg.so
new file mode 100644
index 0000000..02dc186
Binary files /dev/null and b/libs/linux-x86-64/libbassenc_ogg.so differ
diff --git a/libs/linux-x86-64/libbassenc_opus.so b/libs/linux-x86-64/libbassenc_opus.so
new file mode 100644
index 0000000..3a6bdd7
Binary files /dev/null and b/libs/linux-x86-64/libbassenc_opus.so differ
diff --git a/libs/linux-x86-64/libbassflac.so b/libs/linux-x86-64/libbassflac.so
new file mode 100644
index 0000000..eefff5c
Binary files /dev/null and b/libs/linux-x86-64/libbassflac.so differ
diff --git a/libs/linux-x86-64/libbasshls.so b/libs/linux-x86-64/libbasshls.so
new file mode 100644
index 0000000..0695a83
Binary files /dev/null and b/libs/linux-x86-64/libbasshls.so differ
diff --git a/libs/linux-x86-64/libbassmidi.so b/libs/linux-x86-64/libbassmidi.so
new file mode 100644
index 0000000..fc78b20
Binary files /dev/null and b/libs/linux-x86-64/libbassmidi.so differ
diff --git a/libs/linux-x86-64/libbassmix.so b/libs/linux-x86-64/libbassmix.so
new file mode 100644
index 0000000..b90214f
Binary files /dev/null and b/libs/linux-x86-64/libbassmix.so differ
diff --git a/libs/linux-x86-64/libbassopus.so b/libs/linux-x86-64/libbassopus.so
new file mode 100644
index 0000000..20c3b9e
Binary files /dev/null and b/libs/linux-x86-64/libbassopus.so differ
diff --git a/libs/linux-x86-64/libbasswebm.so b/libs/linux-x86-64/libbasswebm.so
new file mode 100644
index 0000000..68d2259
Binary files /dev/null and b/libs/linux-x86-64/libbasswebm.so differ
diff --git a/libs/linux-x86-64/libbasswv.so b/libs/linux-x86-64/libbasswv.so
new file mode 100644
index 0000000..0d4be94
Binary files /dev/null and b/libs/linux-x86-64/libbasswv.so differ
diff --git a/libs/linux-x86-64/libtags.so b/libs/linux-x86-64/libtags.so
new file mode 100644
index 0000000..7ab7dc0
Binary files /dev/null and b/libs/linux-x86-64/libtags.so differ
diff --git a/libs/linux-x86/libbass_aac.so b/libs/linux-x86/libbass_aac.so
new file mode 100644
index 0000000..d286e70
Binary files /dev/null and b/libs/linux-x86/libbass_aac.so differ
diff --git a/libs/linux-x86/libbass_ac3.so b/libs/linux-x86/libbass_ac3.so
new file mode 100644
index 0000000..b686741
Binary files /dev/null and b/libs/linux-x86/libbass_ac3.so differ
diff --git a/libs/linux-x86/libbass_fx.so b/libs/linux-x86/libbass_fx.so
new file mode 100644
index 0000000..e325328
Binary files /dev/null and b/libs/linux-x86/libbass_fx.so differ
diff --git a/libs/linux-x86/libbass_mpc.so b/libs/linux-x86/libbass_mpc.so
new file mode 100644
index 0000000..0060463
Binary files /dev/null and b/libs/linux-x86/libbass_mpc.so differ
diff --git a/libs/linux-x86/libbass_spx.so b/libs/linux-x86/libbass_spx.so
new file mode 100644
index 0000000..8b9740d
Binary files /dev/null and b/libs/linux-x86/libbass_spx.so differ
diff --git a/libs/linux-x86/libbass_tta.so b/libs/linux-x86/libbass_tta.so
new file mode 100644
index 0000000..e80bdcc
Binary files /dev/null and b/libs/linux-x86/libbass_tta.so differ
diff --git a/libs/linux-x86/libbassalac.so b/libs/linux-x86/libbassalac.so
new file mode 100644
index 0000000..6a7be30
Binary files /dev/null and b/libs/linux-x86/libbassalac.so differ
diff --git a/libs/linux-x86/libbassape.so b/libs/linux-x86/libbassape.so
new file mode 100644
index 0000000..76e98b8
Binary files /dev/null and b/libs/linux-x86/libbassape.so differ
diff --git a/libs/linux-x86/libbasscd.so b/libs/linux-x86/libbasscd.so
new file mode 100644
index 0000000..98e2d2b
Binary files /dev/null and b/libs/linux-x86/libbasscd.so differ
diff --git a/libs/linux-x86/libbassdsd.so b/libs/linux-x86/libbassdsd.so
new file mode 100644
index 0000000..10262c9
Binary files /dev/null and b/libs/linux-x86/libbassdsd.so differ
diff --git a/libs/linux-x86/libbassenc.so b/libs/linux-x86/libbassenc.so
new file mode 100644
index 0000000..874faee
Binary files /dev/null and b/libs/linux-x86/libbassenc.so differ
diff --git a/libs/linux-x86/libbassenc_flac.so b/libs/linux-x86/libbassenc_flac.so
new file mode 100644
index 0000000..a12a436
Binary files /dev/null and b/libs/linux-x86/libbassenc_flac.so differ
diff --git a/libs/linux-x86/libbassenc_mp3.so b/libs/linux-x86/libbassenc_mp3.so
new file mode 100644
index 0000000..058e6f6
Binary files /dev/null and b/libs/linux-x86/libbassenc_mp3.so differ
diff --git a/libs/linux-x86/libbassenc_ogg.so b/libs/linux-x86/libbassenc_ogg.so
new file mode 100644
index 0000000..c43f389
Binary files /dev/null and b/libs/linux-x86/libbassenc_ogg.so differ
diff --git a/libs/linux-x86/libbassenc_opus.so b/libs/linux-x86/libbassenc_opus.so
new file mode 100644
index 0000000..124a1a2
Binary files /dev/null and b/libs/linux-x86/libbassenc_opus.so differ
diff --git a/libs/linux-x86/libbassflac.so b/libs/linux-x86/libbassflac.so
new file mode 100644
index 0000000..6ebe3aa
Binary files /dev/null and b/libs/linux-x86/libbassflac.so differ
diff --git a/libs/linux-x86/libbasshls.so b/libs/linux-x86/libbasshls.so
new file mode 100644
index 0000000..dad36ae
Binary files /dev/null and b/libs/linux-x86/libbasshls.so differ
diff --git a/libs/linux-x86/libbassmidi.so b/libs/linux-x86/libbassmidi.so
new file mode 100644
index 0000000..5d96ccd
Binary files /dev/null and b/libs/linux-x86/libbassmidi.so differ
diff --git a/libs/linux-x86/libbassmix.so b/libs/linux-x86/libbassmix.so
new file mode 100644
index 0000000..81c8ecb
Binary files /dev/null and b/libs/linux-x86/libbassmix.so differ
diff --git a/libs/linux-x86/libbassopus.so b/libs/linux-x86/libbassopus.so
new file mode 100644
index 0000000..f9906a0
Binary files /dev/null and b/libs/linux-x86/libbassopus.so differ
diff --git a/libs/linux-x86/libbasswebm.so b/libs/linux-x86/libbasswebm.so
new file mode 100644
index 0000000..2d7001b
Binary files /dev/null and b/libs/linux-x86/libbasswebm.so differ
diff --git a/libs/linux-x86/libbasswv.so b/libs/linux-x86/libbasswv.so
new file mode 100644
index 0000000..2f77286
Binary files /dev/null and b/libs/linux-x86/libbasswv.so differ
diff --git a/libs/linux-x86/libtags.so b/libs/linux-x86/libtags.so
new file mode 100644
index 0000000..62aab4b
Binary files /dev/null and b/libs/linux-x86/libtags.so differ
diff --git a/libs/win32-arm64/bassape.dll b/libs/win32-arm64/bassape.dll
new file mode 100644
index 0000000..6f57f80
Binary files /dev/null and b/libs/win32-arm64/bassape.dll differ
diff --git a/libs/win32-arm64/basscd.dll b/libs/win32-arm64/basscd.dll
new file mode 100644
index 0000000..3b1dadc
Binary files /dev/null and b/libs/win32-arm64/basscd.dll differ
diff --git a/libs/win32-arm64/bassdsd.dll b/libs/win32-arm64/bassdsd.dll
new file mode 100644
index 0000000..ae3aa44
Binary files /dev/null and b/libs/win32-arm64/bassdsd.dll differ
diff --git a/libs/win32-arm64/bassenc.dll b/libs/win32-arm64/bassenc.dll
new file mode 100644
index 0000000..74be787
Binary files /dev/null and b/libs/win32-arm64/bassenc.dll differ
diff --git a/libs/win32-arm64/bassenc_flac.dll b/libs/win32-arm64/bassenc_flac.dll
new file mode 100644
index 0000000..783cbd2
Binary files /dev/null and b/libs/win32-arm64/bassenc_flac.dll differ
diff --git a/libs/win32-arm64/bassenc_mp3.dll b/libs/win32-arm64/bassenc_mp3.dll
new file mode 100644
index 0000000..a7425d3
Binary files /dev/null and b/libs/win32-arm64/bassenc_mp3.dll differ
diff --git a/libs/win32-arm64/bassenc_ogg.dll b/libs/win32-arm64/bassenc_ogg.dll
new file mode 100644
index 0000000..6a91007
Binary files /dev/null and b/libs/win32-arm64/bassenc_ogg.dll differ
diff --git a/libs/win32-arm64/bassenc_opus.dll b/libs/win32-arm64/bassenc_opus.dll
new file mode 100644
index 0000000..f529184
Binary files /dev/null and b/libs/win32-arm64/bassenc_opus.dll differ
diff --git a/libs/win32-arm64/bassflac.dll b/libs/win32-arm64/bassflac.dll
new file mode 100644
index 0000000..ffd438a
Binary files /dev/null and b/libs/win32-arm64/bassflac.dll differ
diff --git a/libs/win32-arm64/basshls.dll b/libs/win32-arm64/basshls.dll
new file mode 100644
index 0000000..8d3fb05
Binary files /dev/null and b/libs/win32-arm64/basshls.dll differ
diff --git a/libs/win32-arm64/bassloud.dll b/libs/win32-arm64/bassloud.dll
new file mode 100644
index 0000000..bb7e345
Binary files /dev/null and b/libs/win32-arm64/bassloud.dll differ
diff --git a/libs/win32-arm64/bassmidi.dll b/libs/win32-arm64/bassmidi.dll
new file mode 100644
index 0000000..cea9b66
Binary files /dev/null and b/libs/win32-arm64/bassmidi.dll differ
diff --git a/libs/win32-arm64/bassmix.dll b/libs/win32-arm64/bassmix.dll
new file mode 100644
index 0000000..d78c992
Binary files /dev/null and b/libs/win32-arm64/bassmix.dll differ
diff --git a/libs/win32-arm64/bassopus.dll b/libs/win32-arm64/bassopus.dll
new file mode 100644
index 0000000..5bcf4fd
Binary files /dev/null and b/libs/win32-arm64/bassopus.dll differ
diff --git a/libs/win32-arm64/basswasapi.dll b/libs/win32-arm64/basswasapi.dll
new file mode 100644
index 0000000..bfb0181
Binary files /dev/null and b/libs/win32-arm64/basswasapi.dll differ
diff --git a/libs/win32-arm64/basswebm.dll b/libs/win32-arm64/basswebm.dll
new file mode 100644
index 0000000..3ee0b0d
Binary files /dev/null and b/libs/win32-arm64/basswebm.dll differ
diff --git a/libs/win32-arm64/basswv.dll b/libs/win32-arm64/basswv.dll
new file mode 100644
index 0000000..2bfb3da
Binary files /dev/null and b/libs/win32-arm64/basswv.dll differ
diff --git a/libs/win32-x86-64/bass_aac.dll b/libs/win32-x86-64/bass_aac.dll
new file mode 100644
index 0000000..858cfca
Binary files /dev/null and b/libs/win32-x86-64/bass_aac.dll differ
diff --git a/libs/win32-x86-64/bass_ac3.dll b/libs/win32-x86-64/bass_ac3.dll
new file mode 100644
index 0000000..17366e3
Binary files /dev/null and b/libs/win32-x86-64/bass_ac3.dll differ
diff --git a/libs/win32-x86-64/bass_fx.dll b/libs/win32-x86-64/bass_fx.dll
new file mode 100644
index 0000000..23e3a6e
Binary files /dev/null and b/libs/win32-x86-64/bass_fx.dll differ
diff --git a/libs/win32-x86-64/bass_mpc.dll b/libs/win32-x86-64/bass_mpc.dll
new file mode 100644
index 0000000..68322c0
Binary files /dev/null and b/libs/win32-x86-64/bass_mpc.dll differ
diff --git a/libs/win32-x86-64/bass_spx.dll b/libs/win32-x86-64/bass_spx.dll
new file mode 100644
index 0000000..28d2a2d
Binary files /dev/null and b/libs/win32-x86-64/bass_spx.dll differ
diff --git a/libs/win32-x86-64/bass_ssl.dll b/libs/win32-x86-64/bass_ssl.dll
new file mode 100644
index 0000000..1eaaa47
Binary files /dev/null and b/libs/win32-x86-64/bass_ssl.dll differ
diff --git a/libs/win32-x86-64/bass_tta.dll b/libs/win32-x86-64/bass_tta.dll
new file mode 100644
index 0000000..f7aaae5
Binary files /dev/null and b/libs/win32-x86-64/bass_tta.dll differ
diff --git a/libs/win32-x86-64/bassalac.dll b/libs/win32-x86-64/bassalac.dll
new file mode 100644
index 0000000..a511245
Binary files /dev/null and b/libs/win32-x86-64/bassalac.dll differ
diff --git a/libs/win32-x86-64/bassape.dll b/libs/win32-x86-64/bassape.dll
new file mode 100644
index 0000000..eb2f7e3
Binary files /dev/null and b/libs/win32-x86-64/bassape.dll differ
diff --git a/libs/win32-x86-64/basscd.dll b/libs/win32-x86-64/basscd.dll
new file mode 100644
index 0000000..fa61cc6
Binary files /dev/null and b/libs/win32-x86-64/basscd.dll differ
diff --git a/libs/win32-x86-64/bassdsd.dll b/libs/win32-x86-64/bassdsd.dll
new file mode 100644
index 0000000..50353bb
Binary files /dev/null and b/libs/win32-x86-64/bassdsd.dll differ
diff --git a/libs/win32-x86-64/bassenc.dll b/libs/win32-x86-64/bassenc.dll
new file mode 100644
index 0000000..b8f6960
Binary files /dev/null and b/libs/win32-x86-64/bassenc.dll differ
diff --git a/libs/win32-x86-64/bassenc_flac.dll b/libs/win32-x86-64/bassenc_flac.dll
new file mode 100644
index 0000000..2a7e949
Binary files /dev/null and b/libs/win32-x86-64/bassenc_flac.dll differ
diff --git a/libs/win32-x86-64/bassenc_mp3.dll b/libs/win32-x86-64/bassenc_mp3.dll
new file mode 100644
index 0000000..930d490
Binary files /dev/null and b/libs/win32-x86-64/bassenc_mp3.dll differ
diff --git a/libs/win32-x86-64/bassenc_ogg.dll b/libs/win32-x86-64/bassenc_ogg.dll
new file mode 100644
index 0000000..5f9fb30
Binary files /dev/null and b/libs/win32-x86-64/bassenc_ogg.dll differ
diff --git a/libs/win32-x86-64/bassenc_opus.dll b/libs/win32-x86-64/bassenc_opus.dll
new file mode 100644
index 0000000..8fc0301
Binary files /dev/null and b/libs/win32-x86-64/bassenc_opus.dll differ
diff --git a/libs/win32-x86-64/bassflac.dll b/libs/win32-x86-64/bassflac.dll
new file mode 100644
index 0000000..7894024
Binary files /dev/null and b/libs/win32-x86-64/bassflac.dll differ
diff --git a/libs/win32-x86-64/basshls.dll b/libs/win32-x86-64/basshls.dll
new file mode 100644
index 0000000..16505fe
Binary files /dev/null and b/libs/win32-x86-64/basshls.dll differ
diff --git a/libs/win32-x86-64/bassmidi.dll b/libs/win32-x86-64/bassmidi.dll
new file mode 100644
index 0000000..39206c9
Binary files /dev/null and b/libs/win32-x86-64/bassmidi.dll differ
diff --git a/libs/win32-x86-64/bassmix.dll b/libs/win32-x86-64/bassmix.dll
new file mode 100644
index 0000000..e19f75f
Binary files /dev/null and b/libs/win32-x86-64/bassmix.dll differ
diff --git a/libs/win32-x86-64/bassopus.dll b/libs/win32-x86-64/bassopus.dll
new file mode 100644
index 0000000..9743836
Binary files /dev/null and b/libs/win32-x86-64/bassopus.dll differ
diff --git a/libs/win32-x86-64/basswebm.dll b/libs/win32-x86-64/basswebm.dll
new file mode 100644
index 0000000..1f38b42
Binary files /dev/null and b/libs/win32-x86-64/basswebm.dll differ
diff --git a/libs/win32-x86-64/basswma.dll b/libs/win32-x86-64/basswma.dll
new file mode 100644
index 0000000..4174c04
Binary files /dev/null and b/libs/win32-x86-64/basswma.dll differ
diff --git a/libs/win32-x86-64/basswv.dll b/libs/win32-x86-64/basswv.dll
new file mode 100644
index 0000000..471caff
Binary files /dev/null and b/libs/win32-x86-64/basswv.dll differ
diff --git a/libs/win32-x86-64/tags.dll b/libs/win32-x86-64/tags.dll
new file mode 100644
index 0000000..4f86a3e
Binary files /dev/null and b/libs/win32-x86-64/tags.dll differ
diff --git a/libs/win32-x86/bass_aac.dll b/libs/win32-x86/bass_aac.dll
new file mode 100644
index 0000000..bfc0813
Binary files /dev/null and b/libs/win32-x86/bass_aac.dll differ
diff --git a/libs/win32-x86/bass_ac3.dll b/libs/win32-x86/bass_ac3.dll
new file mode 100644
index 0000000..eb32677
Binary files /dev/null and b/libs/win32-x86/bass_ac3.dll differ
diff --git a/libs/win32-x86/bass_fx.dll b/libs/win32-x86/bass_fx.dll
new file mode 100644
index 0000000..a31f20f
Binary files /dev/null and b/libs/win32-x86/bass_fx.dll differ
diff --git a/libs/win32-x86/bass_mpc.dll b/libs/win32-x86/bass_mpc.dll
new file mode 100644
index 0000000..1a0ad93
Binary files /dev/null and b/libs/win32-x86/bass_mpc.dll differ
diff --git a/libs/win32-x86/bass_spx.dll b/libs/win32-x86/bass_spx.dll
new file mode 100644
index 0000000..def20d6
Binary files /dev/null and b/libs/win32-x86/bass_spx.dll differ
diff --git a/libs/win32-x86/bass_ssl.dll b/libs/win32-x86/bass_ssl.dll
new file mode 100644
index 0000000..31ec4bc
Binary files /dev/null and b/libs/win32-x86/bass_ssl.dll differ
diff --git a/libs/win32-x86/bass_tta.dll b/libs/win32-x86/bass_tta.dll
new file mode 100644
index 0000000..0f0c38f
Binary files /dev/null and b/libs/win32-x86/bass_tta.dll differ
diff --git a/libs/win32-x86/bassalac.dll b/libs/win32-x86/bassalac.dll
new file mode 100644
index 0000000..454b838
Binary files /dev/null and b/libs/win32-x86/bassalac.dll differ
diff --git a/libs/win32-x86/bassape.dll b/libs/win32-x86/bassape.dll
new file mode 100644
index 0000000..5e24a85
Binary files /dev/null and b/libs/win32-x86/bassape.dll differ
diff --git a/libs/win32-x86/basscd.dll b/libs/win32-x86/basscd.dll
new file mode 100644
index 0000000..5d338e2
Binary files /dev/null and b/libs/win32-x86/basscd.dll differ
diff --git a/libs/win32-x86/bassdsd.dll b/libs/win32-x86/bassdsd.dll
new file mode 100644
index 0000000..6c646f3
Binary files /dev/null and b/libs/win32-x86/bassdsd.dll differ
diff --git a/libs/win32-x86/bassenc.dll b/libs/win32-x86/bassenc.dll
new file mode 100644
index 0000000..d61ca83
Binary files /dev/null and b/libs/win32-x86/bassenc.dll differ
diff --git a/libs/win32-x86/bassenc_flac.dll b/libs/win32-x86/bassenc_flac.dll
new file mode 100644
index 0000000..a22fb57
Binary files /dev/null and b/libs/win32-x86/bassenc_flac.dll differ
diff --git a/libs/win32-x86/bassenc_mp3.dll b/libs/win32-x86/bassenc_mp3.dll
new file mode 100644
index 0000000..1980b7d
Binary files /dev/null and b/libs/win32-x86/bassenc_mp3.dll differ
diff --git a/libs/win32-x86/bassenc_ogg.dll b/libs/win32-x86/bassenc_ogg.dll
new file mode 100644
index 0000000..64992ea
Binary files /dev/null and b/libs/win32-x86/bassenc_ogg.dll differ
diff --git a/libs/win32-x86/bassenc_opus.dll b/libs/win32-x86/bassenc_opus.dll
new file mode 100644
index 0000000..327c299
Binary files /dev/null and b/libs/win32-x86/bassenc_opus.dll differ
diff --git a/libs/win32-x86/bassflac.dll b/libs/win32-x86/bassflac.dll
new file mode 100644
index 0000000..d0684c0
Binary files /dev/null and b/libs/win32-x86/bassflac.dll differ
diff --git a/libs/win32-x86/basshls.dll b/libs/win32-x86/basshls.dll
new file mode 100644
index 0000000..96a403f
Binary files /dev/null and b/libs/win32-x86/basshls.dll differ
diff --git a/libs/win32-x86/bassmidi.dll b/libs/win32-x86/bassmidi.dll
new file mode 100644
index 0000000..2722419
Binary files /dev/null and b/libs/win32-x86/bassmidi.dll differ
diff --git a/libs/win32-x86/bassmix.dll b/libs/win32-x86/bassmix.dll
new file mode 100644
index 0000000..e413823
Binary files /dev/null and b/libs/win32-x86/bassmix.dll differ
diff --git a/libs/win32-x86/bassopus.dll b/libs/win32-x86/bassopus.dll
new file mode 100644
index 0000000..6297357
Binary files /dev/null and b/libs/win32-x86/bassopus.dll differ
diff --git a/libs/win32-x86/basswebm.dll b/libs/win32-x86/basswebm.dll
new file mode 100644
index 0000000..f060e57
Binary files /dev/null and b/libs/win32-x86/basswebm.dll differ
diff --git a/libs/win32-x86/basswma.dll b/libs/win32-x86/basswma.dll
new file mode 100644
index 0000000..2945c9f
Binary files /dev/null and b/libs/win32-x86/basswma.dll differ
diff --git a/libs/win32-x86/basswv.dll b/libs/win32-x86/basswv.dll
new file mode 100644
index 0000000..2944ff9
Binary files /dev/null and b/libs/win32-x86/basswv.dll differ
diff --git a/libs/win32-x86/tags.dll b/libs/win32-x86/tags.dll
new file mode 100644
index 0000000..65c7e22
Binary files /dev/null and b/libs/win32-x86/tags.dll differ
diff --git a/src/Audio/Bass.java b/src/Audio/Bass.java
index f21259e..f4f6ce0 100644
--- a/src/Audio/Bass.java
+++ b/src/Audio/Bass.java
@@ -5,7 +5,6 @@ import com.sun.jna.*;
@SuppressWarnings("unused")
public interface Bass extends Library {
-
Bass Instance = Native.load("bass", Bass.class);
int BASSVERSION = 0x204; // API version
String BASSVERSIONTEXT = "2.4";
diff --git a/src/Audio/BassFileReader.java b/src/Audio/BassFileReader.java
index 5186755..3fcb369 100644
--- a/src/Audio/BassFileReader.java
+++ b/src/Audio/BassFileReader.java
@@ -13,6 +13,7 @@ import peers.media.SoundSource;
*
*/
public class BassFileReader implements SoundSource {
+
// Device = 0 --> no sound
private final int bassdev = 0;
// Device BassInit normal 48khz
diff --git a/src/Audio/BassSoundManager.java b/src/Audio/BassSoundManager.java
index 2de7b04..35f8be5 100644
--- a/src/Audio/BassSoundManager.java
+++ b/src/Audio/BassSoundManager.java
@@ -1,10 +1,11 @@
package Audio;
-
-
-
import com.sun.jna.Memory;
import com.sun.jna.Pointer;
import peers.media.AbstractSoundManager;
+import org.pmw.tinylog.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* Pengganti /AxisAudio/src/net/sourceforge/peers/javaxsound/JavaxSoundManager.java
@@ -14,6 +15,7 @@ import peers.media.AbstractSoundManager;
*/
@SuppressWarnings({"unused", "FieldCanBeLocal", "BusyWait", "ConditionalBreakInInfiniteLoop"})
public class BassSoundManager extends AbstractSoundManager {
+
private final Bass BASS = Bass.Instance;
private BassSoundManagerListener bsml;
private final int record_device, play_device;
@@ -25,13 +27,71 @@ public class BassSoundManager extends AbstractSoundManager {
private final int read_size = 320;
private int streamhandle, recordhandle;
-
-
+ private List input_devices, output_devices;
+
+ /**
+ * Create BassSoundManager with specified output and input device
+ * @param outputdevice output device index, start from 0
+ * @param inputdevice input device index, start from 0
+ * @param listener BassSoundManagerListener
+ */
public BassSoundManager(int outputdevice , int inputdevice, BassSoundManagerListener listener) {
- this.bsml = listener;
+ Logger.info("Bass Version : {}", Integer.toHexString(BASS.BASS_GetVersion()));
+ detect_input();
+ detect_output();
+ this.bsml = listener;
this.record_device = inputdevice;
this.play_device = outputdevice;
}
+
+ public BassSoundManager(String output_keyword, String input_keyword, BassSoundManagerListener listener){
+ Logger.info("Bass Version : {}", Integer.toHexString(BASS.BASS_GetVersion()));
+ detect_input();
+ detect_output();
+ this.bsml = listener;
+ this.record_device = input_devices.stream().filter(s -> s.contains(input_keyword)).map(s -> Integer.parseInt(s.substring(1, s.indexOf(']')))).findFirst().orElse(-1);
+ this.play_device = output_devices.stream().filter(s -> s.contains(output_keyword)).map(s -> Integer.parseInt(s.substring(1, s.indexOf(']')))).findFirst().orElse(-1);
+ if (record_device==-1)
+ Logger.error("Selected Input Device not found");
+ else
+ Logger.info("Selected Input Device : {}", input_devices.get(record_device));
+ if (play_device==-1)
+ Logger.error("Selected Output Device not found");
+ else
+ Logger.info("Selected Output Device : {}", output_devices.get(play_device));
+ }
+
+ private void detect_input(){
+ input_devices = new ArrayList<>();
+ int ii = 0;
+ while(true){
+ Bass.BASS_DEVICEINFO info = new Bass.BASS_DEVICEINFO();
+ if (BASS.BASS_RecordGetDeviceInfo(ii, info)) {
+ input_devices.add("["+ii+"] "+info.name);
+ ii++;
+ } else break;
+ }
+ if (input_devices.isEmpty())
+ Logger.info("No Input Devices");
+ else
+ Logger.info("Input Devices : \n{}", String.join("\n", input_devices));
+ }
+
+ private void detect_output(){
+ output_devices = new ArrayList<>();
+ int ii = 0;
+ while(true){
+ Bass.BASS_DEVICEINFO info = new Bass.BASS_DEVICEINFO();
+ if (BASS.BASS_GetDeviceInfo(ii, info)) {
+ output_devices.add("["+ii+"] "+info.name);
+ ii++;
+ } else break;
+ }
+ if (output_devices.isEmpty())
+ Logger.info("No Output Devices");
+ else
+ Logger.info("Output Devices : \n{}", String.join("\n", output_devices));
+ }
public void AddListener(BassSoundManagerListener listener) {
this.bsml = listener;
diff --git a/src/Audio/BassSoundManagerEvent.java b/src/Audio/BassSoundManagerEvent.java
new file mode 100644
index 0000000..8dd3a90
--- /dev/null
+++ b/src/Audio/BassSoundManagerEvent.java
@@ -0,0 +1,11 @@
+package Audio;
+
+public interface BassSoundManagerEvent {
+ void SoundChannelOpened();
+ void SoundChannelClosed();
+ void OutputChannelPCMData(int length, byte[] pcmdata);
+ void InputChannelPCMData(int length, byte[] pcmdata);
+ void DeviceFailure(boolean onOutput, String msg);
+ void BufferingInformation(boolean onOutput, String msg);
+ void ChannelLevel(boolean onOutput, int level);
+}
diff --git a/src/Audio/BassSoundManagerListener.java b/src/Audio/BassSoundManagerListener.java
index 2b6e815..95ff065 100644
--- a/src/Audio/BassSoundManagerListener.java
+++ b/src/Audio/BassSoundManagerListener.java
@@ -6,13 +6,13 @@ package Audio;
*
*/
public interface BassSoundManagerListener {
- public void Opened();
- public void Closed();
- public void WriteFromRTP(int length, byte[] pcmdata);
- public void ReadToRTP(int length, byte[] pcmdata);
- public void log_info(String msg);
- public void log_error(String msg);
- public void DeviceFailure(String msg);
- public void BufferingInformation(String msg);
- public void ChannelLevel(boolean is_input, int value);
+ void Opened();
+ void Closed();
+ void WriteFromRTP(int length, byte[] pcmdata);
+ void ReadToRTP(int length, byte[] pcmdata);
+ void log_info(String msg);
+ void log_error(String msg);
+ void DeviceFailure(String msg);
+ void BufferingInformation(String msg);
+ void ChannelLevel(boolean is_input, int value);
}
diff --git a/src/Audio/JSIPAudio.java b/src/Audio/JSIPAudio.java
index 987dbc8..8e7275b 100644
--- a/src/Audio/JSIPAudio.java
+++ b/src/Audio/JSIPAudio.java
@@ -22,6 +22,7 @@ import Audio.Bass.BASS_DEVICEINFO;
import org.pmw.tinylog.Logger;
+
/**
* SIP Audio Converter
* @author rdkartono
@@ -29,6 +30,7 @@ import org.pmw.tinylog.Logger;
*/
@SuppressWarnings({"unused", "ResultOfMethodCallIgnored"})
public class JSIPAudio {
+
private final Bass BASS = Bass.Instance;
private final BassMix BASSMIX = BassMix.Instance;
private final BassEnc BASSENC = BassEnc.Instance;
diff --git a/src/Audio/basicfunctions.java b/src/Audio/basicfunctions.java
index 4b89495..cddfe43 100644
--- a/src/Audio/basicfunctions.java
+++ b/src/Audio/basicfunctions.java
@@ -10,9 +10,10 @@ import Audio.Bass.BASS_DEVICEINFO;
import Audio.Bass.RECORDPROC;
import lombok.Getter;
+
@SuppressWarnings("unused")
public abstract class basicfunctions {
-
+
abstract public boolean FileConvert(String sourcefilename, int targetsamplingrate, String targetfilename);
abstract public int OpenFileForStreaming(int playdevice, String sourcefilename, int targetsamplingrate);
abstract public int OpenInputForStreaming(int recdevice, int targetsamplingrate);
diff --git a/src/Main.java b/src/Main.java
index afaf54c..51de754 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,3 +1,4 @@
+import Audio.BassSoundManagerEvent;
import SBC.*;
import SIP.SIP_Request;
import SIP.SIP_Response;
@@ -50,6 +51,44 @@ public class Main {
// SIP Section
client = new jSIPClient(config);
+ // event dari sisi Bass Sound Manager
+ client.SetBassSoundManagerEvent(new BassSoundManagerEvent() {
+ @Override
+ public void SoundChannelOpened() {
+
+ }
+
+ @Override
+ public void SoundChannelClosed() {
+
+ }
+
+ @Override
+ public void OutputChannelPCMData(int length, byte[] pcmdata) {
+
+ }
+
+ @Override
+ public void InputChannelPCMData(int length, byte[] pcmdata) {
+
+ }
+
+ @Override
+ public void DeviceFailure(boolean onOutput, String msg) {
+
+ }
+
+ @Override
+ public void BufferingInformation(boolean onOutput, String msg) {
+
+ }
+
+ @Override
+ public void ChannelLevel(boolean onOutput, int level) {
+
+ }
+ });
+ // event dari sisi protocol SIP
client.SetJavaSipEvent(new javaSipEvents() {
@Override
public void Registering(SIP_Request req) {
@@ -64,9 +103,8 @@ public class Main {
Logger.info("Registered to SIP Server, Response: {}",resp);
Buzzer_Off();
callLight_Idle();
- Logger.info("Calling callLight idle from RegisterSuccesful");
SipStatus = "Idle";
- CallTest("100");
+
}
@Override
@@ -74,6 +112,7 @@ public class Main {
Logger.info("Failed to register to SIP Server, Response: {}",resp);
Buzzer_Off();
SipStatus = "Register Failed";
+
}
@Override
@@ -93,7 +132,6 @@ public class Main {
public void RemoteHangUp(SIP_Request req) {
Logger.info("Remote Hangup, Request: {}",req);
callLight_Idle();
- Logger.info("Calling callLight idle from RemoteHangUp");
Buzzer_Off();
client.HangUp();
@@ -175,10 +213,10 @@ public class Main {
resp = new SocketioResponse("success", SipStatus);
break;
case "hangup":
- if (incomingRequest!=null){
+ if (incomingRequest!=null || incomingResponse!=null){
resp = new SocketioResponse("success", "Reject Incoming Call from "+incomingRequest.CallID);
hangupCall();
- } else if (oncallRequest!=null){
+ } else if (oncallRequest!=null || oncallResponse!=null){
resp = new SocketioResponse("success", "Hangup Call to "+oncallRequest.CallID);
hangupCall();
} else {
@@ -226,13 +264,14 @@ public class Main {
if (callButton.isInitialized()){
callButton.setOnLongPress(vv->{
Logger.info("Call Button Long Pressed");
- pickupCall();
+ //pickupCall();
+ CallTest("100");
});
callButton.setOnShortPress(vv->{
Logger.info("Call Button Short Pressed");
pickupCall();
});
- }
+ } else Logger.error("Failed to initialize Call Button");
hangupButton = new GpioInput(NanopiDuo2.Pin14.gpionumber, true);
if (hangupButton.isInitialized()){
hangupButton.setOnShortPress(vv->{
@@ -243,7 +282,7 @@ public class Main {
Logger.info("Hangup Button Long Pressed");
hangupCall();
});
- }
+ } else Logger.error("Failed to initialize Hangup Button");
// belum ada pinout nya di PCB demo (04/12/2024)
pilotLight = new GpioOutput(NanopiDuo2.Pin16.gpionumber, true);
diff --git a/src/SBC/GpioInput.java b/src/SBC/GpioInput.java
index 3499c8a..9225bf7 100644
--- a/src/SBC/GpioInput.java
+++ b/src/SBC/GpioInput.java
@@ -46,38 +46,52 @@ public class GpioInput {
public GpioInput(int gpionumber, final boolean activeLow){
if (gpionumber>0){
if (HaveGPIO()){
- if (WriteFile(gpioExportPath,gpionumber)){
- valuePath = gpioPath.resolve("gpio"+gpionumber).resolve("value");
- directionPath = gpioPath.resolve("gpio"+gpionumber).resolve("direction");
- if (Files.exists(valuePath) && Files.exists(directionPath)){
- if (WriteFile(directionPath,"in")){
- this.gpionumber = gpionumber;
- initialized = true;
- new Thread(()->{
- while(initialized){
- try{
- Thread.sleep(10);
- } catch (Exception ignored) {}
- String value = ReadFile(valuePath);
- if (Objects.equals(value,activeLow?"0":"1")){
- OnCounter.incrementAndGet();
- } else {
- int vv = OnCounter.getAndSet(0);
- if (vv>= shortPressTime){
- if (vv < longPressTime){
- updateShortPressed();
- } else {
- updateLongPressed();
- }
+ if (!GpioExists(gpionumber)) {
+ // belum ada
+ if (!WriteFile(gpioExportPath, gpionumber)){
+ // gak bisa export
+ Logger.info("Failed to export GPIO: {}",gpionumber);
+ return;
+ }
+ // sampe sini bisa export
+ }
+ // sampe sini folder gpio ada
+
+ valuePath = gpioPath.resolve("gpio"+gpionumber).resolve("value");
+ directionPath = gpioPath.resolve("gpio"+gpionumber).resolve("direction");
+ if (Files.exists(valuePath) && Files.exists(directionPath)){
+ if (WriteFile(directionPath,"in")){
+ this.gpionumber = gpionumber;
+ initialized = true;
+ new Thread(()->{
+ while(initialized){
+ try{
+ Thread.sleep(10);
+ } catch (Exception ignored) {}
+ String value = ReadFile(valuePath);
+
+ if (value.trim().equals(activeLow?"0":"1")){
+ OnCounter.incrementAndGet();
+ //Logger.info("GPIO Input Activated : {} - {}",gpionumber,oc);
+ } else {
+ int vv = OnCounter.getAndSet(0);
+ if (vv>= shortPressTime){
+ //Logger.info("GPIO Input: {} - {}",gpionumber,vv);
+ if (vv < longPressTime){
+ //Logger.info("Short Pressed: {}",gpionumber);
+ updateShortPressed();
+ } else {
+ //Logger.info("Long Pressed: {}",gpionumber);
+ updateLongPressed();
}
- // di bawah shortPressTime, diabaikan
}
+ // di bawah shortPressTime, diabaikan
}
- }).start();
- Logger.info("GPIO Input created: {}",gpionumber);
- } else Logger.info("Failed to set direction to in: {}",gpionumber);
- } else Logger.info("Failed to export GPIO: {}",gpionumber);
- } else Logger.info("Failed to write export GPIO: {}",gpionumber);
+ }
+ }).start();
+ Logger.info("GPIO Input created: {}",gpionumber);
+ } else Logger.info("Failed to set direction to in: {}",gpionumber);
+ } else Logger.info("Failed to export GPIO: {}",gpionumber);
} else Logger.info("Dont have GPIO path");
} else Logger.info("Platform is not Linux");
}
diff --git a/src/SBC/GpioOutput.java b/src/SBC/GpioOutput.java
index 65082b8..e94e9fa 100644
--- a/src/SBC/GpioOutput.java
+++ b/src/SBC/GpioOutput.java
@@ -26,19 +26,28 @@ public class GpioOutput {
public GpioOutput(int gpionumber,boolean activeHigh){
if (gpionumber>0){
if (HaveGPIO()){
- if (WriteFile(gpioExportPath,gpionumber)){
- valuePath = gpioPath.resolve("gpio"+gpionumber).resolve("value");
- directionPath = gpioPath.resolve("gpio"+gpionumber).resolve("direction");
- if (Files.exists(valuePath) && Files.exists(directionPath)){
- if (WriteFile(directionPath,"out")){
- this.activeHigh = activeHigh;
- this.gpionumber = gpionumber;
- initialized = true;
- SetValue(false);
- Logger.info("GPIO Output created: {}",gpionumber);
- } else Logger.info("Failed to set direction to in: {}",gpionumber);
- } else Logger.info("Failed to export GPIO: {}",gpionumber);
- } else Logger.info("Failed to write export GPIO: {}",gpionumber);
+ if (!GpioExists(gpionumber)){
+ // belum ada
+ if (!WriteFile(gpioExportPath,gpionumber)){
+ // gak bisa export
+ Logger.info("Failed to export GPIO: {}",gpionumber);
+ return;
+ }
+ // sampe sini bisa export
+ }
+ // sampe sini folder gpio ada
+ valuePath = gpioPath.resolve("gpio"+gpionumber).resolve("value");
+ directionPath = gpioPath.resolve("gpio"+gpionumber).resolve("direction");
+ if (Files.exists(valuePath) && Files.exists(directionPath)){
+ if (WriteFile(directionPath,"out")){
+ this.activeHigh = activeHigh;
+ this.gpionumber = gpionumber;
+ initialized = true;
+ SetValue(false);
+ Logger.info("GPIO Output created: {}",gpionumber);
+ } else Logger.info("Failed to set direction to in: {}",gpionumber);
+ } else Logger.info("Failed to export GPIO: {}",gpionumber);
+
} else Logger.info("Dont have GPIO path");
} else Logger.info("Platform is not Linux");
}
diff --git a/src/SIP/jSIPClient.java b/src/SIP/jSIPClient.java
index 3090b11..2f69c23 100644
--- a/src/SIP/jSIPClient.java
+++ b/src/SIP/jSIPClient.java
@@ -5,10 +5,7 @@ import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import Audio.BassFileReader;
-import Audio.BassFileReaderListener;
-import Audio.BassSoundManager;
-import Audio.BassSoundManagerListener;
+import Audio.*;
import code.common;
import lombok.Getter;
@@ -42,17 +39,16 @@ public class jSIPClient {
@Getter private String Username;
@Getter private String Password;
-
public CustomConfig cc = new CustomConfig();
private EventManager em;
-
-
private javaSipEvents jse;
+ private BassSoundManagerEvent bsme;
private BassFileReaderListener bfrl;
private final ExecutorService exec = Executors.newSingleThreadExecutor();
-
+
+
/**
* Connect to SIP Server
@@ -60,15 +56,12 @@ public class jSIPClient {
*/
public boolean Connect() {
Disconnect();
- if (cc==null) {
- System.out.println("Creating Custom Config");
- cc = new CustomConfig();
- } else System.out.println("Custom Config already created");
+ if (cc==null) cc = new CustomConfig();
cc.setDomain(serverAddress);
cc.setUserPart(Username);
cc.setPassword(Password);
cc.SetLocalInetAddress("0.0.0.0");
- em = new EventManager(cc);
+ em = new EventManager(cc,bsme);
return false;
}
@@ -76,6 +69,10 @@ public class jSIPClient {
public void SetJavaSipEvent(javaSipEvents xx) {
this.jse = xx;
}
+
+ public void SetBassSoundManagerEvent(BassSoundManagerEvent xx) {
+ this.bsme = xx;
+ }
public void SetBassFileReaderListener(BassFileReaderListener xx) {
this.bfrl = xx;
@@ -244,76 +241,64 @@ public class jSIPClient {
private boolean all_success;
//JavaxSoundManager jsm;
BassSoundManager jsm;
-
- public EventManager(final CustomConfig xx) {
+ BassSoundManagerEvent bsme;
+ public EventManager(final CustomConfig xx, final BassSoundManagerEvent bsme) {
+ this.bsme = bsme;
all_success = false;
//Logger lg = new FileLogger(null);
- Logger lg = null;
+// Logger lg = null;
// jsm = new JavaxSoundManager(false, lg, null);
- jsm = new BassSoundManager(1,0, new BassSoundManagerListener() {
+ jsm = new BassSoundManager("H3 Audio","H3 Audio", new BassSoundManagerListener() {
@Override
public void Opened() {
raise_log_event("BassSoundManager Opened");
- raise_soundchannelopened_event();
+ if (bsme!=null) bsme.SoundChannelOpened();
}
@Override
public void Closed() {
raise_log_event("BassSoundManager Closed");
- raise_soundchannelclosed_event();
+ if (bsme!=null) bsme.SoundChannelClosed();
}
@Override
public void log_info(String msg) {
- raise_log_event("BassSoundManager info : "+msg);
+ Logger.info("BassSoundManager info : "+msg);
}
@Override
public void log_error(String msg) {
- raise_log_event("BassSoundManager error : "+msg);
-
+ Logger.error("BassSoundManager error : "+msg);
}
@Override
public void WriteFromRTP(int length, byte[] pcmdata) {
// buat debugging aja, kalau dikeluarin, spamming log
//raise_log_event("BassSoundmanager WriteFromRTP "+length+" bytes");
- raise_outputchannelpcmdata_event(length, pcmdata);
+ if (bsme!=null) bsme.OutputChannelPCMData(length, pcmdata);
}
@Override
public void ReadToRTP(int length, byte[] pcmdata) {
// buat debugging aja, kalau dikeluarin, spamming log
//raise_log_event("BassSoundManager ReadToRTP "+length+" bytes");
- raise_inputchannelpcmdata_event(length, pcmdata);
+ if (bsme!=null) bsme.InputChannelPCMData(length, pcmdata);
}
@Override
public void DeviceFailure(String msg) {
- raise_log_event("BassSondManager DeviceFailure : "+msg);
- if (msg.contains("OutputChannel"))
- raise_outputchanneldevicefailure_event();
- else if (msg.contains("InputChannel"))
- raise_inputchanneldevicefailure_event();
+ if (bsme!=null) bsme.DeviceFailure(msg.contains("OutputChannel"), msg);
}
@Override
public void BufferingInformation(String msg) {
- raise_log_event("BassSoundManager BufferingInformation : "+msg);
- if (msg.contains("OutputChannel"))
- raise_outputchannelbuffering_event(msg);
- else if (msg.contains("InputChannel"))
- raise_inputchannelbuffering_event(msg);
+ if (bsme!=null) bsme.BufferingInformation(msg.contains("OutputChannel"), msg);
}
@Override
public void ChannelLevel(boolean is_input, int value) {
- if (is_input)
- raise_inputchannellevel_event(value);
- else
- raise_outputchannellevel_event(value);
-
+ if (bsme!=null) bsme.ChannelLevel(!is_input, value);
}
});
@@ -573,46 +558,7 @@ public class jSIPClient {
if (jse!=null) jse.CalleePickup(resp);
}
- private void raise_inputchanneldevicefailure_event(){
- //if (need_inputchanneldevicefailure_event) ba.raiseEventFromDifferentThread(Me, null, 0,event+"_inputchanneldevicefailure", false,null );
- }
-
- private void raise_inputchannelbuffering_event(String msg) {
- //if (need_inputchannelbuffering_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_inputchannelbuffering", false, new Object[] {msg});
- }
-
- private void raise_inputchannelpcmdata_event(int length, byte[] bb) {
- //if (need_inputchannelpcmdata_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_inputchannelpcmdata", false, new Object[] {length, bb});
- }
-
- private void raise_outputchanneldevicefailure_event(){
- //if (need_outputchanneldevicefailure_event) ba.raiseEventFromDifferentThread(Me, null, 0,event+"_outputchanneldevicefailure", false,null );
- }
-
- private void raise_outputchannelbuffering_event(String msg) {
- //if (need_outputchannelbuffering_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_outputchannelbuffering", false, new Object[] {msg});
- }
-
- private void raise_outputchannelpcmdata_event(int length, byte[] bb) {
- //if (need_outputchannelpcmdata_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_outputchannelpcmdata", false, new Object[] {length, bb});
- }
-
- private void raise_soundchannelclosed_event() {
- //if (need_soundchannelclosed_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_soundchannelclosed", false, null);
- }
-
- private void raise_soundchannelopened_event() {
- //if (need_soundchannelopened_event) ba.raiseEventFromDifferentThread(Me, null, 0,event+"_soundchannelopened", false, null);
- }
-
- private void raise_inputchannellevel_event(int value) {
- //if (need_inputchannellevel_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_inputchannellevel", false, new Object[] {value});
- }
-
- private void raise_outputchannellevel_event(int value) {
- //if (need_outputchannellevel_event) ba.raiseEventFromDifferentThread(Me, null, 0, event+"_outputchannellevel", false, new Object[] {value});
- }
@@ -620,8 +566,6 @@ public class jSIPClient {
serverAddress = GetProperties_StringValue(prop,"SipServer","rdkartono.ddns.me");
Username = GetProperties_StringValue(prop,"SipUsername","101");
Password = GetProperties_StringValue(prop,"SipPassword","password101");
- Logger.info("SipServer: "+serverAddress);
- Logger.info("SipUsername: "+Username);
- Logger.info("SipPassword: "+Password);
+ Logger.info("SIP Server={}, Username={}, Password={}", serverAddress, Username, Password);
}
}
diff --git a/src/Webpage/WebServer.java b/src/Webpage/WebServer.java
index 12ed838..adb084a 100644
--- a/src/Webpage/WebServer.java
+++ b/src/Webpage/WebServer.java
@@ -18,7 +18,7 @@ public class WebServer {
webusername = GetProperties_StringValue(prop,"WebUsername", "admin");
webpassword = GetProperties_StringValue(prop,"WebPassword", "admin");
- app = Javalin.create(config -> config.addStaticFiles("/public", Location.CLASSPATH)).start(listenport);
+ app = Javalin.create(config -> config.addStaticFiles("/public", Location.CLASSPATH));
app.get("/", ctx ->{
if (Objects.equals(ctx.sessionAttribute("username"), webusername)){
ctx.redirect("/index.html");
diff --git a/src/code/common.java b/src/code/common.java
index 6885c6f..12ea4dc 100644
--- a/src/code/common.java
+++ b/src/code/common.java
@@ -1,7 +1,6 @@
package code;
import com.google.gson.Gson;
-import com.sun.jna.Native;
import com.sun.jna.Platform;
import org.jetbrains.annotations.NotNull;
import org.pmw.tinylog.Logger;
@@ -13,6 +12,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.file.Files;
+import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
@@ -27,6 +27,16 @@ public class common {
public static final double MB_threshold = 1024.0 * 1024.0;
public static final double GB_threshold = 1024.0 * 1024.0 * 1024.0;
+ public static boolean GpioExists(int gpionumber){
+ Path xx = gpioPath.resolve("gpio"+gpionumber);
+ if (Files.isDirectory(xx)){
+ if (Files.isRegularFile(xx.resolve("value"))){
+ return Files.isRegularFile(xx.resolve("direction"));
+ }
+ }
+ return false;
+ }
+
public static String GetProperties_StringValue(Properties prop, String key, String defaultavalue){
if (prop!=null){
if (ValidString(key)){
@@ -61,6 +71,7 @@ public class common {
}
}
+
/**
* Extract properties file from resource path
* @param directory destination directory
@@ -74,14 +85,16 @@ public class common {
Logger.info("Properties file already exists: {}",filename);
return;
}
- File source = Native.extractFromResourcePath(filename);
+ // delete existing file
+ if (dest.isFile()) Logger.info("Delete old {} : {}",filename,dest.delete());
+
+ InputStream source = common.class.getResourceAsStream("/"+filename);
if (source==null){
Logger.error("Failed to extract properties file: {}",filename);
return;
}
- if (source.renameTo(dest))
- Logger.info("Extracted properties file: {}",filename);
- else Logger.error("Failed to rename properties file: {}",filename);
+ Files.copy(source,dest.toPath());
+ Logger.info("Extracted properties file: {}",filename);
} catch (Exception e) {
Logger.error("Failed to extract properties file: {}",filename);
}
@@ -114,7 +127,6 @@ public class common {
public static boolean SaveProperties(String directory, String filename, Properties prop){
try {
File file = new File(directory,filename);
- file.createNewFile();
prop.store(Files.newOutputStream(file.toPath()),"");
Logger.info("Saved properties file: {}",filename);
return true;
diff --git a/src/peers/media/MediaManager.java b/src/peers/media/MediaManager.java
index a2c8737..baa4c6d 100644
--- a/src/peers/media/MediaManager.java
+++ b/src/peers/media/MediaManager.java
@@ -241,13 +241,16 @@ public class MediaManager {
switch (userAgent.getMediaMode()) {
case file:
case captureAndPlayback:
- try {
- InetAddress inetAddress = InetAddress.getByName(destAddress);
- rtpSession.setRemoteAddress(inetAddress);
- } catch (UnknownHostException e) {
- Logger.error("unknown host: " + destAddress, e);
+ if (rtpSession!=null){
+ try {
+ InetAddress inetAddress = InetAddress.getByName(destAddress);
+ rtpSession.setRemoteAddress(inetAddress);
+ rtpSession.setRemotePort(destPort);
+ } catch (UnknownHostException e) {
+ Logger.error("unknown host: " + destAddress, e);
+ }
}
- rtpSession.setRemotePort(destPort);
+
break;
case echo:
//TODO update echo socket