return to table of content

Show HN: Ambiphone, no-nonsense ambient music and white noise

charles_f
13 replies
1d23h

I love it!

I hate that most of these apps are subscription based for no good reason. This is so clean and nice...

One thing that would be awesome would be an option to preload and cache the noises. I regularly use white noise machines in offline situations (planes, remote camp ground), offline mode would make it the ultimate machine!

jen729w
8 replies
1d18h

I hate that most of these apps are subscription based for no good reason.

The developer earning a living?

corytheboyd
6 replies
1d17h

If there are continued costs associated with running the service, sure, I’ll pay a subscription if it’s good enough. A subscription for static content is a complete and total grift. Such content should be a one-time payment, which I will happily pay if it’s good enough

matteason
2 replies
1d9h

I have considered adding a subscription tier called Ambiphone Minus which gets you absolutely nothing extra and may even take features away

corytheboyd
0 replies
1d3h

I love it haha

charles_f
0 replies
1d4h

I think I would do a donation if I use it

jen729w
2 replies
1d13h

A subscription for static content is a complete and total grift.

You're here so I'll charitably assume you've managed a web server ever.

There is no such thing as 'static'.

charles_f
0 replies
1d7h

If you're building a mobile app with a few noises, then it's static. You might get updates to the OS API once in a while, but there's no ongoing work. I'm fine giving you a fixed fee, as we've always done until everybody became crazy about subscriptions.

atoav
0 replies
1d8h

Yes there is. And I am the admin of multiple webservers. What you are right about is that the content being static does not mean the work load is zero

AlexeyBelov
0 replies
10h22m

I have side projects as well but I'm pretty sure most developers have a day job. I don't earn anything from my side projects and don't want to. I'm afraid money would "change the equation" and might damage the user experience and awaken the low-key greed in me.

matteason
2 replies
1d23h

Great suggestion. I'm testing a PWA version at the moment (https://test.ambiph.one) and PWAs do allow offline caching of resources but I'm not sure if I'll bump up against any cache size limits. I seem to remember reading that Safari is particularly stingy unfortunately.

charles_f
1 replies
1d18h

Awesome! Maybe a toggle to select those you want to preload?

matteason
0 replies
1d18h

Yeah, once I've implemented saved mixes prioritising those sounds would be good too

michaelmdresser
0 replies
1d13h

I believe this is adjacent, but I quite like https://asoftmurmur.com/. I’m not sure if it’s able to run offline.

catapart
8 replies
1d23h

Fantastic! The design is just great; so simple and no-nonsense.

Honestly, I don't really use white-noise generators so I didn't plan on using it, myself, but after realizing it allows layering the sounds, I've built a really nice little soundscape and find myself missing a function that would allow me to transfer that design (selected sounds and volumes) to another instance of the app.

Totally not necessary, of course! Easy enough to re-configure. Just something I thought I might use, in case you were interested.

matteason
7 replies
1d23h

Thanks for the great feedback!

I'm building the ability to save mixes at the moment actually - good point about being over to move them over to a new device. At the moment I'm just storing saved mixes in localstorage but people will definitely want the ability to sync at some point. I've been trying to avoid having an account system in the interests of keeping things simple but I might have to bite the bullet or come up with another clever way to keep things in sync

hunter2_
2 replies
1d23h

You could store all state in the URL fragment. Maybe each key is a sound and each value is the volume, like /#whale=5&fire=8 or whatever. Call replaceState (better than pushState to avoid polluting the back button history with every little tweak) whenever the user changes something. On page load, read from the URL fragment using window.location.hash and then sharing is just a matter of copying the URL, which could be done entirely in browser chrome, and/or via a "share" button you provide.

These might help:

https://www.jvt.me/posts/2019/08/01/node-parse-url-fragment/

https://stackoverflow.com/a/66416539

matteason
0 replies
1d23h

This is exactly what I do on https://www.matteason.co.uk/scotbeats/ actually - any settings change is reflected in the URL and read back on load. When I implement sharing of individual mixes it'll probably look a lot like this

catapart
0 replies
1d23h

Great recommendation for such simple state! The portability of that is just perfect!

catapart
1 replies
1d23h

I feel your pain. I'm building my own local-first, no-nonsense app and need to solve the same problem. I've got proof of concepts for both a no-account server syncing scheme (app generates key, you manually enter that key in whichever instance you want to share the data with) and a web-rtc based p2p sync.

