Skip to content
This repository has been archived by the owner on Mar 26, 2022. It is now read-only.

Speaker volume (Whisper - Shout) #6

Closed
DRich222 opened this issue Apr 4, 2020 · 17 comments
Closed

Speaker volume (Whisper - Shout) #6

DRich222 opened this issue Apr 4, 2020 · 17 comments
Labels
enhancement New feature or request

Comments

@DRich222
Copy link

DRich222 commented Apr 4, 2020

It should be possible to set how loud you're speaking. The most quiet non-mute setting would make you audible only to users in squares adjacent to yours. The loudest setting would make you audible to all users within a given max radius which could be set by room administrators.

@capnmidnight
Copy link
Owner

In the HN post I made, one used suggested a podium where a user could stand to be heard by everyone: https://news.ycombinator.com/item?id=22772800

I like the metaphor over an explicit configuration setting. What do you think?

@capnmidnight capnmidnight added the enhancement New feature or request label Apr 5, 2020
@DRich222
Copy link
Author

DRich222 commented Apr 5, 2020

I like the metaphor, too. I think it aligns with our goal: reproducing the dynamics that exist in person. I still think it's appropriate to be able to whisper or shout though. I want it to be as organic as possible of course, so I don't love the idea of a slider, but not sure what alternative there might be.

@capnmidnight
Copy link
Owner

I just had a thought, though it's only tangentially related to this issue. Maybe the audio range should not be set directly, maybe it should be changed with the view zoom. So if you want to listen to a specific conversation, you just zoom in on it. If you want to hear the entire room, you zoom all the way out.

@patcon
Copy link

patcon commented Apr 16, 2020

First off, thanks for sharing this amazing project!

Maybe this is too contrived, but this thread go me thinking on how "shouting" might work in a digital space like Lozya, and how it might be possible in a way that's analogous to an in-person space. I was hoping to share :)

Technically, people can yell non-stop in a public space, but social norms kinda make it so that if you're going to yell at the top of your lungs, you can essentially only do it for a few seconds due to social pressure.

So maybe to speak at "normal" volume, there could be a little replenishing bar that replenished in realtime (ie. you can talk at normal volume as much as you want), but if you choose to speak louder by yelling, then you only get a short burst. And maybe the podium, if it exists, just kinda bends the established rules a bit. Moderators could choose what sort of "social norms" exist in a space -- as in, a digital church service might have a different ability for loud-speaking, compared to an online hackathon or a simulated "movie night in the park". (e.g., "darren! you here?" or "i have an announcement.... if anyone's interested to talk about X, we'll be over by the well")

Anyhow, thanks for considering! :)

@mooomooo
Copy link
Contributor

mooomooo commented Jun 27, 2020

A possible way to consider this would be per-tile custom properties. You could have properties for both mic and speaker "decay"; the resulting volume adjustment to an audio stream would be the product of the distance, speaker decay of the source tile, and mic decay of the sink tile. Then a "podium" would have 0 source decay, an "observation tower" might have 0 mic decay, maybe a "nap corner" would have a very large mic decay, etc.

If you want to get really fancy, you could consider the product of decays along each tile along the path between source and sink -- then would enable e.g. room walls that provide sound barriers.

@capnmidnight
Copy link
Owner

capnmidnight commented Jun 29, 2020

Yeah, there's definitely potential for doing all kind of things with tile metadata. I think it'd be cool to have some tiles be "walls" that define parameters for a low-pass filter to attenuate the sound. It'd be neat to have moderators be able to put bad users in a penalty box, where the bad user gets warped into a door-less room whose walls block sound from all users. Maybe certain tiles could be switches that people could operate to make things happen, like open doors or play music. For issue #35, there'd definitely be tiles that change the room you're in.

I've also started thinking of alternative interfaces to Jitsi. A WebXR interface in full 3D. A more traditional teleconference interface with users spread around the edges of the screen, but still spatialized according to the center of the screen (or maybe even infer a listener position at a Z-axis distance away from the center of the screen!) It might make sense to split the repo into two: this one to be the default 2D RPG game interface, a second one is the spatialization protocol for Jitsi. Or maybe vice-versa, but I think people probably come here looking for the full package of what they find on the website.

