]> granicus.if.org Git - nethack/commitdiff
further utilize sound interface - part 2
authornhmall <nhmall@nethack.org>
Sun, 22 Jan 2023 18:29:44 +0000 (13:29 -0500)
committernhmall <nhmall@nethack.org>
Sun, 22 Jan 2023 18:29:44 +0000 (13:29 -0500)
Expand windsound to support SNDCAP_USERSOUNDS (existing),
SNDCAP_SOUNDEFFECTS, SNDCAP_HEROMUSIC.

Place a small number of wav files into sound/wav that are considered
more specific to some game stuff in the core, namely: playing
instruments by the hero, squeaky board traps. The intention is that
those ones can be integrated into the game without requiring user
file deposits or mappings. Building soundlib support for sound/windsound
searches for them as resources, so they should "just work."

No actual instrument playback is available in the base sound/windsound
soundlib implementation (yet, at least), so it works around that in
a cheap way by using the note-variant wav sounds to concoct the
notes. There are better ways of doing music generation than that,
of course, but this will do in the early going. Any other soundlib
port (such as Qt) can probably easily do the exact same thing. If it
can play USER_SOUNDS, it can almost certainly use the
sound/wav/se_squeak*.wav and sound/wav/sound_*.wav files for
SND_HEROMUSIC and squeaky board sounds soundeffects.

A few of the se_ sounds in sound/wav are free yet licensed, and
there is a file called attributions.txt to meticulously attempt
to comply with the two license variations involved.

SND_SOUNDEFFECTS_AUTOMAP

If SND_SOUNDEFFECTS_AUTOMAP is defined, and a SND_LIB_ interface
that supports SNDPROC_SOUNDEFFECTS is also defined to integrate
soundlib support, the following gets added:

  o If sounddir is defined (existing longstanding feature that's
    been used with USER_SOUNDS for many, many years) any wav file
    present in SOUNDDIR with a name that matches one of the defined
    sound effects in include/sndproc.h will get played each time
    that soundeffect comes up. So, just drop appropriate wav files
    into sounddir and rename it to match.

    No tedious config file entries are required to get soundeffects.

    [ The only config file change required is to
      set SOUNDDIR to point to your directory with the wav files.
      Note: SOUNDDIR only works in your config file if NetHack
      was built with USER_SOUNDS defined. ]

    This is new so there may certainly be some bugs in here.
    Please kindly report them if you encounter any.

    For those that don't read C very well, these are the file names
    that should trigger the SOUNDEFFECTS_AUTOMAP, assuming it is working.

        se_faint_splashing.wav
        se_crackling_of_hellfire.wav
        se_heart_beat.wav
        se_typing_noise.wav
        se_hollow_sound.wav
        se_rustling_paper.wav
        se_crushing_sound.wav
        se_splash.wav
        se_chains_rattling_gears_turning.wav
        se_smashing_and_crushing.wav
        se_gears_turning_chains_rattling.wav
        se_loud_splash.wav
        se_lound_crash.wav
        se_crashing_rock.wav
        se_sizzling.wav
        se_crashing_boulder.wav
        se_boulder_drop.wav
        se_item_tumble_downwards.wav
        se_drain_noises.wav
        se_ring_in_drain.wav
        se_groans_and_moans.wav
        se_scratching.wav
        se_glass_shattering.wav
        se_egg_cracking.wav
        se_gushing_sound.wav
        se_glass_crashing.wav
        se_egg_splatting.wav
        se_sinister_laughter.wav
        se_blast.wav
        se_stone_breaking.wav
        se_stone_crumbling.wav
        se_snakes_hissing.wav
        se_loud_pop.wav
        se_clanking_pipe.wav
        se_sewer_song.wav
        se_monster_behind_boulder.wav
        se_wailing_of_the_banshee.wav
        se_swoosh.wav
        se_explosion.wav
        se_crashing_sound.wav
        se_someone_summoning.wav
        se_rushing_wind_noise.wav
        se_splat_from_engulf.wav
        se_faint_sloshing.wav
        se_crunching_sound.wav
        se_slurping_sound.wav
        se_masticating_sound.wav
        se_distant_thunder.wav
        se_applause.wav
        se_shrill_whistle.wav
        se_someone_yells.wav
        se_door_unlock_and_open.wav
        se_door_open.wav
        se_door_crash_open.wav
        se_dry_throat_rattle.wav
        se_cough.wav
        se_angry_snakes.wav
        se_zap_then_explosion.wav
        se_zap.wav
        se_horn_being_played.wav
        se_mon_chugging_potion.wav
        se_bugle_playing_reveille.wav
        se_crash_through_floor.wav
        se_thump.wav
        se_scream.wav
        se_tumbler_click.wav
        se_gear_turn.wav
        se_divine_music.wav
        se_thunderclap.wav
        se_sad_wailing.wav
        se_maniacal_laughter.wav
        se_rumbling_of_earth.wav
        se_clanging_sound.wav
        se_mutter_imprecations.wav
        se_mutter_incantation.wav
        se_angry_voice.wav
        se_sceptor_pounding.wav
        se_courtly_conversation.wav
        se_low_buzzing.wav
        se_angry_drone.wav
        se_bees.wav
        se_someone_searching.wav
        se_guards_footsteps.wav
        se_faint_chime.wav
        se_loud_click.wav
        se_soft_click.wav
        se_squeak.wav
        se_squeak_C.wav
        se_squeak_D_flat.wav
        se_squeak_D.wav
        se_squeak_E_flat.wav
        se_squeak_E.wav
        se_squeak_F.wav
        se_squeak_F_sharp.wav
        se_squeak_G.wav
        se_squeak_G_sharp.wav
        se_squeak_A.wav
        se_squeak_B_flat.wav
        se_squeak_B.wav
        se_someone_bowling.wav
        se_rumbling.wav
        se_loud_crash.wav
        se_deafening_roar_atmospheric.wav
        se_low_hum.wav
        se_laughter.wav
        se_cockatrice_hiss.wav
        se_chant.wav
        se_cracking_sound.wav
        se_ripping_sound.wav
        se_thud.wav
        se_clank.wav
        se_crumbling_sound.wav
        se_soft_crackling.wav
        se_crackling.wav
        se_sharp_crack.wav
        se_wall_of_force.wav
        se_alarm.wav
        se_kick_door_it_shatters.wav
        se_kick_door_it_crashes_open.wav
        se_bubble_rising.wav
        se_bolt_of_lightning.wav
        se_board_squeak.wav
        se_board_squeaks_loudly.wav
        se_boing.wav
        se_crashed_ceiling.wav
        se_clash.wav
        se_crash_door.wav
        se_crash.wav
        se_crash_throne_destroyed.wav
        se_crash_something_broke.wav
        se_kadoom_boulder_falls_in.wav
        se_klunk_pipe.wav
        se_kerplunk_boulder_gone.wav
        se_klunk.wav
        se_klick.wav
        se_kaboom_door_explodes.wav
        se_kaboom_boom_boom.wav
        se_kaablamm_of_mine.wav
        se_kaboom.wav
        se_splat_egg.wav
        se_destroy_web.wav
        se_iron_ball_dragging_you.wav
        se_iron_ball_hits_you.wav
        se_lid_slams_open_falls_shut.wav
        se_chain_shatters.wav
        se_furious_bubbling.wav
        se_air_crackles.wav
        se_potion_crash_and_break.wav
        se_hiss.wav
        se_growl.wav
        se_canine_bark.wav
        se_canine_growl.wav
        se_canine_whine.wav
        se_canine_yip.wav
        se_canine_howl.wav
        se_feline_yowl.wav
        se_feline_meow.wav
        se_feline_purr.wav
        se_feline_yip.wav
        se_feline_mew.wav
        se_roar.wav
        se_snarl.wav
        se_buzz.wav
        se_squeek.wav
        se_squawk.wav
        se_squeal.wav
        se_screech.wav
        se_equine_neigh.wav
        se_equine_whinny.wav
        se_equine_whicker.wav
        se_bovine_moo.wav
        se_bovine_bellow.wav
        se_wail.wav
        se_groan.wav
        se_grunt.wav
        se_gurgle.wav
        se_elephant_trumpet.wav
        se_snake_rattle.wav
        se_hallu_growl.wav

This needs further testing. At the moment only windsound has
this.

If nobody else looks into it for Qt, I'll take a look in a
few days.