But I will say that I have a need to sync data, which is why I'm putting effort into getting that syncing working (as well as compressed and encrypted). I really doubt you would need something robust for this type of thing. I'd, personally, be perfectly happy to get a json "export" of your local storage values that I could just "import" into a new instance of the app. I'll email it to myself. No need to complicate it with automation and all of the baggage that comes along with accounts.

If nothing else, a manual import/export is a fully-featured first implementation that can be iterated into something more robust.

matteason
0 replies
1d23h

This is a good point. I like the safety of being able to have my own local copy of my data so json export/import would be a good first step

jamesbooker83
0 replies
1d23h

You could generate some sort of hash of the selected options, encode it with something that’s short and human readable and then share that on the screen?

Something easy for a human to transfer like honey-chair-balcony or something. Store the settings in the backend against this identifier and then you can retrieve it later? So you still need a backend but no need for accounts

3np
0 replies
1d22h

If you happen to be excited about stuff like this:

https://veilid.com/

https://news.ycombinator.com/item?id=37118124

https://www.eff.org/deeplinks/2023/12/meet-spritely-and-veil...

(Otherwise, encode-state-in-url-hash or export-to-json-and-paste aren't too bad, unless you do want "social")

yodon
4 replies
1d21h

Nice! Any chance of adding binaural beats? (I'm pretty sure some other "binaural" apps I've tried are actually playing both tones into both ears, which isn't actually what binaural is about)

matteason
2 replies
1d19h

OK, they're there. There's a new 'Binaural beats' section near the bottom.

yodon
1 replies
1d19h

Nice, with icons, and everything!

And they're definitely binaural, because the beats go away when just listening with one ear at a time (unlike some other supposedly binaural apps)

matteason
0 replies
1d18h

Yep - all generated manually in Adobe Audition just now so they're properly done

matteason
0 replies
1d20h

I'm adding some now, just for you. Give me an hour or two. (They'll be properly made, pure tones hard panned left and right)

nonrandomstring
4 replies
1d22h

Seems the title is a little modest.

There is a white noise generator, which "cat /dev/urandom | /dev/audio" or a couple of lines of C code will accomplish. With just a few controls you can tailor the spectrum easily.

Then there is an "ambient music generator" which you can knock together in a few hours with Csound, Supercollider, Pd, Chuck/Faust and the like.

Then there's an "ambient music application" which in addition to inbuilt generators works with with online libraries of generators, seeds, patterns, sample loops, and a package/element manager for getting and adding "songs". Last time I built one of those it was a few weeks of effort.

Then there's getting all that to run on smartphone, on multiple platforms, getting around all the quirks, permissions and general madness that is phone dev ecosystem.

Well done on that last point. Seems the last of these is what the author has created and I kinda think it deserves a better name than "white noise generator".

I didn't realise there is still quite a culture of "noise generators" for people wanting to sleep, read or meditate.

matteason
1 replies
1d22h

That's really kind, thank you. It's definitely been a slog getting it working consistently across every browser/device combo so I'm glad that effort's paid off.

On the music point - at the moment it's just using looped versions of some (great) free tracks I've found, but I'm experimenting with generative music at the moment, including using environmental stimuli (mic, light level, accelerometer etc) to trigger changes in the music and bring in live samples from your surroundings. Early days but it's been fun to experiment with.

nonrandomstring
0 replies
1d21h

You're definitely doing the fun stuff, good luck with it.

gardenhedge
0 replies
1d20h

What phone dev ecosystem are you talking about?

aitchnyu
0 replies
1d9h

Reminds me of the good ol days we could pipe /dev/mem to /dev/dsp for our white noise needs. When I investigated inconsistent sounds by piping to terminal, I saw plain text at times.

bravura
4 replies
1d23h

If you have police scanner audio, then you should definitely include archival NASA radio recordings as another option.

matteason
3 replies
1d23h

On it! The Apollo 11 audio is all on archive.org [0] so I'll get some samples from that added

https://archive.org/details/Apollo11Audio

tgv
2 replies
1d22h

There are also air traffic recordings. Those are very lengthy streams.

Nice work, BTW.

matteason
1 replies
1d22h

Offhand do you know what the copyright status of ATC recordings is? The Apollo recordings are public domain because they're US government works

SushiHippie
0 replies
1d8h

https://www.liveatc.net/legal/

(liveatc.net seems to be the most well-known website for live atc audio)

It sounds like they just don't want you to create an app for livestreaming contents of liveatc.net and that they allegedly own all rights to the content.

Maybe you could contact them, and ask if you could use some recordings.

artagnon
3 replies
1d23h

Very slick interface with a nice selection of sounds! I would definitely use this if only it could connect to my Sonos.

matteason
2 replies
1d23h

I'll look into the Sonos API. The problem I've found with other casting/streaming APIs (Google Cast in particular) is that it expects a single URL to stream from, whereas Ambiphone is just loading individual sound files and playing them simultaneously on your device. It should work fine over Bluetooth but I appreciate that's not the best experience with Sonos and other smart speakers

artagnon
1 replies
1d22h

Oh no! I think we’re out of luck if my reading of [1] is right. Sonos API only supports streaming from a single URL.

[1]: https://docs.sonos.com/docs/streaming-basics

matteason
0 replies
1d22h

It's not out of the question at all, I just need to figure out how to combine the sounds server-side and stream them out. On the plus side it should then be pretty simple to make work across different smart speakers, I'm just not sure how complex/expensive it would be to get set up

amar0c
3 replies
1d23h

Found similar thing other day [0] but thing is.. If this is not an App it's not usable. People tend to listen this while resting (in bed for example) so makes no sense have this in browser. For example [0] stops playing when screen is off/locked

[0] https://moodist.app

amar0c
2 replies
1d23h

OK to reply to myself, after testing it, this one does work while phone screen is off so this is usable. Thanks

matteason
1 replies
1d23h

Yeah, it's actually surprisingly tricky to get sound to persist with the screen off, especially on iOS, but I managed it in the end.

I'm testing a PWA version at the moment too so it'll be installable to your home screen - the test version at https://test.ambiph.one is PWA-enabled if anyone would like to try it out

amar0c
0 replies
1d23h

Yeah, this is even better. Maybe add 'reset' button that will reset all sounds to "not selected".

ahmedfromtunis
3 replies
1d23h

I have been using Atmosphere for years now.

Its main advantage is that it's an app (at least on Android) and that it works perfectly even when offline.

It has a wide variety of sounds to mix and match, as well as an option to save favorite combinations for quick access.

naitgacem
1 replies
1d23h

Can you link to said app?

ahmedfromtunis
0 replies
1d23h
jamisonbryant
0 replies
1d13h

Another big benefit of Atmosphere is that its audio can play while other apps are also playing audio, such as a music or video player. This opens up even more avenues for custom mixes for when your brain needs exactly the right ambient sound combo to fall asleep.

wdfx
2 replies
1d2h

This is very nicely presented. I wasn't expecting to activate multiple sounds and mix them to my liking.

Currently listening to Strong Wind 5% + Fire 10% + PCIII 8% + Wind Chimes 1% + Heartbeat 1% + Clock Ticking 5% + Printer 2% + Morse Code 0.5% + Numbers Station 5%

wdfx
1 replies
1d2h

And now for a feature request: LFO control the mix.

I'm starting to find that my mix is noticeably repetitive after a few minutes. I would like the app to automatically bring in and out other selected sounds over a period of time to reduce the repetition.

However, I know this flies in the face of simplicity, I don't know how you'd go about adding that in a way that's easy to use? Perhaps you add some "timers" and link them to sounds, such that each "timer" fades in/out over some preset periods (1/5/10/15 minutes ?)

matteason
0 replies
1d2h

Good suggestion. It's on the plan to add more control over individual channels (things like positioning in 3D space, high-pass/low-pass, reverb etc) so a 'drift' mode would fit nicely in there

themanmaran
2 replies
1d18h

I turned them all on at once and had a slightly out of body experience.

matteason
0 replies
1d17h

My 10 year old daughter did this when I asked her to test it, it's surprisingly not as awful as I thought it would be

Minor49er
0 replies
1d17h

I turned several on at once, turned them off, and noticed that one of the Radio sounds will now play in addition to anything else that is currently playing

spacec0wb0y
2 replies
1d22h

Love this, really well designed. I like how you can combine sounds and customise volumes. You should add a manifest.json and make it a PWA so people can add to their homescreen with a customised app icon. Ideal for an app like this i’d say.

I have it saved and will use it again.

Also… whatever way I’ve configured it, it sounds like a boards of Canada track :)

