SOUNDSENSE-RS
(https://raw.githubusercontent.com/prixt/soundsense-rs/master/icons/icon.png)
A SoundSense clone, written in Rust
Releases (https://github.com/prixt/soundsense-rs/releases) - Repository (https://github.com/prixt/soundsense-rs)
(https://raw.githubusercontent.com/prixt/soundsense-rs/release/screenshots/windows-screenshot.png)
(https://raw.githubusercontent.com/prixt/soundsense-rs/release/screenshots/macos-screenshot.png)
(https://raw.githubusercontent.com/prixt/soundsense-rs/release/screenshots/linux-screenshot.png)
Hello! I am writing a SoundSense alternative in Rust.
Why?
- To see if I could.
- To create a standalone application that doesn't require bloat.
Ultimately, you should only need one binary executable, the soundpack folder, and DF.
Current Features
- Plays sound reactive to what is happening in DF.
- Sound volumes can be adjusted realtime, based on channel.
- Custom ignore list, allowing the user to customize which log patterns to ignore.
- Minimalistic GUI.
Command line parameters
- -l / --gamelog [GAMELOG_FILE]: preload the gamelog (default: ".\gamelog.txt")
- -p / --soundpack [PACK_DIR]: preload the soundpack (default: ".\soundpack")
- -i / --ignore [IGNORE_FILE]: preload the ignore list (default: ".\ignore.txt")
- --no-config: Don't read config files on start. Will use the given paths, or soundsense-rs defaults.
Example:
soundsense-rs.exe -l "C:\path\to\gamelog.txt" -p "D:\path\to\soundpack\folder"
This will make soundsense-rs check if there is a file named "ignore.txt" in the working directory, and will use that file to make the ignore list.
Dependencies
Linux: libasound2, libgtk-3, libgdk-3, libwebkit2gtk-4.0, libjavascriptcregtk-4.0
Known Issues
- Not all parameters in the soundpacks are implemented. (ex. threshold)
Bug reports and feature requests are welcome!
Do you have an icon for this application? Here's what I'm using right now:
(https://i.imgur.com/ujDWPal.png)
(https://i.imgur.com/IjcNueB.png)
(https://i.imgur.com/3PjhqEs.png)
Made an icon for the app. Thoughts?
Some more pixels would be nice so it doesn't look blurry. My 12-inch laptop displays them as 256x256 icons, but it might be larger for people with larger displays. The icon I was using before is 1024x1024, which is the maximum allowed.
(https://i.imgur.com/fHe1ROQ.png)
(https://i.imgur.com/Un8W8gJ.png)
Also, updated the experiment (https://github.com/prixt/soundsense-rs/tree/experiment) branch, which includes svg, ico, & icns files.
Found it! In emotion.xml, the playlist for bold voice lines is `voices/Bold.m3u`, but the actual file name is `voice/bold.m3u`.
On Windows, it ignored the case, but on Linux it borked. You should be able to fix this by editing emotion.xml accordingly.
Thanks, this fixed it for me. :) So actually a soundpack issue...
Can't help with the dependencies since it ran for me without needing anything additional on my archlinux setup - but I already have a lot installed for other applications.
As a data point here is my ldd:
ldd soundsense-rs-v1.4.4-linux
linux-vdso.so.1 (0x00007ffc4b1aa000)
libwebkit2gtk-4.0.so.37 => /usr/lib/libwebkit2gtk-4.0.so.37 (0x00007f3bc2bd8000)
libgtk-3.so.0 => /usr/lib/libgtk-3.so.0 (0x00007f3bc24fd000)
libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x00007f3bc2403000)
libjavascriptcoregtk-4.0.so.18 => /usr/lib/libjavascriptcoregtk-4.0.so.18 (0x00007f3bc0ddf000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007f3bc0d83000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f3bc0c5e000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x00007f3bc0b82000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f3bc0b7d000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f3bc0b72000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f3bc0b50000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f3bc0b36000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f3bc0970000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f3bc0828000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f3bc07a2000)
libEGL.so.1 => /usr/lib/libEGL.so.1 (0x00007f3bc0791000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f3bc0777000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x00007f3bc0729000)
libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007f3bc0625000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x00007f3bc05fa000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007f3bc04d6000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00007f3bc04b0000)
libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00007f3bc0300000)
libwpe-1.0.so.1 => /usr/lib/libwpe-1.0.so.1 (0x00007f3bc02f6000)
libWPEBackend-fdo-1.0.so.1 => /usr/lib/libWPEBackend-fdo-1.0.so.1 (0x00007f3bc02e7000)
libnotify.so.4 => /usr/lib/libnotify.so.4 (0x00007f3bc02db000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f3bc0175000)
libxslt.so.1 => /usr/lib/libxslt.so.1 (0x00007f3bc0134000)
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00007f3bc0003000)
libicui18n.so.65 => /usr/lib/libicui18n.so.65 (0x00007f3bbfd0f000)
libicuuc.so.65 => /usr/lib/libicuuc.so.65 (0x00007f3bbfb2d000)
libwoff2dec.so.1.0.2 => /usr/lib/libwoff2dec.so.1.0.2 (0x00007f3bbf920000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007f3bbf8d8000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f3bbf80a000)
libharfbuzz-icu.so.0 => /usr/lib/libharfbuzz-icu.so.0 (0x00007f3bbf805000)
libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007f3bbf6e7000)
libgstapp-1.0.so.0 => /usr/lib/libgstapp-1.0.so.0 (0x00007f3bbf6d7000)
libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007f3bbf665000)
libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007f3bbf557000)
libgstpbutils-1.0.so.0 => /usr/lib/libgstpbutils-1.0.so.0 (0x00007f3bbf521000)
libgstaudio-1.0.so.0 => /usr/lib/libgstaudio-1.0.so.0 (0x00007f3bbf4af000)
libgsttag-1.0.so.0 => /usr/lib/libgsttag-1.0.so.0 (0x00007f3bbf475000)
libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007f3bbf3d4000)
libgstgl-1.0.so.0 => /usr/lib/libgstgl-1.0.so.0 (0x00007f3bbf366000)
libgstfft-1.0.so.0 => /usr/lib/libgstfft-1.0.so.0 (0x00007f3bbf35c000)
libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x00007f3bbf2c5000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f3bbf28d000)
libopenjp2.so.7 => /usr/lib/libopenjp2.so.7 (0x00007f3bbf230000)
libwebp.so.7 => /usr/lib/libwebp.so.7 (0x00007f3bbf1c0000)
libwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2 (0x00007f3bbf1b8000)
libsoup-2.4.so.1 => /usr/lib/libsoup-2.4.so.1 (0x00007f3bbf11f000)
libenchant-2.so.2 => /usr/lib/libenchant-2.so.2 (0x00007f3bbf112000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f3bbf10d000)
libseccomp.so.2 => /usr/lib/libseccomp.so.2 (0x00007f3bbf0c4000)
libsecret-1.so.0 => /usr/lib/libsecret-1.so.0 (0x00007f3bbf062000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007f3bbf04a000)
libhyphen.so.0 => /usr/lib/libhyphen.so.0 (0x00007f3bbee44000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f3bbed04000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x00007f3bbecff000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00007f3bbecfa000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x00007f3bbece4000)
libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x00007f3bbecdd000)
libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00007f3bbeccd000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3bbeae4000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f3bc6116000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007f3bbead4000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x00007f3bbeabd000)
libfribidi.so.0 => /usr/lib/libfribidi.so.0 (0x00007f3bbea9d000)
libcairo-gobject.so.2 => /usr/lib/libcairo-gobject.so.2 (0x00007f3bbea91000)
libepoxy.so.0 => /usr/lib/libepoxy.so.0 (0x00007f3bbe966000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x00007f3bbe953000)
libatk-bridge-2.0.so.0 => /usr/lib/libatk-bridge-2.0.so.0 (0x00007f3bbe91f000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f3bbe916000)
libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x00007f3bbe8d3000)
libwayland-cursor.so.0 => /usr/lib/libwayland-cursor.so.0 (0x00007f3bbe8ca000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f3bbe8b5000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00007f3bbe8a9000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00007f3bbe89c000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007f3bbe897000)
libffi.so.6 => /usr/lib/libffi.so.6 (0x00007f3bbe88a000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f3bbe817000)
libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f3bbe760000)
libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f3bbe72d000)
libthai.so.0 => /usr/lib/libthai.so.0 (0x00007f3bbe722000)
libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007f3bbe6fb000)
libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00007f3bbe651000)
libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x00007f3bbe64c000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f3bbe622000)
libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x00007f3bbe612000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007f3bbe605000)
libmount.so.1 => /usr/lib/libmount.so.1 (0x00007f3bbe5a6000)
libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f3bbe58d000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f3bbe565000)
libicudata.so.65 => /usr/lib/libicudata.so.65 (0x00007f3bbcab4000)
libwoff2common.so.1.0.2 => /usr/lib/libwoff2common.so.1.0.2 (0x00007f3bbc8b1000)
libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x00007f3bbc8a1000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f3bbc871000)
libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f3bbc85e000)
libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007f3bbc83c000)
libunwind.so.8 => /usr/lib/libunwind.so.8 (0x00007f3bbc822000)
libdw.so.1 => /usr/lib/libdw.so.1 (0x00007f3bbc7cc000)
liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007f3bbc74a000)
libgstallocators-1.0.so.0 => /usr/lib/libgstallocators-1.0.so.0 (0x00007f3bbc744000)
libX11-xcb.so.1 => /usr/lib/libX11-xcb.so.1 (0x00007f3bbc73f000)
libgudev-1.0.so.0 => /usr/lib/libgudev-1.0.so.0 (0x00007f3bbc732000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x00007f3bbc71b000)
libgbm.so.1 => /usr/lib/libgbm.so.1 (0x00007f3bbc70a000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00007f3bbc6ba000)
libpsl.so.5 => /usr/lib/libpsl.so.5 (0x00007f3bbc6a7000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f3bbc65b000)
libatspi.so.0 => /usr/lib/libatspi.so.0 (0x00007f3bbc624000)
libdatrie.so.1 => /usr/lib/libdatrie.so.1 (0x00007f3bbc41d000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f3bbc418000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f3bbc410000)
libblkid.so.1 => /usr/lib/libblkid.so.1 (0x00007f3bbc3bd000)
libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x00007f3bbc39a000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x00007f3bbc380000)
libudev.so.1 => /usr/lib/libudev.so.1 (0x00007f3bbc355000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00007f3bbc268000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00007f3bbc232000)
libcom_err.so.2 => /usr/lib/libcom_err.so.2 (0x00007f3bbc22c000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00007f3bbc21d000)
libkeyutils.so.1 => /usr/lib/libkeyutils.so.1 (0x00007f3bbc216000)
libunistring.so.2 => /usr/lib/libunistring.so.2 (0x00007f3bbc094000)
libidn2.so.0 => /usr/lib/libidn2.so.0 (0x00007f3bbc073000)
libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00007f3bbbfca000)
liblz4.so.1 => /usr/lib/liblz4.so.1 (0x00007f3bbbfa8000)
The names of some libraries are slightly different (e.g. libasound).
Edit: running 'objdump -p /path/to/app | grep NEEDED' gives a more concise list
NEEDED libwebkit2gtk-4.0.so.37
NEEDED libgtk-3.so.0
NEEDED libgdk-3.so.0
NEEDED libjavascriptcoregtk-4.0.so.18
NEEDED libgobject-2.0.so.0
NEEDED libglib-2.0.so.0
NEEDED libasound.so.2
NEEDED libdl.so.2
NEEDED librt.so.1
NEEDED libpthread.so.0
NEEDED libgcc_s.so.1
NEEDED libc.so.6
NEEDED libm.so.6
The music and misc channel plays in 1.5 preview, but not the combat channel. It doesn't matter if I'm using a "channelSettings.xml" file or not. Edit: Moving the combat stuff to "misc" (no channel) doesn't make the combat sounds work either. The same sound pack works fine with the old SoundSense-RS.
When using a "channelSettings.xml" I get this warning:
[WARN ] Unknown Channel PlayType: all
[WARN ] Will ignore this value.
I'm guessing this is harmless, though.
(https://i.imgur.com/PGrqe3M.png)
(https://i.imgur.com/fF23Zdl.png)
Ever since version 1.4, the "Load" button has always been gray as if it's being moused-over. It looks like the Linux version is the same.
Thank you for making the music channel optional!
A new bug report: Ever since v1.3.5, SoundSense-RS hasn't worked in macOS 10.13 High Sierra. (It crashes when it tries to play a sound.)
(https://i.imgur.com/Cmq6JIJ.png)
Maybe changing some settings in GitHub workflow can make it work on High Sierra?
Here's the error report:
SoundSense-RS never starts. If I start it manually, it doesn't do anything except crash if I try to load a soundpack. The only thing I seem to be able to do "successfully" is load the gamelog.txt file if I do that manually.
Last login: Mon Mar 9 18:56:14 on ttys003
Urist:~ Kogan$ /Applications/Lazy\ Mac\ Pack\ v0.47.04\ dfhack-a1/LNP/Utilities/SoundSense-RS/SoundSense-RS ; exit;
objc[27393]: Class FIFinderSyncExtensionHost is implemented in both /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit (0x7fff8b151cd0) and /System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride (0x112b99cd8). One of the two will be used. Which one is undefined.
thread 'sound_thread' panicked at 'No device name: BackendSpecific { err: BackendSpecificError { description: "core foundation unexpectedly returned null string" } }', src/libcore/result.rs:1188:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
Abort trap: 6
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
MacOS version is 10.13.6 (which is terminal for this hardware).
Thank you!