62 files changed:
include/extern.h
include/sndprocs.h
include/windconf.h
sound/wav/README [new file with mode: 0644]
sound/wav/attributions.txt [new file with mode: 0644]
sound/wav/se_squeak_A.wav [new file with mode: 0644]
sound/wav/se_squeak_B.wav [new file with mode: 0644]
sound/wav/se_squeak_B_flat.wav [new file with mode: 0644]
sound/wav/se_squeak_C.wav [new file with mode: 0644]
sound/wav/se_squeak_D.wav [new file with mode: 0644]
sound/wav/se_squeak_D_flat.wav [new file with mode: 0644]
sound/wav/se_squeak_E.wav [new file with mode: 0644]
sound/wav/se_squeak_E_flat.wav [new file with mode: 0644]
sound/wav/se_squeak_F.wav [new file with mode: 0644]
sound/wav/se_squeak_F_sharp.wav [new file with mode: 0644]
sound/wav/se_squeak_G.wav [new file with mode: 0644]
sound/wav/se_squeak_G_sharp.wav [new file with mode: 0644]
sound/wav/sound_Bell.wav [new file with mode: 0644]
sound/wav/sound_Bugle_A.wav [new file with mode: 0644]
sound/wav/sound_Bugle_B.wav [new file with mode: 0644]
sound/wav/sound_Bugle_C.wav [new file with mode: 0644]
sound/wav/sound_Bugle_D.wav [new file with mode: 0644]
sound/wav/sound_Bugle_E.wav [new file with mode: 0644]
sound/wav/sound_Bugle_F.wav [new file with mode: 0644]
sound/wav/sound_Bugle_G.wav [new file with mode: 0644]
sound/wav/sound_Drum_Of_Earthquake.wav [new file with mode: 0644]
sound/wav/sound_Fire_Horn.wav [new file with mode: 0644]
sound/wav/sound_Frost_Horn.wav [new file with mode: 0644]
sound/wav/sound_Leather_Drum.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_A.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_B.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_C.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_D.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_E.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_F.wav [new file with mode: 0644]
sound/wav/sound_Magic_Harp_G.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_A.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_B.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_C.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_D.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_E.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_F.wav [new file with mode: 0644]
sound/wav/sound_Tooled_Horn_G.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_A.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_B.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_C.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_D.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_E.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_F.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Flute_G.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_A.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_B.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_C.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_D.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_E.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_F.wav [new file with mode: 0644]
sound/wav/sound_Wooden_Harp_G.wav [new file with mode: 0644]
sound/windsound/windsound.c
src/music.c
src/sounds.c
sys/windows/console.rc
win/win32/NetHackW.rc

index baae091517d8267f1a879c54403eea625e8aaff0..e6505b3132098651f81f7e5287c633fc92d635c0 100644 (file)
@@ -1813,6 +1813,7 @@ extern boolean munslime(struct monst *, boolean);
 
 extern void awaken_soldiers(struct monst *);
 extern int do_play_instrument(struct obj *);
+enum instruments obj_to_instr(struct obj *);
 
 /* ### nhlsel.c ### */
 
@@ -2605,6 +2606,10 @@ extern void play_usersound_via_idx(int, int);
 extern void assign_soundlib(int);
 extern void activate_chosen_soundlib(void);
 extern void get_soundlib_name(char *dest, int maxlen);
+#ifdef SND_SOUNDEFFECTS_AUTOMAP
+extern char *get_sound_effect_filename(int32_t seidint,
+                                       char *buf, size_t bufsz, int32_t);
+#endif
 
 /* ### sp_lev.c ### */
 
index ef319269bc621b30afb1d5ffcfc6bf0096cb4177..682690dabf02a5d095acc6bfe918e77e4b6e4368 100644 (file)
@@ -126,12 +126,13 @@ extern struct sound_procs soundprocs;
 
 /* subset for NetHack */
 enum instruments {
-    ins_choir_aahs = 53, ins_trumpet = 57, ins_trombone = 58,
-    ins_french_horn = 61, ins_english_horn = 70, ins_piccolo = 73,
+    ins_cello = 43, ins_orchestral_harp = 47, ins_choir_aahs = 53,
+    ins_trumpet = 57, ins_trombone = 58, ins_french_horn = 61,
+    ins_baritone_sax = 68, ins_english_horn = 70, ins_piccolo = 73,
     ins_flute = 74, ins_pan_flute = 76, ins_blown_bottle = 77,
     ins_whistle = 79, ins_tinkle_bell = 113, ins_woodblock = 116,
     ins_taiko_drum = 117, ins_melodic_tom = 118, ins_seashore = 123,
-    ins_fencepost
+    ins_no_instrument
 };
 
 #if 0
