diff --git a/src/soundgapless.c b/src/soundgapless.c index c96a2a6..6f82c3f 100644 --- a/src/soundgapless.c +++ b/src/soundgapless.c @@ -98,6 +98,9 @@ void createDevice(UserData *userData, ma_device *device, ma_context *context, ma result = ma_device_init(context, &deviceConfig, device); if (result != MA_SUCCESS) return; + + setVolume(getCurrentVolume()); + result = ma_device_start(device); if (result != MA_SUCCESS) return; @@ -134,7 +137,8 @@ void vorbis_createAudioDevice(UserData *userData, ma_device *device, ma_context return; } - // Start the device again + setVolume(getCurrentVolume()); + result = ma_device_start(device); if (result != MA_SUCCESS) { @@ -165,7 +169,8 @@ void opus_createAudioDevice(UserData *userData, ma_device *device, ma_context *c return; } - // Start the device again + setVolume(getCurrentVolume()); + result = ma_device_start(device); if (result != MA_SUCCESS) { diff --git a/src/soundgapless.h b/src/soundgapless.h index b5bd04e..ca65420 100644 --- a/src/soundgapless.h +++ b/src/soundgapless.h @@ -19,6 +19,7 @@ #include "soundopus.h" #include "soundvorbis.h" #include "soundpcm.h" +#include "volume.h" #ifndef USERDATA_STRUCT #define USERDATA_STRUCT diff --git a/src/visuals.c b/src/visuals.c index edd40a4..42246f0 100644 --- a/src/visuals.c +++ b/src/visuals.c @@ -12,8 +12,8 @@ int bufferSize = 4800; int prevBufferSize = 0; float magnitudeCeil = 120; -float alpha = 0.2; -float lastMax = 60; +float alpha = 0.1; +float lastMax = 120; bool unicodeSupport = false; fftwf_complex *fftInput = NULL; fftwf_complex *fftOutput = NULL; diff --git a/src/volume.c b/src/volume.c index 17dcd9a..41205ff 100644 --- a/src/volume.c +++ b/src/volume.c @@ -4,9 +4,17 @@ volume.c Functions related to volume control. - + */ + +int soundVolume = 100; + int getCurrentVolume() +{ + return soundVolume; +} + +int getSystemVolume() { FILE *fp; char command_str[1000]; @@ -33,10 +41,6 @@ int getCurrentVolume() void setVolume(int volume) { - char command_str[1000]; - FILE *fp; - - // Limit new volume to a maximum of 100% if (volume > 100) { volume = 100; @@ -46,42 +50,25 @@ void setVolume(int volume) volume = 0; } - snprintf(command_str, 1000, "pactl set-sink-volume @DEFAULT_SINK@ %d%%", volume); + soundVolume = volume; - fp = popen(command_str, "r"); - if (fp == NULL) - { - return; - } - pclose(fp); + ma_device_set_master_volume(getDevice(), (float)volume / 100); } int adjustVolumePercent(int volumeChange) { - char command_str[1000]; - FILE *fp; - int currentVolume = getCurrentVolume(); + int sysVol = getSystemVolume(); - int newVolume = currentVolume + volumeChange; + if (sysVol == 0) + return 0; - // Limit new volume to a maximum of 100% - if (newVolume > 100) - { - newVolume = 100; - } - else if (newVolume < 0) - { - newVolume = 0; - } + int step = 100 / sysVol * 5; - snprintf(command_str, 1000, "pactl set-sink-volume @DEFAULT_SINK@ %d%%", newVolume); + int relativeVolChange = volumeChange / 5 * step; - fp = popen(command_str, "r"); - if (fp == NULL) - { - return -1; - } - pclose(fp); + soundVolume += relativeVolChange; + + setVolume(soundVolume); return 0; } \ No newline at end of file diff --git a/src/volume.h b/src/volume.h index deabfdf..0714ee8 100644 --- a/src/volume.h +++ b/src/volume.h @@ -1,5 +1,6 @@ #include +#include "soundcommon.h" int getCurrentVolume(void);