matteason
1 replies
1d22h

This is actually in testing at the moment! I'd love to hear any feedback you have if you fancy testing it out, it's installable from https://test.ambiph.one

spacec0wb0y
0 replies
1d21h

Nice, yep it’s working well now for me on iOS, i added it via chrome, can see the new icon and it’s searchable among my apps.

rrr_oh_man
2 replies
1d1h

Wow, amazing! I absolutely LOVE the gamma waves. Best I've heard, ever. Immediate relaxation. Thank you for all the hard work!

Support this guy, people: https://ko-fi.com/matteason

matteason
1 replies
1d1h

Thank you! And in case anyone is suspicious I promise this isn't my alt :)

Glad the gamma worked for you. I'd never really used binaural beats before but there seem to be a lot of things claiming to be binaural beats (especially on YouTube) that are actually just relaxing music? So I made them from scratch to make sure they're accurate

rrr_oh_man
0 replies
10h17m

That’s exactly why I like your implementation of binaurals so much: no nonsense

rngname22
2 replies
1d23h
dgrcode
1 replies
1d22h

Was going to mention this site. One nice thing it has that could be useful for this app is to have the ability to save a preset and load it in the future. I found it quite useful in mynoise.net

matteason
0 replies
1d22h

This is in development at the moment and very close to being launched - watch this space