@@ -174,11 +175,12 @@ enum instruments_broad {
     ins_guitar_fret_noise = 121, ins_breath_noise = 122, ins_seashore = 123,
     ins_bird_tweet = 124, ins_telephone_ring = 125, ins_helicopter = 126,
     ins_applause = 127, ins_gunshot = 128,
-    ins_fencepost
+    ins_no_instrument
 };
 #endif
 
 enum sound_effect_entries {
+    se_zero_invalid                   = 0,
     se_faint_splashing                = 1,
     se_crackling_of_hellfire          = 2,
     se_heart_beat                     = 3,
@@ -358,6 +360,7 @@ enum sound_effect_entries {
     se_elephant_trumpet               = 177,
     se_snake_rattle                   = 178,
     se_hallu_growl                    = 179,
+    number_of_se_entries
 };
 
 #if defined(SND_LIB_QTSOUND) || defined(SND_LIB_PORTAUDIO) \
@@ -366,6 +369,15 @@ enum sound_effect_entries {
         || defined(SND_LIB_SOUND_ESCCODES) || defined(SND_LIB_VISSOUND) \
         || defined(SND_LIB_WINDSOUND)
 
+#define SND_LIB_INTEGRATED   /* shortcut for conditional code in other files */
+
+#define Play_usersound(filename, vol, idx) \
+    do {                                                                  \
+        if (!Deaf && soundprocs.sound_play_usersound                      \
+            && ((soundprocs.sndcap & SNDCAP_USERSOUNDS) != 0))            \
+            (*soundprocs.sound_play_usersound)((filename), (vol), (idx)); \
+    } while(0)
+
 #define Soundeffect(seid, vol) \
     do {                                                              \
         if (!Deaf && soundprocs.sound_soundeffect                     \
@@ -373,8 +385,19 @@ enum sound_effect_entries {
             (*soundprocs.sound_soundeffect)(emptystr, (seid), (vol)); \
     } while(0)
 
+#define Hero_playnotes(instrument, str, vol) \
+    do {                                                                    \
+        if (!Deaf && soundprocs.sound_hero_playnotes                        \
+            && ((soundprocs.sndcap & SNDCAP_HEROMUSIC) != 0))               \
+            (*soundprocs.sound_hero_playnotes)((instrument), (str), (vol)); \
+    } while(0)
 #else
+#ifdef SND_LIB_INTEGRATED
+#undef  SND_LIB_INTEGRATED
+#endif
+#define Play_usersound(filename, vol, idx)
 #define Soundeffect(seid, vol)
+#define Hero_playnotes(instrument, str, vol)
 #endif
 
 #endif /* SNDPROCS_H */
index 6eb5b268734b868e327e7fbb43a145fbc9e482fd..5addbfe7137fbf540c25facc9d0c775a1caeb875 100644 (file)
 extern void interject_assistance(int, int, genericptr_t, genericptr_t);
 extern void interject(int);
 
+#if defined(SND_LIB_WINDSOUND)
+#define SND_SOUNDEFFECTS_AUTOMAP
+#endif
+
 /*
  *===============================================
  * Compiler-specific adjustments
diff --git a/sound/wav/README b/sound/wav/README
new file mode 100644 (file)
index 0000000..00a0321
--- /dev/null
@@ -0,0 +1,63 @@
+January 22, 2023 - sounds
+
+Important: For the included se_* wav files, please refer to the file
+'sound/wav attributions.txt' for the details about the
+source, author, and licensing.
+
+There were old aiif versions of some sound samples distributed
+in uuencoded form in earlier versions of NetHack: bell.uu, bugle.uu,
+erthdrum.uu, firehorn.uu, frsthorn.uu, lethdrum.uu, mgcflute.uu,
+mgcharp.uu, toolhorn.uu, wdnflute.uu and wdnharp.uu.
+
+Those had been removed in commit 217671e00f626e53d314757b4687950466efb360
+in May 2019, at the same time built-in speaker support was removed.
+
+Some of those original files have been converted into wav files starting
+with NetHack 3.7. The pitch variation versions offer a chance for very
+simple tune playback on platforms that offer a basic play-sound function
+call, which many do. There is no need to manipulate the underlying sounds
+with those, although sound library interfaces may certainly produce
+music in more elabote and pleasing ways. Contributions are welcome.
+
+While they make the distribution larger, they offer a more immersive
+experience while playing locally on many platforms or with many
+sound libraries. Also, file/distribution size is not the same
+concern in 2023 that it might have been in 1995 or 2003.
+This is the note that accompanied those original sound files.
+
+------------------------------------------------------------
+README for the AIFF files:
+
+These files are sound files for the instruments in NetHack.
+There are 11 sounds, one for each distinct instrument.
+The sounds are in 8-bit 22kHz AIFF format, which should be
+readable by a broad range of platforms. Since the sounds
+came from Rolands S-750 sample library (most of them) there
+should be no copyright on them when we treat them like we
+do here (as instruments) - indeed, the sample library I
+got from Roland didn't even bear a (c) symbol.
+
+Some of the sounds are very adequate (Drum of Earthquake,
+Wooden Flute, Magic Harp) while some are less true to the
+original name (how does a Frost Horn sound?) Actually, I
+don't know what a Bugle is (Bugle horn?) so I took a trumpet
+sound for that. Correct me if I'm wrong.
+
+What does this have to do with the main code? Well, nothing
+so far. There are some places that are #ifdef MAC and calls
+mac_speaker; that function takes an object and a tune (in
+capital letters A-G) and plays the tune with the given
+instrument. When playing a specific tune, that tune is of
+course used. For "improvise," I use middle "C."
+
+Ideally, we should do something equal with sound that we
+have with displays, so we can use one common set of calls
+in the main code, and have ports do whatever seems appropriate
+for the available hardware.
+
+Any comment on the sounds or their use is welcome:
+
+                                               Jon W{tte
+                                               Mac Team
+                                               nethack-bugs@nethack.org
diff --git a/sound/wav/attributions.txt b/sound/wav/attributions.txt
new file mode 100644 (file)
index 0000000..16b8d00
--- /dev/null
@@ -0,0 +1,152 @@
+/* NetHack 3.7 attributions.txt        $NHDT-Date: 1652831519 2022/05/17 23:51:59 $
+
+Attributions and credits and modifications for sounds used are listed below.
+
+File: se_squeak_C.wav     
+Source:   https://freesound.org/people/seth-m/sounds/269722/
+Original: download/269722__seth-m__wood-creaks.wav
+By:       https://freesound.org/people/seth-m/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m02.194s to 00h00m02.765s as selection.
+- Saved selection to file named se_squeak_C.wav
+- .571 seconds
+
+
+File: se_squeak_D_flat.wav
+Source:   https://freesound.org/people/AlienXXX/sounds/151346/
+Original: download/151346__alienxxx__creaking-floor-upstairs.wav
+By:       https://freesound.org/people/AlienXXX/
+License:  https://creativecommons.org/licenses/by/4.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m37.641s to 00h00m39.320s as selection.
+- Used Audacity, Effect to change selection pitch to C#/Dflat 3.
+- Saved selection to file named se_squeak_D_flat.wav
+- 1.679 seconds
+
+
+File: se_squeak_D.wav
+Source:   https://freesound.org/people/Talitha5/sounds/321883/
+Original: download/321883__talitha5__floorboard-creaking.mp3
+By:       https://freesound.org/people/Talitha5/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m24.447s to 00h00m225.790s as selection.
+- Saved selection to file named se_squeak_D.wav
+- 2.067 seconds
+
+
+File:se_squeak_E_flat.wav
+Source:   https://freesound.org/people/tosha73/sounds/570864/
+Original: download/570864__tosha73__creaking-boards.wav
+By:       https://freesound.org/people/tosha73/
+License:  https://creativecommons.org/licenses/by/4.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m30.192s to 00h00m30.819s as selection.
+- Saved selection to file named se_squeak_E_flat.wav
+- .627 seconds
+
+
+File: se_squeak_E.wav
+Source:   https://freesound.org/people/Benboncan/sounds/101381/
+Original: download/101381__benboncan__creaking-floorboard.wav
+By:       https://freesound.org/people/Benboncan/
+License:  https://creativecommons.org/licenses/by/4.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m12.892s to 00h00m14.709s as selection.
+- Saved selection to file named se_squeak_E.wav
+- 1.817 seconds
+
+
+File: se_squeak_F.wav
+Source:   https://freesound.org/people/Talitha5/sounds/321883/
+Original: download/321883__talitha5__floorboard-creaking.mp3
+By:       https://freesound.org/people/Talitha5/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m56.926s to 00h00m58.402s as selection.
+- Saved selection to file named se_squeak_F.wav
+- 1.476 seconds.
+
+
+File: se_squeak_F_sharp.wav
+Source:   https://freesound.org/people/seth-m/sounds/269722/
+Original: download/269722__seth-m__wood-creaks.wav
+By:       https://freesound.org/people/seth-m/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m04.361s to 00h00m04.795s as selection.
+- Saved selection to file named se_squeak_F_sharp.wav
+- .434 seconds
+
+
+File: se_squeak_G.wav
+Source:   https://freesound.org/people/Garuda1982/sounds/420856/
+Original: download/420856__garuda1982__floorboards-squeak-field-recording-with-zoom-h2n.wav
+By:       https://freesound.org/people/Garuda1982/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m14.369s to 00h00m15.629s as selection.
+- Saved selection to file named se_squeak_G.wav
+- 1.26 seconds
+
+
+File: se_squeak_G_sharp.wav
+Source:   https://freesound.org/people/seth-m/sounds/269722/
+Original: download/269722__seth-m__wood-creaks.wav
+By:       https://freesound.org/people/seth-m/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m03.331s to 00h00m03.966s as selection.
+- Used Audacity, Effect to change selection pitch to G#/A flat 7
+- Saved selection to file named se_squeak_G_sharp.wav
+- .635 seconds
+
+
+File: se_squeak_A.wav
+Source:   https://freesound.org/people/Greg_Surr/sounds/590161/
+Original: download/590161__greg-surr__creaking-in-room-11.wav
+By:       https://freesound.org/people/Greg_Surr/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m00.209s to 00h00m01.385s as selection.
+- Saved selection to file named se_squeak_A.wav
+- 1.176s
+
+
+File: se_squeak_B_flat.wav
+Source:   https://freesound.org/people/shelbyshark/sounds/487105/
+Original: download/487105__shelbyshark__floorcreak.wav
+By:       https://freesound.org/people/shelbyshark/
+License:  http://creativecommons.org/publicdomain/zero/1.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m02.350s to 00h00m04.576s as selection.
+- Used Audacity, Effect to change selection pitch to A#/Bflat.
+- Saved selection to file named se_squeak_B_flat.wav
+- 2.226 seconds
+
+
+File:se_squeak_B.wav
+Source:   https://freesound.org/people/tosha73/sounds/570864/
+Original: download/570864__tosha73__creaking-boards.wav
+By:       https://freesound.org/people/tosha73/
+License:  https://creativecommons.org/licenses/by/4.0/
+Download Date: January 21, 2023
+Description of modifications made to the original:
+- 00h00m00.000s to 00h00m00.572s as selection.
+- Saved selection to file named se_squeak_B.wav
+- .572 seconds
+
+
+
diff --git a/sound/wav/se_squeak_A.wav b/sound/wav/se_squeak_A.wav
new file mode 100644 (file)
index 0000000..2befa50
Binary files /dev/null and b/sound/wav/se_squeak_A.wav differ
diff --git a/sound/wav/se_squeak_B.wav b/sound/wav/se_squeak_B.wav
new file mode 100644 (file)
index 0000000..9862424
Binary files /dev/null and b/sound/wav/se_squeak_B.wav differ
diff --git a/sound/wav/se_squeak_B_flat.wav b/sound/wav/se_squeak_B_flat.wav
new file mode 100644 (file)
index 0000000..5fd3c87
Binary files /dev/null and b/sound/wav/se_squeak_B_flat.wav differ
diff --git a/sound/wav/se_squeak_C.wav b/sound/wav/se_squeak_C.wav
new file mode 100644 (file)
index 0000000..71a66b2
Binary files /dev/null and b/sound/wav/se_squeak_C.wav differ
diff --git a/sound/wav/se_squeak_D.wav b/sound/wav/se_squeak_D.wav
new file mode 100644 (file)
index 0000000..7f2f090
Binary files /dev/null and b/sound/wav/se_squeak_D.wav differ
diff --git a/sound/wav/se_squeak_D_flat.wav b/sound/wav/se_squeak_D_flat.wav
new file mode 100644 (file)
index 0000000..2b58531
Binary files /dev/null and b/sound/wav/se_squeak_D_flat.wav differ
diff --git a/sound/wav/se_squeak_E.wav b/sound/wav/se_squeak_E.wav
new file mode 100644 (file)
index 0000000..58898d1
Binary files /dev/null and b/sound/wav/se_squeak_E.wav differ
diff --git a/sound/wav/se_squeak_E_flat.wav b/sound/wav/se_squeak_E_flat.wav
new file mode 100644 (file)
index 0000000..449bf66
Binary files /dev/null and b/sound/wav/se_squeak_E_flat.wav differ
diff --git a/sound/wav/se_squeak_F.wav b/sound/wav/se_squeak_F.wav
new file mode 100644 (file)
index 0000000..2ff92fe
Binary files /dev/null and b/sound/wav/se_squeak_F.wav differ
diff --git a/sound/wav/se_squeak_F_sharp.wav b/sound/wav/se_squeak_F_sharp.wav
new file mode 100644 (file)
index 0000000..50dcf7f
Binary files /dev/null and b/sound/wav/se_squeak_F_sharp.wav differ
diff --git a/sound/wav/se_squeak_G.wav b/sound/wav/se_squeak_G.wav
new file mode 100644 (file)
index 0000000..cd82287
Binary files /dev/null and b/sound/wav/se_squeak_G.wav differ
diff --git a/sound/wav/se_squeak_G_sharp.wav b/sound/wav/se_squeak_G_sharp.wav
new file mode 100644 (file)
index 0000000..18c9fc2
Binary files /dev/null and b/sound/wav/se_squeak_G_sharp.wav differ
diff --git a/sound/wav/sound_Bell.wav b/sound/wav/sound_Bell.wav
new file mode 100644 (file)
index 0000000..2a499c5
Binary files /dev/null and b/sound/wav/sound_Bell.wav differ
diff --git a/sound/wav/sound_Bugle_A.wav b/sound/wav/sound_Bugle_A.wav
new file mode 100644 (file)
index 0000000..bf8467f
Binary files /dev/null and b/sound/wav/sound_Bugle_A.wav differ
diff --git a/sound/wav/sound_Bugle_B.wav b/sound/wav/sound_Bugle_B.wav
new file mode 100644 (file)
index 0000000..dc483f1
Binary files /dev/null and b/sound/wav/sound_Bugle_B.wav differ
diff --git a/sound/wav/sound_Bugle_C.wav b/sound/wav/sound_Bugle_C.wav
new file mode 100644 (file)
index 0000000..9dfecdf
Binary files /dev/null and b/sound/wav/sound_Bugle_C.wav differ
diff --git a/sound/wav/sound_Bugle_D.wav b/sound/wav/sound_Bugle_D.wav
new file mode 100644 (file)
index 0000000..128000b
Binary files /dev/null and b/sound/wav/sound_Bugle_D.wav differ
diff --git a/sound/wav/sound_Bugle_E.wav b/sound/wav/sound_Bugle_E.wav
new file mode 100644 (file)
index 0000000..cd20781
Binary files /dev/null and b/sound/wav/sound_Bugle_E.wav differ
diff --git a/sound/wav/sound_Bugle_F.wav b/sound/wav/sound_Bugle_F.wav
new file mode 100644 (file)
index 0000000..e39a136
Binary files /dev/null and b/sound/wav/sound_Bugle_F.wav differ
diff --git a/sound/wav/sound_Bugle_G.wav b/sound/wav/sound_Bugle_G.wav
new file mode 100644 (file)
index 0000000..e5044eb
Binary files /dev/null and b/sound/wav/sound_Bugle_G.wav differ
diff --git a/sound/wav/sound_Drum_Of_Earthquake.wav b/sound/wav/sound_Drum_Of_Earthquake.wav
new file mode 100644 (file)
index 0000000..12e0fac
Binary files /dev/null and b/sound/wav/sound_Drum_Of_Earthquake.wav differ
diff --git a/sound/wav/sound_Fire_Horn.wav b/sound/wav/sound_Fire_Horn.wav
new file mode 100644 (file)
index 0000000..7585506
Binary files /dev/null and b/sound/wav/sound_Fire_Horn.wav differ
diff --git a/sound/wav/sound_Frost_Horn.wav b/sound/wav/sound_Frost_Horn.wav
new file mode 100644 (file)
index 0000000..fc3bdbf
Binary files /dev/null and b/sound/wav/sound_Frost_Horn.wav differ
diff --git a/sound/wav/sound_Leather_Drum.wav b/sound/wav/sound_Leather_Drum.wav
new file mode 100644 (file)
index 0000000..2b11f4a
Binary files /dev/null and b/sound/wav/sound_Leather_Drum.wav differ
diff --git a/sound/wav/sound_Magic_Harp_A.wav b/sound/wav/sound_Magic_Harp_A.wav
new file mode 100644 (file)
index 0000000..2246e81
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_A.wav differ
diff --git a/sound/wav/sound_Magic_Harp_B.wav b/sound/wav/sound_Magic_Harp_B.wav
new file mode 100644 (file)
index 0000000..a967992
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_B.wav differ
diff --git a/sound/wav/sound_Magic_Harp_C.wav b/sound/wav/sound_Magic_Harp_C.wav
new file mode 100644 (file)
index 0000000..d2d1798
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_C.wav differ
diff --git a/sound/wav/sound_Magic_Harp_D.wav b/sound/wav/sound_Magic_Harp_D.wav
new file mode 100644 (file)
index 0000000..38981a4
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_D.wav differ
diff --git a/sound/wav/sound_Magic_Harp_E.wav b/sound/wav/sound_Magic_Harp_E.wav
new file mode 100644 (file)
index 0000000..77902db
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_E.wav differ
diff --git a/sound/wav/sound_Magic_Harp_F.wav b/sound/wav/sound_Magic_Harp_F.wav
new file mode 100644 (file)
index 0000000..98b4c47
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_F.wav differ
diff --git a/sound/wav/sound_Magic_Harp_G.wav b/sound/wav/sound_Magic_Harp_G.wav
new file mode 100644 (file)
index 0000000..6e3f5c6
Binary files /dev/null and b/sound/wav/sound_Magic_Harp_G.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_A.wav b/sound/wav/sound_Tooled_Horn_A.wav
new file mode 100644 (file)
index 0000000..da38e8e
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_A.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_B.wav b/sound/wav/sound_Tooled_Horn_B.wav
new file mode 100644 (file)
index 0000000..4e7c9e1
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_B.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_C.wav b/sound/wav/sound_Tooled_Horn_C.wav
new file mode 100644 (file)
index 0000000..e3f59e2
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_C.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_D.wav b/sound/wav/sound_Tooled_Horn_D.wav
new file mode 100644 (file)
index 0000000..b6776c7
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_D.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_E.wav b/sound/wav/sound_Tooled_Horn_E.wav
new file mode 100644 (file)
index 0000000..f2571d4
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_E.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_F.wav b/sound/wav/sound_Tooled_Horn_F.wav
new file mode 100644 (file)
index 0000000..b59b501
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_F.wav differ
diff --git a/sound/wav/sound_Tooled_Horn_G.wav b/sound/wav/sound_Tooled_Horn_G.wav
new file mode 100644 (file)
index 0000000..847d27f
Binary files /dev/null and b/sound/wav/sound_Tooled_Horn_G.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_A.wav b/sound/wav/sound_Wooden_Flute_A.wav
new file mode 100644 (file)
index 0000000..95e671c
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_A.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_B.wav b/sound/wav/sound_Wooden_Flute_B.wav
new file mode 100644 (file)
index 0000000..4a692a9
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_B.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_C.wav b/sound/wav/sound_Wooden_Flute_C.wav
new file mode 100644 (file)
index 0000000..fec7c54
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_C.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_D.wav b/sound/wav/sound_Wooden_Flute_D.wav
new file mode 100644 (file)
index 0000000..c00d340
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_D.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_E.wav b/sound/wav/sound_Wooden_Flute_E.wav
new file mode 100644 (file)
index 0000000..53173b8
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_E.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_F.wav b/sound/wav/sound_Wooden_Flute_F.wav
new file mode 100644 (file)
index 0000000..8768cba
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_F.wav differ
diff --git a/sound/wav/sound_Wooden_Flute_G.wav b/sound/wav/sound_Wooden_Flute_G.wav
new file mode 100644 (file)
index 0000000..e96ef6d
Binary files /dev/null and b/sound/wav/sound_Wooden_Flute_G.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_A.wav b/sound/wav/sound_Wooden_Harp_A.wav
new file mode 100644 (file)
index 0000000..c167d63
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_A.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_B.wav b/sound/wav/sound_Wooden_Harp_B.wav
new file mode 100644 (file)
index 0000000..2f2a511
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_B.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_C.wav b/sound/wav/sound_Wooden_Harp_C.wav
new file mode 100644 (file)
index 0000000..939ab9e
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_C.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_D.wav b/sound/wav/sound_Wooden_Harp_D.wav
new file mode 100644 (file)
index 0000000..a98c0b8
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_D.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_E.wav b/sound/wav/sound_Wooden_Harp_E.wav
new file mode 100644 (file)
index 0000000..4be28b4
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_E.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_F.wav b/sound/wav/sound_Wooden_Harp_F.wav
new file mode 100644 (file)
index 0000000..ee668aa
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_F.wav differ
diff --git a/sound/wav/sound_Wooden_Harp_G.wav b/sound/wav/sound_Wooden_Harp_G.wav
new file mode 100644 (file)
index 0000000..ed2e47d
Binary files /dev/null and b/sound/wav/sound_Wooden_Harp_G.wav differ
index f91508877c7b7c93753933881fb9af4fe8ff5d6a..9771b0a8306bb858c16a24e833f294f042338fd0 100644 (file)
@@ -25,7 +25,7 @@ static void windsound_play_usersound(char *, int32_t, int32_t);
 
 struct sound_procs windsound_procs = {
     SOUNDID(windsound),
-    SNDCAP_USERSOUNDS,
+    SNDCAP_USERSOUNDS | SNDCAP_SOUNDEFFECTS | SNDCAP_HEROMUSIC,
     windsound_init_nhsound,
     windsound_exit_nhsound,
     windsound_achievement,
@@ -53,11 +53,103 @@ windsound_achievement(schar ach1, schar ach2, int32_t repeat)
 void
 windsound_soundeffect(char *desc, int32_t seid, int32_t volume)
 {
+#ifdef SND_SOUNDEFFECTS_AUTOMAP
+    int reslt = 0;
+    char buf[PATHLEN];
+    const char *filename;
+    DWORD fdwsound;
+
+    if (seid >= se_squeak_C || seid <= se_squeak_B) {
+        filename = get_sound_effect_filename(seid, buf, sizeof buf, 1);
+        fdwsound = SND_ASYNC | SND_RESOURCE;
+    } else {
+        filename = get_sound_effect_filename(seid, buf, sizeof buf, 0);
+        fdwsound = SND_ASYNC | SND_NODEFAULT;
+    }
+
+    if (filename) {
+        reslt = PlaySound(filename, NULL, fdwsound);
+//        (void) sndPlaySound(filename, fdwsound);
+    }
+#endif
 }
 
+#define WAVEMUSIC_SOUNDS
+
 void
 windsound_hero_playnotes(int32_t instrument, char *str, int32_t volume)
 {
+#ifdef WAVEMUSIC_SOUNDS
+    int reslt = 0;
+    boolean has_note_variations = FALSE;
+    char resourcename[120], *end_of_res = 0, *c = 0;
+
+    if (!str)
+        return;
+    resourcename[0] = '\0';
+    switch(instrument) {
+        case ins_flute:             /* WOODEN_FLUTE */
+            Strcpy(resourcename, "sound_Wooden_Flute");
+            has_note_variations = TRUE;
+            break;
+        case ins_pan_flute:         /* MAGIC_FLUTE */
+             /* wav files for sound_Magic_Flute not added yet */
+            Strcpy(resourcename, "sound_Wooden_Flute");
+            has_note_variations = TRUE;
+            break;
+        case ins_english_horn:      /* TOOLED_HORN */
+            Strcpy(resourcename, "sound_Tooled_Horn");
+            has_note_variations = TRUE;
+            break;
+        case ins_french_horn:       /* FROST_HORN */
+            Strcpy(resourcename, "sound_Frost_Horn");  
+            break;
+        case ins_baritone_sax:      /* FIRE_HORN */
+            Strcpy(resourcename, "sound_Fire_Horn");  
+            break;
+        case ins_trumpet:           /* BUGLE */
+            Strcpy(resourcename, "sound_Bugle");  
+            has_note_variations = TRUE;
+            break;
+        case ins_orchestral_harp:   /* WOODEN_HARP */
+            Strcpy(resourcename, "sound_Wooden_Harp");  
+            has_note_variations = TRUE;
+            break;
+        case ins_cello:             /* MAGIC_HARP */
+            Strcpy(resourcename, "sound_Magic_Harp");
+            has_note_variations = TRUE;
+        case ins_tinkle_bell:
+            Strcpy(resourcename, "sound_Bell");
+            break;
+        case ins_taiko_drum:        /* DRUM_OF_EARTHQUAKE */
+            Strcpy(resourcename, "sound_Drum_Of_Earthquake");
+            break;
+        case ins_melodic_tom:       /* LEATHER_DRUM */
+            Strcpy(resourcename, "sound_Leather_Drum");
+            break;
+    }
+    if (has_note_variations) {
+        int i, idx = 0, notecount = strlen(str);
+        static const char *const note_suffixes[]
+                                = { "_A", "_B", "_C", "_D", "_E", "_F", "_G" };
+
+        end_of_res = eos(resourcename);
+        c = str;
+        for (i = 0; i < notecount; ++i) {
+            if (*c >= 'A' && *c <= 'G') {
+                idx = (*c) - 'A';
+                Strcpy(end_of_res, note_suffixes[idx]);
+                if (i == (notecount - 1))
+                    break;  /* drop out of for-loop and play it async below */
+                reslt = PlaySound(resourcename, NULL,
+                                  SND_SYNC | SND_RESOURCE);
+            }
+            c++;
+        }
+    }
+    /* the final, or only, one is played ASYNC */
+    reslt = PlaySound(resourcename, NULL, SND_ASYNC | SND_RESOURCE);
+#endif
 }
 
 void
@@ -68,4 +160,3 @@ windsound_play_usersound(char *filename, int32_t volume UNUSED, int32_t idx UNUS
 }
 
 #endif /* SND_LIB_WINDSOUND */
-
index dad4d96fdcd8bb58bbd0135ab1bf2bfc9cd283d7..d8a48549ce8f9c61a8b69c48e2ce0b6a77eeb6f0 100644 (file)
@@ -506,7 +506,7 @@ do_improvisation(struct obj* instr)
             itmp.otyp -= 1;
             mundane = TRUE;
         }
-
+    Hero_playnotes(obj_to_instr(&itmp), "C", 50);
 
 #define PLAY_NORMAL   0x00
 #define PLAY_STUNNED  0x01
@@ -738,6 +738,7 @@ do_play_instrument(struct obj* instr)
 
         You(!Deaf ? "extract a strange sound from %s!"
                   : "can feel %s emitting vibrations.", the(xname(instr)));
+        Hero_playnotes(obj_to_instr(instr), buf, 50);
 
 
         /* Check if there was the Stronghold drawbridge near
@@ -832,4 +833,47 @@ do_play_instrument(struct obj* instr)
     return ECMD_OK;
 }
 
+enum instruments
+obj_to_instr(struct obj *obj) {
+    enum instruments ret_instr = ins_no_instrument;
+
+#if defined(SND_LIB_INTEGRATED)
+    switch(obj->otyp) {
+        case WOODEN_FLUTE:
+            ret_instr = ins_flute;
+            break;
+        case MAGIC_FLUTE:
+            ret_instr = ins_pan_flute;
+            break;
+        case TOOLED_HORN:
+            ret_instr = ins_english_horn;
+            break;
+        case FROST_HORN:
+            ret_instr = ins_french_horn;
+            break;
+        case FIRE_HORN:
+            ret_instr = ins_baritone_sax;
+            break;
+        case BUGLE:
+            ret_instr = ins_trumpet;
+            break;
+        case WOODEN_HARP:
+            ret_instr = ins_orchestral_harp;
+            break;
+        case MAGIC_HARP:
+            ret_instr = ins_cello;
+        case BELL:
+        case BELL_OF_OPENING:
+            ret_instr = ins_tinkle_bell;
+            break;
+        case DRUM_OF_EARTHQUAKE:
+            ret_instr = ins_taiko_drum;
+            break;
+        case LEATHER_DRUM:
+            ret_instr = ins_melodic_tom;
+            break;
+    }
+#endif
+    return ret_instr;
+}
 /*music.c*/
index b302db2e1d280f7e1a0fcba31cf3889c307a1131..6d06063d211970d528b78f8273013e232dcabd9c 100644 (file)
@@ -1517,9 +1517,9 @@ play_sound_for_message(const char* msg)
 
     if (soundprocs.sound_play_usersound) {
         snd = sound_matches_message(msg);
-        if (snd)
-            (*soundprocs.sound_play_usersound)(
-            snd->filename, snd->volume, snd->idx);
+        if (snd) {
+            Play_usersound(snd->filename, snd->volume, snd->idx);
+        }
     }
 }
 
