trynoice / android-app

The Android app for Noice.
https://trynoice.com
GNU General Public License v3.0
934 stars 89 forks source link

Womb simulating white noise preset for newborns/infants #1055

Closed lrq3000 closed 2 years ago

lrq3000 commented 2 years ago

This preset provides a ready to use white noise for newborns and infants to help them induce sleep and also help them maintain sleep by muddling ambient noise (eg, by parents). This is inspired by Dr Karp's advices on what constitutes a good white noise sound for infants, similar to what their commercial offer Snoo implements. For more details, see this, this and this as references.

Here are the major features implemented, with the overall goal of simulating what fetuses hear while in the womb as advised by Dr Karp:

There is one major difference:

Here is the link to the preset I made:

https://ashutoshgngwr.github.io/noice/preset?name=InfantWombSim&playerStates=%5B%7B%22soundKey%22%3A%22brownian_noise%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A25%7D%2C%7B%22soundKey%22%3A%22electric_car%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A13%7D%2C%7B%22soundKey%22%3A%22moving_train%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A22%7D%2C%7B%22soundKey%22%3A%22soft_wind%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A25%7D%2C%7B%22soundKey%22%3A%22water_stream%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A6%7D%2C%7B%22soundKey%22%3A%22wind_in_palm_trees%22%2C%22timePeriod%22%3A300%2C%22volume%22%3A15%7D%5D

Of course, please license the preset however is adequate for the Noice project, I relinquish all rights.

Describe the solution you'd like

Using white noise machines is very common for infants, and only paid apps currently offer tailored white noises for infants. If it was included natively in Noice, this preset would offer a ready to use free alternative for new parents. I'm sure it would be useful to a lot of people.

Also adults can sleep with it too, it's not just for infants ;-)

ashutoshgngwr commented 2 years ago

Hi @lrq3000! Thanks for taking the time to open this issue. I didn't have enough time to go through all three references, but I am already convinced from the past feedback. It appears that you've used v1 to generate this preset, and the sound library has gone through drastic changes since then. I am concerned about the electric car and moving train sounds in particular. Will it be possible for you to upgrade Noice and recreate this preset? If everything checks out, I'll be happy to include it in the next release.

lrq3000 commented 2 years ago

@ashutoshgngwr Oh thank you for the warm reception for this idea :-)

I tried to re-implement in v2, and as you said the two major changes are the electric car and moving train sounds, the rest can be reproduced without an issue. While we can do without the electric car as it was just used to add more low-frequency sounds over the already rumbly brown noise, train sound is necessary to simulate a heartbeat-like sound, and so is a key element.

It seems like the new train sound is captured from inside the train, whereas the previous one was captured from outside, from a fixed point. Also, the previous train sound was pretty low-freq, very little high-freq sounds in it, so it was perfect for this preset's purpose.

I see in #1044 that you are open to the idea of implementing back some or all old sounds, and I think this would be a very good idea, I also liked the old sounds from v1.3.3. I can understand you want to add more sounds, but the old ones, especially with the dual sampling technique, were working great. I used Noice before dual sampling (I think it was v1.0?) and other white noise software and none can come close to the quality provided by Noice v1.3.3 . Version 2 seems very promising in terms of new sounds that can be added in the future so I can understand why you wanted to rework the sound engine, but I think the old sounds library was close to perfection, don't fix what's not broken ;-)

All that is to say: if you can add back the old train sound, or if you are open to a new sample that mimics the old one (I can try to find one but no guarantee I'll find), then I can re-implement this preset.

ashutoshgngwr commented 2 years ago

@lrq3000 Thanks for taking the time to recreate it on v2.

Version 2 seems very promising in terms of new sounds that can be added in the future so I can understand why you wanted to rework the sound engine, but I think the old sounds library was close to perfection

I haven't got ample feedback on the new sound library to fix what's broken. I'll be working to bring the new library's quality close to v1 (maybe even better).

don't fix what's not broken

It was necessary to expand the sound library. The v1 had its limitations, the top two were: limited audio quality and a limited number of sounds. With v2, the only bottleneck is how many good sounds I can produce on my end.

lrq3000 commented 2 years ago

@ashutoshgngwr I understand you wanted to rework the sound engine, I also developed a virtual instrument on Android in the past and I know how much it can be a game changer to have a good sound engine, especially one that can synthesize ;-)