halfdaft
2 replies
1d23h

This is the best version of this kind of thing, thanks! I like how a sound fades in over a second or two when you enable it, it might be nice if it also faded out when you disable it. Especially for when you're sound 'DJing' to find the right mix.

matteason
1 replies
1d23h

Thank you! I had wanted to do that but it's marginally trickier than fading in - I agree it would be a much nicer experience than a harsh cut-off though, I'll look into it

halfdaft
0 replies
1d22h

I had guessed it might be something like this, and that of course you'd have wanted this! Will definitely use this lots, thanks again

WarOnPrivacy
2 replies
1d22h

Me:Tinnitus. Site:I like it. Rain does the job.

matteason
1 replies
1d22h

Ha, I'm building up a nice little following of tinnitus-havers. Glad it works for you!

WarOnPrivacy
0 replies
1d17h

You now have the worlds worst collection. Congrats on owning that.

Modified3019
2 replies
1d22h

Neat.

If you are looking for additional things to add, those with tinnitus are likely to have suggestions.

I had a scare with tinnitus several weeks ago, where it suddenly became very apparent for a few days before subsiding to a point where I don’t notice it unless I specifically listen for it. This had me desperately searching for noise generators so I could get to sleep.

“Grey” and “pink” noise, and some kinds of cricket noise seemed to be most suitable for masking my type (which is very similar to the high pitch sound an old analog tv makes when it’s on). Heavy rain is also good, but it’s hard to find something that is suitable because most have some additional water splashing and gurgling, which triggers my misophonia.

matteason
1 replies
1d22h

I have actually had some lovely feedback from people who have said it's helped with their tinnitus (amongst them, unexpectedly, X-Press 2 of 90s dance music fame, as well as lots of other DJs)

It's definitely going to vary from person to person so if anyone else has any suggestions of the types of noise that might help them I'm all ears. I'm also thinking of adding more controls to individual sounds so you might be able to control, for example, the exact pitch of the 'bass rumble' sound, which may help people zero in on the frequency that helps mask their tinnitus

Modified3019
0 replies
1d20h

Now that I'm on my desktop, here's a better list of my favorites

Some kind of 9800Hz statis/hiss, reminiscent of crickets. Masks my tinnitus perfectly and doesn't seem to trigger excessive attention. Has a very quick intro bit, but not talking after: https://www.youtube.com/watch?v=2I-20-jKVF0

"Grey" noise, whatever that's supposed to mean. A low hum/rumble similar to ocean waves but more constant. Also has a hiss added. Very non-intrusive: https://www.youtube.com/watch?v=HSQ_gW7iVis

"Shimmer", very reminiscent of crickets but much smoother and without all the little peaks that would normally activate my attention: https://www.youtube.com/watch?v=Ke2BopotSIU

zdwolfe
1 replies
1d17h

This is perfect. I've tried many noise apps in the past and I'll be using this for a long time I'm sure.