@@ -1530,9 +1530,9 @@ maybe_play_sound(const char* msg)
 
     if (soundprocs.sound_play_usersound) {
         snd = sound_matches_message(msg);
-        if (snd)
-            (*soundprocs.sound_play_usersound)(
-                snd->filename, snd->volume, snd->idx);
+        if (snd) {
+            Play_usersound(snd->filename, snd->volume, snd->idx);
+        }
     }
 }
 
@@ -1784,4 +1784,260 @@ nosound_play_usersound(char *filename, int volume, int idx)
 }
 #endif
 
+#ifdef SND_SOUNDEFFECTS_AUTOMAP
+struct soundeffect_automapping {
+    enum sound_effect_entries seid;
+    const char *base_filename;
+};
+
+static const struct soundeffect_automapping se_mappings_init[number_of_se_entries] = {
+    { se_zero_invalid,                   "" },
+    { se_faint_splashing,                "faint_splashing" },
+    { se_crackling_of_hellfire,          "crackling_of_hellfire" },
+    { se_heart_beat,                     "heart_beat" },
+    { se_typing_noise,                   "typing_noise" },
+    { se_hollow_sound,                   "hollow_sound" },
+    { se_rustling_paper,                 "rustling_paper" },
+    { se_crushing_sound,                 "crushing_sound" },
+    { se_splash,                         "splash" },
+    { se_chains_rattling_gears_turning,  "chains_rattling_gears_turning" },
+    { se_smashing_and_crushing,          "smashing_and_crushing" },
+    { se_gears_turning_chains_rattling,  "gears_turning_chains_rattling" },
+    { se_loud_splash,                    "loud_splash" },
+    { se_lound_crash,                    "lound_crash" },
+    { se_crashing_rock,                  "crashing_rock" },
+    { se_sizzling,                       "sizzling" },
+    { se_crashing_boulder,               "crashing_boulder" },
+    { se_boulder_drop,                   "boulder_drop" },
+    { se_item_tumble_downwards,          "item_tumble_downwards" },
+    { se_drain_noises,                   "drain_noises" },
+    { se_ring_in_drain,                  "ring_in_drain" },
+    { se_groans_and_moans,               "groans_and_moans" },
+    { se_scratching,                     "scratching" },
+    { se_glass_shattering,               "glass_shattering" },
+    { se_egg_cracking,                   "egg_cracking" },
+    { se_gushing_sound,                  "gushing_sound" },
+    { se_glass_crashing,                 "glass_crashing" },
+    { se_egg_splatting,                  "egg_splatting" },
+    { se_sinister_laughter,              "sinister_laughter" },
+    { se_blast,                          "blast" },
+    { se_stone_breaking,                 "stone_breaking" },
+    { se_stone_crumbling,                "stone_crumbling" },
+    { se_snakes_hissing,                 "snakes_hissing" },
+    { se_loud_pop,                       "loud_pop" },
+    { se_clanking_pipe,                  "clanking_pipe" },
+    { se_sewer_song,                     "sewer_song" },
+    { se_monster_behind_boulder,         "monster_behind_boulder" },
+    { se_wailing_of_the_banshee,         "wailing_of_the_banshee" },
+    { se_swoosh,                         "swoosh" },
+    { se_explosion,                      "explosion" },
+    { se_crashing_sound,                 "crashing_sound" },
+    { se_someone_summoning,              "someone_summoning" },
+    { se_rushing_wind_noise,             "rushing_wind_noise" },
+    { se_splat_from_engulf,              "splat_from_engulf" },
+    { se_faint_sloshing,                 "faint_sloshing" },
+    { se_crunching_sound,                "crunching_sound" },
+    { se_slurping_sound,                 "slurping_sound" },
+    { se_masticating_sound,              "masticating_sound" },
+    { se_distant_thunder,                "distant_thunder" },
+    { se_applause,                       "applause" },
+    { se_shrill_whistle,                 "shrill_whistle" },
+    { se_someone_yells,                  "someone_yells" },
+    { se_door_unlock_and_open,           "door_unlock_and_open" },
+    { se_door_open,                      "door_open" },
+    { se_door_crash_open,                "door_crash_open" },
+    { se_dry_throat_rattle,              "dry_throat_rattle" },
+    { se_cough,                          "cough" },
+    { se_angry_snakes,                   "angry_snakes" },
+    { se_zap_then_explosion,             "zap_then_explosion" },
+    { se_zap,                            "zap" },
+    { se_horn_being_played,              "horn_being_played" },
+    { se_mon_chugging_potion,            "mon_chugging_potion" },
+    { se_bugle_playing_reveille,         "bugle_playing_reveille" },
+    { se_crash_through_floor,            "crash_through_floor" },
+    { se_thump,                          "thump" },
+    { se_scream,                         "scream" },
+    { se_tumbler_click,                  "tumbler_click" },
+    { se_gear_turn,                      "gear_turn" },
+    { se_divine_music,                   "divine_music" },
+    { se_thunderclap,                    "thunderclap" },
+    { se_sad_wailing,                    "sad_wailing" },
+    { se_maniacal_laughter,              "maniacal_laughter" },
+    { se_rumbling_of_earth,              "rumbling_of_earth" },
+    { se_clanging_sound,                 "clanging_sound" },
+    { se_mutter_imprecations,            "mutter_imprecations" },
+    { se_mutter_incantation,             "mutter_incantation" },
+    { se_angry_voice,                    "angry_voice" },
+    { se_sceptor_pounding,               "sceptor_pounding" },
+    { se_courtly_conversation,           "courtly_conversation" },
+    { se_low_buzzing,                    "low_buzzing" },
+    { se_angry_drone,                    "angry_drone" },
+    { se_bees,                           "bees" },
+    { se_someone_searching,              "someone_searching" },
+    { se_guards_footsteps,               "guards_footsteps" },
+    { se_faint_chime,                    "faint_chime" },
+    { se_loud_click,                     "loud_click" },
+    { se_soft_click,                     "soft_click" },
+    { se_squeak,                         "squeak" },
+    { se_squeak_C,                       "squeak_C" },
+    { se_squeak_D_flat,                  "squeak_D_flat" },
+    { se_squeak_D,                       "squeak_D" },
+    { se_squeak_E_flat,                  "squeak_E_flat" },
+    { se_squeak_E,                       "squeak_E" },
+    { se_squeak_F,                       "squeak_F" },
+    { se_squeak_F_sharp,                 "squeak_F_sharp" },
+    { se_squeak_G,                       "squeak_G" },
+    { se_squeak_G_sharp,                 "squeak_G_sharp" },
+    { se_squeak_A,                       "squeak_A" },
+    { se_squeak_B_flat,                  "squeak_B_flat" },
+    { se_squeak_B,                       "squeak_B" },
+    { se_someone_bowling,                "someone_bowling" },
+    { se_rumbling,                       "rumbling" },
+    { se_loud_crash,                     "loud_crash" },
+    { se_deafening_roar_atmospheric,     "deafening_roar_atmospheric" },
+    { se_low_hum,                        "low_hum" },
+    { se_laughter,                       "laughter" },
+    { se_cockatrice_hiss,                "cockatrice_hiss" },
+    { se_chant,                          "chant" },
+    { se_cracking_sound,                 "cracking_sound" },
+    { se_ripping_sound,                  "ripping_sound" },
+    { se_thud,                           "thud" },
+    { se_clank,                          "clank" },
+    { se_crumbling_sound,                "crumbling_sound" },
+    { se_soft_crackling,                 "soft_crackling" },
+    { se_crackling,                      "crackling" },
+    { se_sharp_crack,                    "sharp_crack" },
+    { se_wall_of_force,                  "wall_of_force" },
+    { se_alarm,                          "alarm" },
+    { se_kick_door_it_shatters,          "kick_door_it_shatters" },
+    { se_kick_door_it_crashes_open,      "kick_door_it_crashes_open" },
+    { se_bubble_rising,                  "bubble_rising" },
+    { se_bolt_of_lightning,              "bolt_of_lightning" },
+    { se_board_squeak,                   "board_squeak" },
+    { se_board_squeaks_loudly,           "board_squeaks_loudly" },
+    { se_boing,                          "boing" },
+    { se_crashed_ceiling,                "crashed_ceiling" },
+    { se_clash,                          "clash" },
+    { se_crash_door,                     "crash_door" },
+    { se_crash,                          "crash" },
+    { se_crash_throne_destroyed,         "crash_throne_destroyed" },
+    { se_crash_something_broke,          "crash_something_broke" },
+    { se_kadoom_boulder_falls_in,        "kadoom_boulder_falls_in" },
+    { se_klunk_pipe,                     "klunk_pipe" },
+    { se_kerplunk_boulder_gone,          "kerplunk_boulder_gone" },
+    { se_klunk,                          "klunk" },
+    { se_klick,                          "klick" },
+    { se_kaboom_door_explodes,           "kaboom_door_explodes" },
+    { se_kaboom_boom_boom,               "kaboom_boom_boom" },
+    { se_kaablamm_of_mine,               "kaablamm_of_mine" },
+    { se_kaboom,                         "kaboom" },
+    { se_splat_egg,                      "splat_egg" },
+    { se_destroy_web,                    "destroy_web" },
+    { se_iron_ball_dragging_you,         "iron_ball_dragging_you" },
+    { se_iron_ball_hits_you,             "iron_ball_hits_you" },
+    { se_lid_slams_open_falls_shut,      "lid_slams_open_falls_shut" },
+    { se_chain_shatters,                 "chain_shatters" },
+    { se_furious_bubbling,               "furious_bubbling" },
+    { se_air_crackles,                   "air_crackles" },
+    { se_potion_crash_and_break,         "potion_crash_and_break" },
+    { se_hiss,                           "hiss" },
+    { se_growl,                          "growl" },
+    { se_canine_bark,                    "canine_bark" },
+    { se_canine_growl,                   "canine_growl" },
+    { se_canine_whine,                   "canine_whine" },
+    { se_canine_yip,                     "canine_yip" },
+    { se_canine_howl,                    "canine_howl" },
+    { se_feline_yowl,                    "feline_yowl" },
+    { se_feline_meow,                    "feline_meow" },
+    { se_feline_purr,                    "feline_purr" },
+    { se_feline_yip,                     "feline_yip" },
+    { se_feline_mew,                     "feline_mew" },
+    { se_roar,                           "roar" },
+    { se_snarl,                          "snarl" },
+    { se_buzz,                           "buzz" },
+    { se_squeek,                         "squeek" },
+    { se_squawk,                         "squawk" },
+    { se_squeal,                         "squeal" },
+    { se_screech,                        "screech" },
+    { se_equine_neigh,                   "equine_neigh" },
+    { se_equine_whinny,                  "equine_whinny" },
+    { se_equine_whicker,                 "equine_whicker" },
+    { se_bovine_moo,                     "bovine_moo" },
+    { se_bovine_bellow,                  "bovine_bellow" },
+    { se_wail,                           "wail" },
+    { se_groan,                          "groan" },
+    { se_grunt,                          "grunt" },
+    { se_gurgle,                         "gurgle" },
+    { se_elephant_trumpet,               "elephant_trumpet" },
+    { se_snake_rattle,                   "snake_rattle" },
+    { se_hallu_growl,                    "hallu_growl" },
+};
+
+static const char *semap_basenames[SIZE(se_mappings_init)];
+static boolean basenames_initialized = FALSE;
+
+static void
+initialize_semap_basenames(void)
+{
+    int i;
+
+    /* to avoid things getting out of sequence; seid an index to the name */
+    for (i = 1; i < SIZE(se_mappings_init); ++i) {
+        if (se_mappings_init[i].seid > 0
+                && se_mappings_init[i].seid < SIZE(semap_basenames))
+            semap_basenames[se_mappings_init[i].seid]
+                                = se_mappings_init[i].base_filename;
+    }
+}
+
+char *
+get_sound_effect_filename(int32_t seidint, char *buf,
+             size_t bufsz,
+             int32_t baseflag) /* non-zero means return without
+                                  directory or extension suffix */
+{
+    static const char prefix[] = "se_", suffix[] = ".wav";
+    size_t consumes = 0, baselen = 0;
+/*    enum sound_effect_entries seid = (enum sound_effect_entries) seidint; */
+    char *ourdir = sounddir;       /* sounddir would get set in files.c */
+
+    if (!buf || (!ourdir && baseflag == 0))
+        return (char *) 0;
+
+    if (!basenames_initialized) {
+        initialize_semap_basenames();
+        basenames_initialized = TRUE;
+    }
+
+    if (semap_basenames[seidint])
+        baselen = strlen(semap_basenames[seidint]);
+
+    consumes = (sizeof prefix - 1) + baselen;
+    if (baseflag == 0)
+        consumes += (sizeof suffix - 1) + strlen(ourdir);
+    consumes += 1 + 1; /* '\0' and '/' */
+    if (baselen <= 0 || consumes > bufsz)
+        return (char *) 0;
+
+#if 0
+    if (!baseflag) {
+        Strcpy(buf, ourdir);
+        Strcat(buf, "/");
+    }
+    Strcat(buf, prefix);
+    Strcat(buf, semap_basenames[seidint]);
+    if (!baseflag) {
+        Strcat(buf, suffix);
+    }
+#else
+    if (!baseflag)
+        Snprintf(buf, bufsz , "%s/%s%s%s", ourdir, prefix,
+                 semap_basenames[seidint], suffix);
+    else
+        Snprintf(buf, bufsz , "%s%s", prefix, semap_basenames[seidint]);
+#endif
+    return buf;
+}
+#endif  /* SND_SOUNDEFFECTS_AUTOMAP */
+
 /*sounds.c*/