I can give you a short feedback from my limited use, keeping in mind I am looking for low freq, unsurprising, soothing noise: to me it seems most of v2 sounds are very fine, producing sounds similar to v1 but higher quality. There are however a few exceptions, mostly on sounds where there is an agent, ie, not forest or water sounds. For example, train sound as noted above is much more dynamic and has high frequency sounds. Same for the electric car, the one in v1 only included the low freq rumbling noise of the engine, whereas now in v2 we can hear turn signal levers being activated at different, non deterministic times, which adds a high freq random sound. I do not use the cat purr sound but I think it's likely a similar complaint.

In summary, it seems to me that the issue with some of v2 sounds may paradoxically be caused by the higher richness / longer sample duration allowed by the new sound engine. This makes the sounds less repetitive but also more random and hence less soothing/more dynamic/more difficult to mix. What i mean is that it's easier to mix samples when samples have a relatively limited frequency band, then it's just a matter of stacking a few samples we like that cover each band we want to get a noise sample set tailored to our needs. But when the samples are more complex and they cover a wider freq band, it's difficult then to cherry pick and engineer what we want.

If my hypothesis above is correct, then I guess that an alternative solution would be to program a passband filter feature that can be tuned independently for each chosen sample, so that users can filter out high freq or low freq sounds or any band they want to their convenience and mix with other samples with different passband filters. But i guess this is a lot more work than just picking more adequate samples. (note however this wouldn't fully fix the issues with the train sample for this issue's purpose, because the v2 sound lacks the heartbeat like sound pattern since it's recorded from inside the driver's booth instead of outside, but i'd bet the v2 train sound would still be much more usable after a passband filtering).

A common denominator in the v1 sounds is that they were recorded from an external passive viewpoint, so that they simulated what can be heard by people experiencing this noise IRL. In v2, the problematic sounds seem to be acquired in an internal active viewpoint, ie, both the electric car and train samples are from the driver's perspective, which is not what most people hear (i mean the electric car driver does not want to be soothed by the sound they hear, those who are soothed are the passengers, and since they are further from the driving console they hear a different sound, such as more dampened turn signals sounds). So maybe samples may need to be chosen with the criterion of being collected from an external and passive/fixed viewpoint?

This ended up being longer than I expected, sorry! These are just my opinions/thoughts!

ashutoshgngwr commented 2 years ago

@lrq3000

users can filter out high freq or low freq sounds or any band they want to their convenience and mix with other samples with different passbant filters. But i guess this is a lot more work than just picking more adequate samples

Yes, I think it will be much more work than finding better samples, but that's not the natural blocker. I'm actively trying to reduce the complexities in the interface and make it as easy as possible for technically laid-back users to navigate.

This ended up being longer than I expected, sorry! These are just my opinions/thoughts!

It is well-articulated feedback on the issue. I know exactly what the problem is instead of trying to understand it from vague details. Thank you for your efforts.

I'll put fixing these sounds at the top of my to-do list. You can expect it to resolve in a few days. I'll notify you as soon as the updated sound library is live.

ashutoshgngwr commented 2 years ago

Hi @lrq3000!

I'll put fixing these sounds at the top of my to-do list.

So that didn't happen! I apologise that it took unexpectedly long for me to resolve this. Here is what I've done to resolve this issue:

Please let me know what you think. Moreover, you can try the fan sound instead of the electric car sound as a workaround and let me know if that would work.

lrq3000 commented 2 years ago

@ashutoshgngwr No worries, thank you for your maintaining this great project :D

Awesome for the sounds, it's much better for the train! For the electric car, this is strange because if you listen to the v1.3.3 sound, there is no turn signal sound, and the sound is very continuous (the car does not get stopped), I don't know if this is because of the old dual-sampling technic but this allowed the electric car sound to be very different, and better for my purpose. But nevermind, this one is not necessary, it was just used to add more depth.

I could reproduce the Womb Simulator sound with the latest release of Noice v2, enjoy :-)

https://trynoice.com/preset?n=WombSimulator&ps=%5B%7B%22soundId%22%3A%22brownian_noise%22%2C%22volume%22%3A25%7D%2C%7B%22soundId%22%3A%22rain%22%2C%22volume%22%3A25%7D%2C%7B%22soundId%22%3A%22seashore%22%2C%22volume%22%3A12%7D%2C%7B%22soundId%22%3A%22soft_wind%22%2C%22volume%22%3A25%7D%2C%7B%22soundId%22%3A%22train%22%2C%22volume%22%3A18%7D%2C%7B%22soundId%22%3A%22water_stream%22%2C%22volume%22%3A8%7D%2C%7B%22soundId%22%3A%22wind_through_palm_trees%22%2C%22volume%22%3A13%7D%5D

However, I would suggest to edit the train sample one last time to remove the horns sample that you overlaid on top, it used to be a separate sample and IMHO it would be better to do that. Indeed, I listened to the original train sample (it's great you add a link, kudos for that, I guess it's to ease licensing, great work!), and it was indeed perfect as the commenters wrote ;-) And as I suspected, it's a sample that is recorded outside of the train, just like a bystander would hear.

I do think the horns overlay is an unnecessary addition, not just for the Womb Simulator preset, but in general: it adds a cue that the brain can use to recognize the repeating pattern of the sample, and it's a loud high-freq sound that breaks the monotony of the train sample. IMHO, monotony is great for any white noise machine. Monotony != repetitivity, monotony is the lack of surprise in a sample, so that the humain brain doesn't get distracted by the sound, which I think is the ultimate goal of any noise machine, to generate a noise that becomes a non-distraction background for the listener's brain, almost as if, for the brain, silence was replaced by the noise as the baseline, 0db noise level.

/ADDENDUM: So the ultimate goal I think of any white noise machine is to achieve monotony without repetitivity, so that the noises are unsurprising so that the brain can't pick up salient features, and no repetitive pattern emerge that the brain can pick up either.

Anyway, whether you remove the horns or not, the preset above works, as other samples cover the horns so that's ok, but it would be better without the horns, and if you do remove the horns, the preset does not need to be changed at all :-)

And of course for licensing please use whatever you want, public domain or the same license as the software to your convenience!

One last suggestion: it could be nice to have the possibility to add a one-line description of the preset. If such a description field is added, here is a potential short description for the Womb Simulator preset:

White noise rich in low-frequency sounds with a heartbeat-like train sample to simulate womb sounds that can help induce and maintain sleep of newborns and infants, inspired by Dr Harvey Karp's book The Happiest Baby On The Block.

ashutoshgngwr commented 2 years ago

For the electric car, this is strange because if you listen to the v1.3.3 sound, there is no turn signal sound, and the sound is very continuous (the car does not get stopped), I don't know if this is because of the old dual-sampling technic but this allowed the electric car sound to be very different, and better for my purpose. But nevermind, this one is not necessary, it was just used to add more depth.

The v1 had a 45-second hard limit on sound samples. Noice played two samples in parallel for most sounds, including the electric car. So it didn't allow for anything but a simple, static rhythm, e.g. a car doesn't drive at a constant speed. Or, to make a general statement, things vary with time. The v2 focuses on this fundamental principle and attempts to address it.

I agree some sounds are just too dynamic for background noise, and I'll explore things further in this regard.

I could reproduce the Womb Simulator sound with the latest release of Noice v2, enjoy :-)

Thank you for this. I'll add it to the next release.

However, I would suggest to edit the train sample one last time to remove the horns sample that you overlaid on top, it used to be a separate sample and IMHO it would be better to do that.

Makes sense!

And as I suspected, it's a sample that is recorded outside of the train, just like a bystander would hear.

It isn't what I intended. In my opinion, the train sound should mimic the soundscape of travelling in a train cabin. Listening to it from a bystander's perspective doesn't make much sense. The good news is that in most of Southeast Asia, you can find trains with non-air-conditioned cabins (with open windows) that sound close to this sample. The last sample mimicked the entire soundscape, i.e., from a complete halt to a speedy ride and back to a halt. But, as you pointed out earlier, it was too dynamic.

One last suggestion: it could be nice to have the possibility to add a one-line description of the preset.

I don't have the exact product mapped out yet, but I am thinking of adding a user journey that helps users generate (or at least suggest) a list of presets based on their requirements. Perhaps I can provide additional details for presets there.

Thank you for the detailed response. I omitted a huge chunk of your reply from quotes. I read it, and I was already in agreement. I'll revisit the sound library as soon as I finish the Chromecast migration.