Feature request: Deep-links so I can share or bookmark a 'preset'.

matteason
0 replies
1d17h

Coming very soon alongside saved mixes!

whycome
1 replies
1d16h

Wow this is beautifully done for mobile. Gorgeous design/brand. Brilliantly simple UX. Well done. Best site I've seen all year.

matteason
0 replies
1d10h

Thank you! I'm glad you like the design, I wasn't sure how it would go down

tpei
1 replies
1d23h

Really nice!

matteason
0 replies
1d23h

Thank you!

sidkris
1 replies
1d19h

Really good. Love the clean design. Would be nice if you upgrade it to a PWA

matteason
0 replies
1d18h

The test version at https://test.ambiph.one is a PWA if you want to try it!

password4321
1 replies
1d17h
bbkane
0 replies
1d12h

Just downloaded it, thank you!

nullandvoid
1 replies
1d9h

Great collection of sounds for a release!

Couple of suggestions I'd need before using properly:

- Reset button

- Save to URL so I can quickly reload with same presets

matteason
0 replies
1d9h

Thanks! Both in the works now and nearly ready to go

mcbishop
1 replies
2d

Simple and clean, thank you!

matteason
0 replies
1d23h

Thanks!

mattgreenrocks
1 replies
1d23h

Love it! Need to try it for my next work session.

What'd you make it with?

matteason
0 replies
1d23h

Thanks! It's built in Vue 3, UI is all built from scratch.

The sounds are FLAC files, which is the only compressed format which loops seamlessly across all browsers. Sound files are hosted in an S3 bucket, which is behind Cloudflare (free) to minimise S3 egress costs, so thankfully it doesn't cost much to run at all.

The sounds are all permissively licensed and mainly sourced from freesound.org and freemusicarchive.org - I'm hugely grateful to everyone who shared such high-quality sounds and music for free. There's a list of credits at https://ambiph.one/acknowledgements

fowl2
1 replies
1d12h

Would be really nice if there was some sort of intermediate state / loading indicator, as there a bit of a delay when clicking each option and it's a little unsettling trying to work out what's not working.

matteason
0 replies
1d10h

There is but it only shows after about a second so that it doesn't flash up unnecessarily if the sound loads quickly

entropie
1 replies
1d23h

This is really cool.

Can we maybe have apollo mission chatter?

matteason
0 replies
1d23h

Yes great idea!

Coincidentally I'm also building a live ISS tracker which embeds NASA's live camera stream [0]. Sometimes I have Ambiphone and the ISS tracker running at the same time and it's nice when the ISS chatter pops up, so I think the Apollo recordings would work really well.

[0] https://www.youtube.com/watch?v=P9C25Un7xaM

cubefox
1 replies
1d23h

This is great! (One thing I noticed is that at the default volume, the "heavy rain" is much louder than the "thunder". It would arguably be more realistic if they were similar in volume.)

matteason
0 replies
1d23h

Good point, I'll get this cleaned up

chopete3
1 replies
1d22h

Beautiful interface.

I played Kirk Osamayo- Realization to test it and it put me into a 5 minutes of refreshing nap.

matteason
0 replies
1d22h

You're welcome or I'm sorry, depending on where you are

asplake
1 replies
1d23h

Please tell me that ‘ambiphone’ rhymes with ‘antiphone’ as my music teacher said it, rhyming also with ‘catastrophe’ or ‘Penelope’

matteason
0 replies
1d23h

Ha! I've always said am-BEE-fone but am-BIH-fon-EE is now the official alternative pronounciation

abroadwin
1 replies
1d23h

The ticking clock being an actual clock is a nice touch.

matteason
0 replies
1d22h

Thanks, you're the first to spot that!

Teleoflexuous
1 replies
1d22h

I've been working on white noise app for a bit, but with a slightly different focus. While it's maintaining the same core points (limited bullshit, hopefully clear interface, sound staying on with phone screen being off) it addresses problem I constantly found myself having with every app: if I want to switch anything, I have to go back to the webpage/app and there goes some of my focus. Link: https://stimulantnoi.se/