@mooomooo
Copy link
Contributor

Other potential enhancements could be some form of one-way regions, i.e. everyone sitting at a table can hear each other but nothing else; those hovering next to the table can hear the table chatter but can't themselves be heard. I'm thinking of this in the context of a virtual board gaming session, which could maybe be further augmented with #50 mapping a stream of the game board onto the table for everyone to see. Things like this might suggest a jitsi spatialization protocol could be valuable as a standalone library for developers to further experiment.

@mooomooo
Copy link
Contributor

mooomooo commented Jul 3, 2020

To play around with such matters, I made a tilemap with all sorts of features that relate to the discussion above.

room.zip

(I tried loading it into my Calla though, and the Collision property doesn't seem to be having an effect?)

@capnmidnight
Copy link
Owner

The "True" value either needs to be lowercase, or this code needs to be changed to account for casing: https://github.com/capnmidnight/Calla/blob/master/js/src/TileSet.js#L30

@mooomooo
Copy link
Contributor

mooomooo commented Jul 3, 2020

Oh there's also another issue: https://github.com/capnmidnight/Calla/blob/master/js/src/TileMap.js#L92 only checks for collisions on layer 0, not all layers.

Also, when using an avatar emoji, it displays in the tile above the one it's actually in. Using an avatar URL works as intended.

@capnmidnight
Copy link
Owner

capnmidnight commented Jul 3, 2020 via email

@capnmidnight
Copy link
Owner

I just realized that the original issue listed here could be handled by adding a Gain node to user audio sources. The following diagram is a proposed map of audio nodes per-user. The current nodes are "Source", "Positioning", "Spatialization" and "Destination" (though technically Positioning and Spatialization are the same node, we can introduce some math to change how we set the positioning for presenters to achieve louder audio, but also maintain directionality).

image

@patcon
Copy link

patcon commented Sep 16, 2020

Sorry, any final closing comments? Is this covered elsewhere, or wontfix, or is there another place to track now? Thanks so much :)

@capnmidnight
Copy link
Owner

I-personally-wontfix. I'm just trying to focus on the core concept and not get distracted by extraneous features. There will be some movement of files in the repository pretty soon, so the delineation between the Calla library and the example "game" app on the website is more clear.

@patcon
Copy link

patcon commented Sep 16, 2020

k rockin. my understanding from that is that you'd like the issue queue to be your personal backlog with high signal-to-noise, and not a repository of feature requests from non-contributors. Admittedly not how I use mine, but I can empathize with that. Thanks! I'll stay tuned to see where you're going with this

(I'm currently deep into using High Fidelity for my own events, but am anticipating to be lured away from that in the future)

@capnmidnight
Copy link
Owner

No, not necessarily. Well... IDK.

I'm just trying to make sure this particular repo is just about the Calla library.

For the game app that is visible on the site, I'm in the process of moving that to a separate project/separate repo. There are features that I'd like to implement that necessitate creating a backend database for it. This repository will always have the current version of the game app available for reference as an example, but I want to make sure it stays "back-end agnostic".

All while juggling my day job, which is also using Calla, so again the need to be back-end agnostic.

So I guess, in that sense, yes, I want this issue list to be clear of feature requests from non-contributors. That sort of thing would go in the issues list of the eventual repo for the game app.

@patcon
Copy link

patcon commented Sep 17, 2020

ooohhhh ok that makes sense :) Thanks for clarifying @capnmidnight!

Also, do you have a synchronous chat space? If not, might you be interested to create one, perhaps using Gitter? I'm not a code contributor yet, but I suppose I have some general topics I'd be eager to riff on.

As context, I used to co-organize weekly hacknights for a few years (40-70 ppl). I feel like we had some interesting ways of thinking about physical space and human interaction, and we've be fortunate to share and socialize our model internationally. Anyhow, I'm super eager to replicate the atmosphere digitally, and I've mostly been doing that with High Fidelity: https://hackmd.io/Wv8m0dxvSmu4tF02Htb24Q?both (HiFi gets a lot of things right, but in the long term, I'm much more interested in tying myself to a FOSS project I can actually contribute to!)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants