Posted November 7, 201311 yr How does one create a sound on the client only? All playSound*() methods I've come across puts the sound in the World. I'm a bit confused as to how the GUI limits the sound to the client only as it also calls the sndManager.playSoundFX(...). Is there a flag somewhere that the SoundManager or something lower down look at to avoid the sound being broadcasted? I'm back playing!
November 7, 201311 yr Hi Are you sure that SoundManager.playSoundFX tells the Server to play a sound to other clients? I don't see any evidence of that in the code, there are no Packet or NetworkHandler imports in the class, and I don't recall seeing any Client->Server packets related to sound generation. http://greyminecraftcoder.blogspot.com.au/2013/10/packets-from-client-to-server.html -TGG
November 7, 201311 yr Author Hi Are you sure that SoundManager.playSoundFX tells the Server to play a sound to other clients? I don't see any evidence of that in the code, there are no Packet or NetworkHandler imports in the class, and I don't recall seeing any Client->Server packets related to sound generation. http://greyminecraftcoder.blogspot.com.au/2013/10/packets-from-client-to-server.html -TGG Hi Definitely happens when testing it with a server and two separate clients on my pc. Can it have something to do with running two clients and a server on the same machine? I can't really see that being the problem as when I go into the UI and click buttons those clicks doesn't end up on the other client. And those clicks also use this.mc.sndManager.playSoundFX(...); method. Will mock up a small demo when time allows isolating the core code. On a side note the sound generated with playSoundFX() does not have the center balanced as in the code comment. The sound is definitely off-center and also doesn't rotate with my character. This is what made me suspicious about the sound being in the 'world'. This might be completely unrelated but I would have expected a local sound being completely center balanced. I'm back playing!
November 7, 201311 yr Hi Can it have something to do with running two clients and a server on the same machine? Maybe I've misunderstood what you said here - how can you tell which client is making the sound if you only have one set of speakers? I'd suggest you use two separate clients (on separate PCs) just to make sure there isn't something funny going on. Also, with two PCs you can insert a breakpoint on one and then step through the code to see which method makes the sound play on the other client. Perplexing... -TGG
November 7, 201311 yr Author Hi Can it have something to do with running two clients and a server on the same machine? Maybe I've misunderstood what you said here - how can you tell which client is making the sound if you only have one set of speakers? I'd suggest you use two separate clients (on separate PCs) just to make sure there isn't something funny going on. Also, with two PCs you can insert a breakpoint on one and then step through the code to see which method makes the sound play on the other client. Perplexing... -TGG Hi I have two test users, foo and bar, really --username foo and bar . So I just get foo to make noises and drop his volume to zero and get bar to stand next to him. Bar is still able to hear foo's sound effects. I'll still test it on two separate PCs after work, maybe there is something strange going on running all those instances on the same machine. I'm back playing!
November 8, 201311 yr Author Hi, Ok so two separate PC have the same effect. Here's an ugly little piece of code that have the same behavior. Maybe I just read the wrong tutorial! @NetworkMod(clientSideRequired = true, serverSideRequired = true) @Mod(modid = "Scratchpad", name = "Scratchpad", version = "0.1 Nothing") public class Scratchpad { public int _tick; @Instance("Scratchpad") public static Scratchpad instance; @EventHandler public void load(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new Scratchpad()); } public Scratchpad() { } @ForgeSubscribe public void onLivingUpdateEvent(LivingUpdateEvent event) { _tick++; if (_tick % 100 != 0) return; if (event.entityLiving instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entityLiving; if (!player.worldObj.isRemote) return; if (!player.username.equalsIgnoreCase("Foo")) return; Minecraft.getMinecraft().sndManager.playSoundFX("mob.sheep.say", 1.0f, 1.0F); } } } I'm back playing!
November 8, 201311 yr Wow that is very strange, that stub is very simple. I might give it a go on my PCs here. Does it play on both clients regardless of which client you originate the sound from? (i.e. the one with the integrated server, and the one without)? Perhaps you could try putting a breakpoint on one of the clients just before the sound (pause the client thread only, not server thread), then step into the vanilla code line by line and see when the other client goes baa. Might give a clue. -TGG
November 9, 201311 yr Author Wow that is very strange, that stub is very simple. I might give it a go on my PCs here. Does it play on both clients regardless of which client you originate the sound from? (i.e. the one with the integrated server, and the one without)? Perhaps you could try putting a breakpoint on one of the clients just before the sound (pause the client thread only, not server thread), then step into the vanilla code line by line and see when the other client goes baa. Might give a clue. -TGG Hi TGG, Well, that was really 'learning the hard way' for me. The onLivingUpdateEvent() fires on both clients for both Foo & Bar. All sorted now, thanks! I'm back playing!
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.