index 110e945537234483aa75f2e4419cb1967ccfd548..2b56e3b506e75d318adfce3622d701d0227f5aa8 100644 (file)
@@ -31,9 +31,9 @@ BEGIN
             VALUE "FileDescription", "NetHack for Windows - TTY Interface\0"
             VALUE "FileVersion", "3.7.0\0"
             VALUE "InternalName", "NetHack\0"
-            VALUE "LegalCopyright", "Copyright (C) 1985 - 2020.  By Stichting Mathematisch Centrum and M. Stephenson.  See license for details.\0"
+            VALUE "LegalCopyright", "Copyright (C) 1985 - 2023.  By Stichting Mathematisch Centrum and M. Stephenson.  See license for details.\0"
             VALUE "OriginalFilename", "NetHack.exe\0"
-            VALUE "PrivateBuild", "050102\0"
+            VALUE "PrivateBuild", "050107\0"
             VALUE "ProductName", "NetHack\0"
             VALUE "ProductVersion", "3.7.0\0"
         END
@@ -43,7 +43,58 @@ BEGIN
         VALUE "Translation", 0x409, 1200
     END
 END
+se_squeak_A WAVE "..\sound\wav\se_squeak_A.wav"
+se_squeak_B WAVE "..\sound\wav\se_squeak_B.wav"
+se_squeak_B_flat WAVE "..\sound\wav\se_squeak_B_flat.wav"
+se_squeak_C WAVE "..\sound\wav\se_squeak_C.wav"
+se_squeak_D WAVE "..\sound\wav\se_squeak_D.wav"
+se_squeak_D_flat WAVE "..\sound\wav\se_squeak_D_flat.wav"
+se_squeak_E WAVE "..\sound\wav\se_squeak_E.wav"
+se_squeak_E_flat WAVE "..\sound\wav\se_squeak_E_flat.wav"
+se_squeak_F WAVE "..\sound\wav\se_squeak_F.wav"
+se_squeak_F_sharp WAVE "..\sound\wav\se_squeak_F_sharp.wav"
+se_squeak_G WAVE "..\sound\wav\se_squeak_G.wav"
+se_squeak_G_share WAVE "..\sound\wav\se_squeak_G_sharp.wav"
 
