# TTYverse Sound Pack Extension # Adapted from the original TTYtter soundpack by Storm Dragon: https://stormux.org/ # Support Storm Dragon's work: https://patreon.com/stormux # Published under the Floodgap Free Software License: http://www.floodgap.com/software/ffsl/ # Plays sounds for different fediverse activities: # Core: default, mention, dm, me # Fediverse: follow, boost, favourite, poll, announcement # # Configure in RC file with: # extpref_sound_command=paplay # Sound command (paplay, play, ogg123, etc.) # extpref_soundpack=default # Sound pack name # notifytype=soundpack # Enable sound notifications # notifies=default,mention,dm,me,follow,boost,favourite sub notifier_soundpack { my $class = shift; my $text = shift; my $ref = shift; # Debug output print $stdout "-- DEBUG: soundpack notifier called with class='$class'\n" if (defined($class) && $verbose); # Determine sound command (default to paplay for modern Linux) my $sound_command; if (!$extpref_sound_command) { $sound_command = "paplay"; # Modern default for PulseAudio } else { $sound_command = $extpref_sound_command; } # Determine sound pack name my $sound_pack; if (!$extpref_soundpack) { $sound_pack = "default"; } else { $sound_pack = $extpref_soundpack; } # Skip if silent mode enabled return 1 if ($silent); if (!defined($class)) { # Initialize - show loaded message print $stdout "-- TTYverse sound pack loaded: $sound_pack\n"; print $stdout "-- Supported sounds: default, mention, dm, me, follow, boost, favourite, poll, announcement\n" if (!$silent); return 1; } # Build sound file path using XDG data directory my $data_dir = "$ENV{'HOME'}/.local/share/ttyverse"; my $sound_file = "$data_dir/sounds/$sound_pack/" . lc($class) . ".ogg"; if (!-f $sound_file) { # Only warn once per session per class my $warn_key = "warned_missing_sound_$class"; if (!$store->{$warn_key}) { print $stdout "-- Warning: Sound file '$class.ogg' not found in pack '$sound_pack'\n"; print $stdout "-- Place sound files in $data_dir/sounds/$sound_pack/\n"; $store->{$warn_key} = 1; } return 1; } # Play the sound in background (suppress output) print $stdout "-- DEBUG: Playing sound: $sound_command \"$sound_file\"\n" if ($verbose); system("$sound_command \"$sound_file\" >/dev/null 2>&1 &"); return 1; } # Mark extension as successfully loaded $store->{'loaded'} = 1; # Extension loaded successfully 1;