So I made an app focused (hehe.) on ease of switching between noise intensity. There's a long explanation why it's important if you want one (https://incentiveassemblage.substack.com/p/why-is-nobody-ser...), but if you're the kind of nerd who knows about 'flow state' and 'Yerkes-Dodson law', you pretty much got everything covered. The core point is: if intensity of your main activity is changing, your background noise should too, so that you maintain the same total level of arousal. Most likely double so for ADD people.

My current solution is to use media buttons (forward/backward) to control intensity. It took much more work than you'd expect to get media interface to do this without breaking currently playing sounds. In general anything that isn't 'Play this sound' works much worse than one would anticipate with how prevalent media is on the internet - I see ambiphone does the same thing with playing sounds separately, but you saved yourself from managing media interface, so I can't quite tell how much pain exactly you have experienced with this.

matteason
0 replies
1d22h

That's really interesting, I'll check yours out.

Yeah it has been painful. It took a lot of trial and error to get it working consistently across browsers, from absolute basics like getting gapless looping audio working consistently across browsers to maintaining playback while the screen's off to iOS treating background audio differently in PWAs vs Safari. I've managed to get it in a fairly hack-free state now but I am definitely worried about browsers shifting underneath me and breaking things in the future. Best of luck with your app too!

DreamGen
1 replies
1d23h

Very clean! By the way, I find the volume sliders a bit tricky to use, as it's way too easy to accidentally toggle the sound instead of just moving the slider.

matteason
0 replies
1d23h

Oh this is great feedback, thanks. I'll look at putting a deadzone around the volume slider so it's harder to mix them up

webwanderings
0 replies
1d23h

Winner. Anything no-nonsense, now a days in this world, is a winner! Thank you!

t09i209ba893
0 replies
1d21h

This is quite cool, would you be open to making the source available? I'm afraid of such things disappearing in future years/decades and always prefer to be able to host a private mirror.

stevenking86
0 replies
1d23h

The fact that we can put these things over top of each other is awesome.

scns
0 replies
1d22h

If you want to block out distractions, without damaging your ability to perceive high frequencies, use brown noise.

poulpy123
0 replies
1d21h

It's very nice. I'm surprised at the inclusion of some of sounds that I consider irritating though. It never occurred to me that some people could find them relaxing or helping to improve concentration

maxiwer
0 replies
1d13h

That's the best app on terms of combining ambient sounds! Well done!

matteason
0 replies
1d22h

One thing I forgot to mention - I'm going to start sending out email updates soon so if anyone would like to keep up to date on new features and sounds please fill in this form: https://forms.gle/D1BxTx21QUHdpBp17 (put any old nonsense in the feedback field if you don't have any feedback)

jimbobimbo
0 replies
1d17h

This is really good! Thank you for sharing!

fallinditch
0 replies
16h22m

This is great, nicely done. I like the inclusion of the shipping forecast, it would awesome to include forecasts read by Kathy Clugston and Zeb Soanes. IMO these 2 presenters elevated the shipping forecast to an art form, their enunciation is beautiful. For examples:

Kathy Clugston: https://youtu.be/PJQJ61abfR0

Zeb Soanes: https://youtu.be/_qt6pECdxg8

ddgflorida
0 replies
1d1h

I like the UI and the ease of use.

ck2
0 replies
1d23h

I've been looking for the old "sleep genius baby" app for months, not in any archive.

https://spinoff.nasa.gov/Spinoff2015/hm_2.html

https://www.deseret.com/2013/7/1/20521855/about-utah-this-ap...

busfahrer
0 replies
1d23h

Despite the unappealing name, I've found brown noise the best noise to study with.

Also, didn't expect to see number stations pop up in there, nice surprise.

Nux
0 replies
1d10h

I play a very lengthy white noise mp3 in VLC for my (baby) needs. Just works in all situations.

NickC25
0 replies
1d22h

Cool! I put the ScotRail Beats on for a good 30 minutes, no complaints here. Great job.

MollyRealized
0 replies
17h49m

I wanted to make something beautiful and easy-to-use, without logins or ads or in-app purchases or any of the other stuff a lot of them have.

mynoise.net

L_226
0 replies
1d9h

Nice, I actually heard you speak about it on the podcast last weekend and have been using it the past few days! Happy to see you've added binaural beats :)

KenArrari
0 replies
1d3h

Thanks I've wanted something like this for a long time.

No idea why all of them are subscriptions or have tons of ads and such.

99catmaster
0 replies
2d

Pretty cool, I personally prefer the sound selections on Forest, though.