lrq3000 commented 2 years ago

Hey, I thought a bit more about what you said about the positioning of the recorder. I think you are right, we both used a different definition of passivity, but yours included additionals implicit conditions.

I tried to identify these implied conditions and more precisely what kind of sound this type of "ideal" passive recording generate, leveraging my knowledge of both artificial intelligence and clinical neuroscience (I'm a researcher in both), here's what i came up with:

Passive non-repetitive monotony

Note that i here define "soothing" as any sound that is not catching cognitive attention and lead to minimal or no additional brain processing from hearing, either instantly or after some time by habituation. Hence, a soothing sound may induce sleep but by this definition this is not a necessary consequence. A soothing sound can be used to mask other environmental sounds by this definition.

That's all I wanted to add. Maybe this can be useful for some purpose. At least I think there should be a discussion about the design of a formal framework for what types of sounds can be good candidates for a noise machine, and imho this discussion is lacking in the whole field for some reason.

ashutoshgngwr commented 2 years ago

same familliar features but not same order / temporal repetition

This is what the v2 engine is built around. The server side offers multiple segments for a particular sound. It randomly sequences these segments on the client side to create seamless experience.

imho this discussion is lacking in the whole field for some reason.

I think that's mainly because the creators like me are just programmers with no background in the other domain.

These are some great pointers and thank you for writing them. However, we can't go back to a dual sample engine at this point. We're facing a network issue on client devices when 5-6 sounds are started simultaneously on the first launch. Loading 2 samples for sounds will make it worse. On the other hand, we were using dual samples to provide an illusion of longer sounds using short samples. Since the v2 engine works with longer samples, I think that is obsolete from a technical standpoint. These concerns relate to the sound library and can be addressed there. While working on the v2 library, I introduced too much dynamicity in sounds without realising its adverse effect.

To put everything more specifically:

Nevetheless, I'll be working on their resolution soon. Currently, I am facing a few setbacks in the Chromecast migration.

lrq3000 commented 2 years ago

Ah that makes a lot of sense, yes indeed dual sampling can produce issues with too many audio channels opened than the OS can support, so I understand the move to the new engine, and it's great if it can randomize the multiple segments! This takes care of the non-repetitiveness criterion.

I think I need some clarification on monotonicity. Is varying rain a problem here? Or is it just sounds like electric car where the sound comes to halt?

I was thinking of monotonicity more in terms of the frequency domain, ie that the sample should be restricted to the same band from start to end. For example, if it's a mostly rumbling (low freq) sound, then if at some point there is a high pitched sound (such as the train horn) then it breaks the monotonicity criterion. But that's just my proposition, you could make an argument that the temporal domain may also be important too, hence maybe combining both by looking at the spectrum at various points in time in the sample to check if the profile is similar all along may be better? But looking at monotonicity only in the temporal domain would I think be in contradiction with the non-repetitiveness criterion, as essentially non-repetitiveness is non-monotonicity in the time domain.

Hence IMHO the rain samples are very fine, and I actually use them in the preset I made above. They fit all criteria. As you pointed out, most of the "problematic" or rather let's say suboptimal samples are in the travel section, and it's logical, as we can expect natural sounds to apriori fit the 3 criteria I mentioned, whereas man produced sounds can have an artificial structure that violate the 3 criteria. /EDIT: I would reframe the previous sentence by proposing that samples of sounds produced by an agent (human or animal) may more often violate one or all of the 3 criteria.

ashutoshgngwr commented 2 years ago

@lrq3000 Sorry for the delayed response, and thanks for clearing things up! Everything you've pointed out so far makes sense to me. I'll keep it under consideration when working on the sound library.

ashutoshgngwr commented 2 years ago

I just created a release and forgot about this! :man_facepalming:

lrq3000 commented 2 years ago

Haha this happens to me all the time. Next time ;-)

Le sam. 12 nov. 2022 à 21:10, Ashutosh Gangwar @.***> a écrit :

I just created a release and forgot about this! 🤦‍♂️

— Reply to this email directly, view it on GitHub https://github.com/trynoice/android-app/issues/1055#issuecomment-1312562513, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAIRFXXFINW5GWYLMXMLH53WH72TBANCNFSM56CG33CA . You are receiving this because you were mentioned.Message ID: @.***>