+sound_Bell WAVE "..\sound\wav\sound_Bell.wav"
+sound_Bugle_A WAVE "..\sound\wav\sound_Bugle_A.wav"
+sound_Bugle_B WAVE "..\sound\wav\sound_Bugle_B.wav"
+sound_Bugle_C WAVE "..\sound\wav\sound_Bugle_C.wav"
+sound_Bugle_D WAVE "..\sound\wav\sound_Bugle_D.wav"
+sound_Bugle_E WAVE "..\sound\wav\sound_Bugle_E.wav"
+sound_Bugle_F WAVE "..\sound\wav\sound_Bugle_F.wav"
+sound_Bugle_G WAVE "..\sound\wav\sound_Bugle_G.wav"
+sound_Drum_Of_Earthquake WAVE "..\sound\wav\sound_Drum_Of_Earthquake.wav"
+sound_Fire_Horn WAVE "..\sound\wav\sound_Fire_Horn.wav"
+sound_Frost_Horn WAVE "..\sound\wav\sound_Frost_Horn.wav"
+sound_Leather_Drum WAVE "..\sound\wav\sound_Leather_Drum.wav"
+sound_Magic_Harp_A WAVE "..\sound\wav\sound_Magic_Harp_A.wav"
+sound_Magic_Harp_B WAVE "..\sound\wav\sound_Magic_Harp_B.wav"
+sound_Magic_Harp_C WAVE "..\sound\wav\sound_Magic_Harp_C.wav"
+sound_Magic_Harp_D WAVE "..\sound\wav\sound_Magic_Harp_D.wav"
+sound_Magic_Harp_E WAVE "..\sound\wav\sound_Magic_Harp_E.wav"
+sound_Magic_Harp_F WAVE "..\sound\wav\sound_Magic_Harp_F.wav"
+sound_Magic_Harp_G WAVE "..\sound\wav\sound_Magic_Harp_G.wav"
+sound_Tooled_Horn_A WAVE "..\sound\wav\sound_Tooled_Horn_A.wav"
+sound_Tooled_Horn_B WAVE "..\sound\wav\sound_Tooled_Horn_B.wav"
+sound_Tooled_Horn_C WAVE "..\sound\wav\sound_Tooled_Horn_C.wav"
+sound_Tooled_Horn_D WAVE "..\sound\wav\sound_Tooled_Horn_D.wav"
+sound_Tooled_Horn_E WAVE "..\sound\wav\sound_Tooled_Horn_E.wav"
+sound_Tooled_Horn_F WAVE "..\sound\wav\sound_Tooled_Horn_F.wav"
+sound_Tooled_Horn_G WAVE "..\sound\wav\sound_Tooled_Horn_G.wav"
+sound_Wooden_Flute_A WAVE "..\sound\wav\sound_Wooden_Flute_A.wav"
+sound_Wooden_Flute_B WAVE "..\sound\wav\sound_Wooden_Flute_B.wav"
+sound_Wooden_Flute_C WAVE "..\sound\wav\sound_Wooden_Flute_C.wav"
+sound_Wooden_Flute_D WAVE "..\sound\wav\sound_Wooden_Flute_D.wav"
+sound_Wooden_Flute_E WAVE "..\sound\wav\sound_Wooden_Flute_E.wav"
+sound_Wooden_Flute_F WAVE "..\sound\wav\sound_Wooden_Flute_F.wav"
+sound_Wooden_Flute_G WAVE "..\sound\wav\sound_Wooden_Flute_G.wav"
+sound_Wooden_Harp_A WAVE "..\sound\wav\sound_Wooden_Harp_A.wav"
+sound_Wooden_Harp_B WAVE "..\sound\wav\sound_Wooden_Harp_B.wav"
+sound_Wooden_Harp_C WAVE "..\sound\wav\sound_Wooden_Harp_C.wav"
+sound_Wooden_Harp_D WAVE "..\sound\wav\sound_Wooden_Harp_D.wav"
+sound_Wooden_Harp_E WAVE "..\sound\wav\sound_Wooden_Harp_E.wav"
+sound_Wooden_Harp_F WAVE "..\sound\wav\sound_Wooden_Harp_F.wav"
+sound_Wooden_Harp_G WAVE "..\sound\wav\sound_Wooden_Harp_G.wav"
 
