4 ms·
1KB JavaScript Numbers Station
- MobiusHorizons 1y agoCool concept, but doesn’t seem to work on iOS safari
- leeoniya 1y ago> but doesn’t seem to work on iOS safari if i had a nickel...
- thenthenthen 1y agoIsn't every browser on iOS technically Safari under the hood? Although Mozillas discontinued XRViewer app/browser does def expose more functionality
- edent 1y agoI've had feedback that it should work on Firefox for iOS.
- gkbrk 1y agoAlso not working on Brave on Linux for me.
- mg 1y agoNo sound at all and the console shows lots of these messages: 24:4 Uncaught TypeError: Cannot read properties of undefined (reading 'lang') at 24:4:132 Which seems to be this line: m.lang = e[(Math.random() * e.length) | 0]["lang"]; Another observation: You write: m = new SpeechSynthesisUtterance; m.text = "Hello"; speechSynthesis.speak(m); Run that JS and your computer will speak to you! But when I paste those 3 lines into the console, that also does not produce any sound here. I tried in Chromium and Firefox, both on Linux.
- LazarSRB 1y agofunny and creepy
- genewitch 1y agoworks on Firefox, on windows 11. however even when it is working, it's not really like a numbers station. For a start, it needs varying static and clicks. Secondly, numbers stations don't generally say "seven hundred and thirty four", they generally say "seven. three. four." the random words repeated sometimes are a nice touch, though. And i like the idea of grabbing words from an internal list in the way the author did it. I wouldn't have thought of that, probably. some numbers stations that i personally archived: https://soundcloud.com/djoutcold/31-may-2014-170948-19008500-mhz https://soundcloud.com/djoutcold/uvb-76-aug-23-2010-9-32ampst https://nextcloud.projectftm.com/index.php/s/unid-pizza-numbers [0] here's one that sounds like a numbers station but can be argued is not, as the meaning is rather clear (if my memory serves): https://soundcloud.com/djoutcold/sdrsharp-20150825-020508z-4368khz-af [0] i think this one is a joke; this one is the most representative of what numbers stations used to be like, though. Whoever made it really knew what they were doing, even though they used their knowledge to be a bit cheeky. I edited it because the music would blow out your speakers originally. additionally, i know the 19008500-mhz is mislabeled, it should be 19.008500-mhz or instead of "mhz" just "hz"
- edent 1y agoI'd love it if you forked my code and managed to fit a full numbers station into 1024KB.
- genewitch 1y agomy kid wanted it to say point between the groupings, which is the speech engine, so this may sound different depending on your browser: <!DOCTYPE html><html><body><button onclick="f()">Start</button><script> function f(){with(window){ a=new AudioContext;b=a.createBuffer(1,c=2*a.sampleRate,a.sampleRate);d=b.getChannelData(0); for(i=0;i<c;i++)d[i]=(Math.random()*2-1)*.4; e=a.createBufferSource();e.buffer=b;e.loop=1;g=a.createGain();g.gain.value=.05; e.connect(g).connect(a.destination);e.start(); const l=n=>((n.match(/[A-Z]/g)||[]).length==1&&(n[0].match(/[A-Z]/g)||[]).length==1); setInterval(()=>{s=Object.getOwnPropertyNames(globalThis).filter(l).sort(()=>.5-Math.random())[0]; if(Math.random()>.3){ n=String(Math.ceil(Math.random()*1e4).toString().padStart(4,'0')); s=n[0]+'. '+n[1]+'. point. '+n[2]+'. '+n[3]+'.'; } m=new SpeechSynthesisUtterance;m.text=s; v=speechSynthesis.getVoices();m.lang=v[(Math.random()*v.length)|0].lang; m.rate=Math.random();m.pitch=Math.random()*2;speechSynthesis.speak(m);},866); //m.rate=1.7;m.pitch=2;speechSynthesis.speak(m);},866); }}</script></body></html> the comment at the end can be switched with the preceeding line so it sounds like he wanted it to (high pitched and fast, please) <1kb and i got something stuck in my craw about noise so here's one with more accurate noise: <!DOCTYPE html><html><body><button onclick="f()">Start</button><script> function f(){with(window){ a=new AudioContext; g=a.createGain();g.gain.value=.05; h=a.createScriptProcessor(256,1,1);p=0; h.onaudioprocess=e=>{ b=e.outputBuffer.getChannelData(0); for(i=0;i<b.length;i++)b[i]=p+=(Math.random()*2-1)/10; }; h.connect(g).connect(a.destination); const l=n=>((n.match(/[A-Z]/g)||[]).length==1&&(n[0].match(/[A-Z]/g)||[]).length==1); setInterval(()=>{ s=Object.getOwnPropertyNames(globalThis).filter(l).sort(()=>.5-Math.random())[0]; if(Math.random()>.3){ n=String(Math.ceil(Math.random()*1e4).toString().padStart(4,'0')); s=n[0]+'. '+n[1]+'. point. '+n[2]+'. '+n[3]+'.'; } m=new SpeechSynthesisUtterance;m.text=s; v=speechSynthesis.getVoices();m.lang=v[(Math.random()*v.length)|0].lang; m.rate=Math.random();m.pitch=Math.random()*2;speechSynthesis.speak(m); },866); }}</script></body></html> apologies to the HN servers for using 2kb to display these i don't know javascript so apologies if i messed anything up (because it will eventually pop and click which is extremely accurate to numbers station reception but also crashes the page - audio stops.)
- simonw 1y agoThis post inspired me to build (OK, vibe code) this little tool for playing with the speech synthesis browser API: https://tools.simonwillison.net/speech-synthesis https://tools.simonwillison.net/speech-synthesis Commits / prompts: https://github.com/simonw/tools/commits/main/speech-synthesis.html https://github.com/simonw/tools/commits/main/speech-synthesi...
- tantalor 1y agoSomething is wrong with the voice selector. It does not actually change the voice.
- Ahmed785 1y ago[flagged]
- deleted 1y ago[deleted]