-/*console.rc*/
-
+/*console.rc*/"
index 740400608353ce5449ac497815bca6d9953bb8ad..eb293d561cd32a957129cfe29b4a3a7bdd368204 100644 (file)
@@ -391,6 +391,60 @@ BEGIN
     IDS_APP_TITLE_SHORT     "NetHack for Windows"
 END
 
+se_squeak_A WAVE "..\sound\wav\se_squeak_A.wav"
+se_squeak_B WAVE "..\sound\wav\se_squeak_B.wav"
+se_squeak_B_flat WAVE "..\sound\wav\se_squeak_B_flat.wav"
+se_squeak_C WAVE "..\sound\wav\se_squeak_C.wav"
+se_squeak_D WAVE "..\sound\wav\se_squeak_D.wav"
+se_squeak_D_flat WAVE "..\sound\wav\se_squeak_D_flat.wav"
+se_squeak_E WAVE "..\sound\wav\se_squeak_E.wav"
+se_squeak_E_flat WAVE "..\sound\wav\se_squeak_E_flat.wav"
+se_squeak_F WAVE "..\sound\wav\se_squeak_F.wav"
+se_squeak_F_sharp WAVE "..\sound\wav\se_squeak_F_sharp.wav"
+se_squeak_G WAVE "..\sound\wav\se_squeak_G.wav"
+se_squeak_G_share WAVE "..\sound\wav\se_squeak_G_sharp.wav"
+
+sound_Bell WAVE "..\sound\wav\sound_Bell.wav"
+sound_Bugle_A WAVE "..\sound\wav\sound_Bugle_A.wav"
+sound_Bugle_B WAVE "..\sound\wav\sound_Bugle_B.wav"
+sound_Bugle_C WAVE "..\sound\wav\sound_Bugle_C.wav"
+sound_Bugle_D WAVE "..\sound\wav\sound_Bugle_D.wav"
+sound_Bugle_E WAVE "..\sound\wav\sound_Bugle_E.wav"
+sound_Bugle_F WAVE "..\sound\wav\sound_Bugle_F.wav"
+sound_Bugle_G WAVE "..\sound\wav\sound_Bugle_G.wav"
+sound_Drum_Of_Earthquake WAVE "..\sound\wav\sound_Drum_Of_Earthquake.wav"
+sound_Fire_Horn WAVE "..\sound\wav\sound_Fire_Horn.wav"
+sound_Frost_Horn WAVE "..\sound\wav\sound_Frost_Horn.wav"
+sound_Leather_Drum WAVE "..\sound\wav\sound_Leather_Drum.wav"
+sound_Magic_Harp_A WAVE "..\sound\wav\sound_Magic_Harp_A.wav"
+sound_Magic_Harp_B WAVE "..\sound\wav\sound_Magic_Harp_B.wav"
+sound_Magic_Harp_C WAVE "..\sound\wav\sound_Magic_Harp_C.wav"
+sound_Magic_Harp_D WAVE "..\sound\wav\sound_Magic_Harp_D.wav"
+sound_Magic_Harp_E WAVE "..\sound\wav\sound_Magic_Harp_E.wav"
+sound_Magic_Harp_F WAVE "..\sound\wav\sound_Magic_Harp_F.wav"
+sound_Magic_Harp_G WAVE "..\sound\wav\sound_Magic_Harp_G.wav"
+sound_Tooled_Horn_A WAVE "..\sound\wav\sound_Tooled_Horn_A.wav"
+sound_Tooled_Horn_B WAVE "..\sound\wav\sound_Tooled_Horn_B.wav"
+sound_Tooled_Horn_C WAVE "..\sound\wav\sound_Tooled_Horn_C.wav"
+sound_Tooled_Horn_D WAVE "..\sound\wav\sound_Tooled_Horn_D.wav"
+sound_Tooled_Horn_E WAVE "..\sound\wav\sound_Tooled_Horn_E.wav"
+sound_Tooled_Horn_F WAVE "..\sound\wav\sound_Tooled_Horn_F.wav"
+sound_Tooled_Horn_G WAVE "..\sound\wav\sound_Tooled_Horn_G.wav"
+sound_Wooden_Flute_A WAVE "..\sound\wav\sound_Wooden_Flute_A.wav"
+sound_Wooden_Flute_B WAVE "..\sound\wav\sound_Wooden_Flute_B.wav"
+sound_Wooden_Flute_C WAVE "..\sound\wav\sound_Wooden_Flute_C.wav"
+sound_Wooden_Flute_D WAVE "..\sound\wav\sound_Wooden_Flute_D.wav"
+sound_Wooden_Flute_E WAVE "..\sound\wav\sound_Wooden_Flute_E.wav"
+sound_Wooden_Flute_F WAVE "..\sound\wav\sound_Wooden_Flute_F.wav"
+sound_Wooden_Flute_G WAVE "..\sound\wav\sound_Wooden_Flute_G.wav"
+sound_Wooden_Harp_A WAVE "..\sound\wav\sound_Wooden_Harp_A.wav"
+sound_Wooden_Harp_B WAVE "..\sound\wav\sound_Wooden_Harp_B.wav"
+sound_Wooden_Harp_C WAVE "..\sound\wav\sound_Wooden_Harp_C.wav"
+sound_Wooden_Harp_D WAVE "..\sound\wav\sound_Wooden_Harp_D.wav"
+sound_Wooden_Harp_E WAVE "..\sound\wav\sound_Wooden_Harp_E.wav"
+sound_Wooden_Harp_F WAVE "..\sound\wav\sound_Wooden_Harp_F.wav"
+sound_Wooden_Harp_G WAVE "..\sound\wav\sound_Wooden_Harp_G.wav"
+
 #endif    // English (United States) resources
 /////////////////////////////////////////////////////////////////////////////