UNPKG

@ozdemirburak/morse-code-translator

Version:

Morse code translator helps you convert text to Morse code and vice versa, with the option to play Morse code audio.

3 lines (2 loc) 9 kB
(function(g,C){typeof exports=="object"&&typeof module<"u"?C(exports):typeof define=="function"&&define.amd?define(["exports"],C):(g=typeof globalThis<"u"?globalThis:g||self,C(g.MorseCodeTranslator={}))})(this,(function(g){"use strict";const C={1:{A:"01",B:"1000",C:"1010",D:"100",E:"0",F:"0010",G:"110",H:"0000",I:"00",J:"0111",K:"101",L:"0100",M:"11",N:"10",O:"111",P:"0110",Q:"1101",R:"010",S:"000",T:"1",U:"001",V:"0001",W:"011",X:"1001",Y:"1011",Z:"1100"},2:{0:"11111",1:"01111",2:"00111",3:"00011",4:"00001",5:"00000",6:"10000",7:"11000",8:"11100",9:"11110"},3:{".":"010101",",":"110011","?":"001100","'":"011110","!":"101011","/":"10010","(":"10110",")":"101101","&":"01000",":":"111000",";":"101010","=":"10001","+":"01010","-":"100001",_:"001101",'"':"010010",$:"0001001","@":"011010","¿":"00101","¡":"110001"},4:{Ã:"01101",Á:"01101",Å:"01101",À:"01101",Â:"01101",Ä:"0101",Ą:"0101",Æ:"0101",Ç:"10100",Ć:"10100",Ĉ:"10100",Č:"110",Ð:"00110",È:"01001",Ę:"00100",Ë:"00100",É:"00100",Ê:"10010",Ğ:"11010",Ĝ:"11010",Ĥ:"1111",İ:"01001",Ï:"10011",Ì:"01110",Ĵ:"01110",Ł:"01001",Ń:"11011",Ñ:"11011",Ó:"1110",Ò:"1110",Ö:"1110",Ô:"1110",Ø:"1110",Ś:"0001000",Ş:"01100",Ș:"1111",Š:"1111",Ŝ:"00010",ß:"000000",Þ:"01100",Ü:"0011",Ù:"0011",Ŭ:"0011",Ž:"11001",Ź:"110010",Ż:"11001"},5:{А:"01",Б:"1000",В:"011",Г:"110",Д:"100",Е:"0",Ж:"0001",З:"1100",И:"00",Й:"0111",К:"101",Л:"0100",М:"11",Н:"10",О:"111",П:"0110",Р:"010",С:"000",Т:"1",У:"001",Ф:"0010",Х:"0000",Ц:"1010",Ч:"1110",Ш:"1111",Щ:"1101",Ъ:"11011",Ы:"1011",Ь:"1001",Э:"00100",Ю:"0011",Я:"0101",Ї:"01110",Є:"00100",І:"00",Ґ:"110"},6:{Α:"01",Β:"1000",Γ:"110",Δ:"100",Ε:"0",Ζ:"1100",Η:"0000",Θ:"1010",Ι:"00",Κ:"101",Λ:"0100",Μ:"11",Ν:"10",Ξ:"1001",Ο:"111",Π:"0110",Ρ:"010",Σ:"000",Τ:"1",Υ:"1011",Φ:"0010",Χ:"1111",Ψ:"1101",Ω:"011"},7:{א:"01",ב:"1000",ג:"110",ד:"100",ה:"111",ו:"0",ז:"1100",ח:"0000",ט:"001",י:"00",כ:"101",ל:"0100",מ:"11",נ:"10",ס:"1010",ע:"0111",פ:"0110",צ:"011",ק:"1101",ר:"010",ש:"000",ת:"1"},8:{ا:"01",ب:"1000",ت:"1",ث:"1010",ج:"0111",ح:"0000",خ:"111",د:"100",ذ:"1100",ر:"010",ز:"1110",س:"000",ش:"1111",ص:"1001",ض:"0001",ط:"001",ظ:"1011",ع:"0101",غ:"110",ف:"0010",ق:"1101",ك:"101",ل:"0100",م:"11",ن:"10",ه:"00100",و:"011",ي:"00",ﺀ:"0"},9:{ا:"01",ب:"1000",پ:"0110",ت:"1",ث:"1010",ج:"0111",چ:"1110",ح:"0000",خ:"1001",د:"100",ذ:"0001",ر:"010",ز:"1100",ژ:"110",س:"000",ش:"1111",ص:"0101",ض:"00100",ط:"001",ظ:"1011",ع:"111",غ:"0011",ف:"0010",ق:"111000",ک:"101",گ:"1101",ل:"0100",م:"11",ن:"10",و:"011",ه:"0",ی:"00"},10:{ア:"11011",カ:"0100",サ:"10101",タ:"10",ナ:"010",ハ:"1000",マ:"1001",ヤ:"011",ラ:"000",ワ:"101",イ:"01",キ:"10100",シ:"11010",チ:"0010",ニ:"1010",ヒ:"11001",ミ:"00101",リ:"110",ヰ:"01001",ウ:"001",ク:"0001",ス:"11101",ツ:"0110",ヌ:"0000",フ:"1100",ム:"1",ユ:"10011",ル:"10110",ン:"01010",エ:"10111",ケ:"1011",セ:"01110",テ:"01011",ネ:"1101",ヘ:"0",メ:"10001",レ:"111",ヱ:"01100",オ:"01000",コ:"1111",ソ:"1110",ト:"00100",ノ:"0011",ホ:"100",モ:"10010",ヨ:"11",ロ:"0101",ヲ:"0111","゛":"00","゜":"00110","。":"010100",ー:"01101","、":"010101","(":"101101",")":"010010"},11:{ㄱ:"0100",ㄴ:"0010",ㄷ:"1000",ㄹ:"0001",ㅁ:"11",ㅂ:"011",ㅅ:"110",ㅇ:"101",ㅈ:"0110",ㅊ:"1010",ㅋ:"1001",ㅌ:"1100",ㅍ:"111",ㅎ:"0111",ㅏ:"0",ㅑ:"00",ㅓ:"1",ㅕ:"000",ㅗ:"01",ㅛ:"10",ㅜ:"0000",ㅠ:"010",ㅡ:"100",ㅣ:"001",ㅐ:"1101",ㅔ:"1011"},12:{ก:"110",ข:"1010",ค:"101",ง:"10110",จ:"10010",ฉ:"1111",ช:"1001",ซ:"1100",ญ:"0111",ด:"100",ต:"1",ถ:"10100",ท:"10011",น:"10",บ:"1000",ป:"0110",ผ:"1101",ฝ:"10101",พ:"01100",ฟ:"0010",ม:"11",ย:"1011",ร:"010",ล:"0100",ว:"011",ส:"000",ห:"0000",อ:"10001",ฮ:"11011",ฤ:"01011",ะ:"01000",า:"01","ิ":"00100","ี":"00","ึ":"00110","ื":"0011","ุ":"00101","ู":"1110",เ:"0",แ:"0101",ไ:"01001",โ:"111",ำ:"00010","่":"001","้":"0001","๊":"11000","๋":"01010","ั":"01101","็":"11100","์":"11001",ๆ:"10111",ฯ:"11010"}},P=e=>({...C,0:C[e.priority],1:{...C[1],[e.separator]:e.space}}),M=(e,t)=>{const n={},i=P(e);for(const o in i){n[o]={};const w=i[o];if(w)for(const c in w)n[o][c]=w[c].replace(/0/g,e.dot).replace(/1/g,e.dash)}return t||delete n[0],n},G=e=>{const t={},n=M(e,!0);for(const i in n)for(const o in n[i])typeof t[n[i][o]]>"u"&&(t[n[i][o]]=o);return t},v=(e={})=>({...e,dash:e.dash||"-",dot:e.dot||".",space:e.space||"/",separator:e.separator||" ",invalid:e.invalid||"#",priority:e.priority||1,wpm:e.wpm,unit:e.unit||.08,fwUnit:e.fwUnit||e.unit||.08,volume:e.volume||100,oscillator:{...e.oscillator,type:e.oscillator?.type||"sine",frequency:e.oscillator?.frequency||500,onended:e.oscillator?.onended||null}}),_=44100,U=1,E=16,H=1,j=3,I=1,q=3,F=7,z=50,$=(e,t,n=0)=>{const i=[];let{unit:o,fwUnit:w}=t,c=0;t.wpm&&(o=w=60/(t.wpm*z)),i.push([0,c]);const b=(r,u,a=!0)=>{i.push([r,n+c]),c+=u*(a?o:w)},s=r=>b(t.volume/100,r),m=r=>b(0,r),y=r=>b(0,r,!1);for(let r=0,u=!1;r<=e.length;r++){const a=e[r],f=e[r+1],A=e[r-1];a===t.space?(y(F),u=!1):a===t.dot?(u&&m(I),s(H),u=!0):a===t.dash?(u&&m(I),s(j),u=!0):f!==void 0&&f!==t.space&&A!==void 0&&A!==t.space&&(y(q),u=!1)}return[i,c]},J=(e,t)=>{const n=E/8,i=U*n,o=e*i,w=t.length*n,c=44+w,b=new ArrayBuffer(c),s=new DataView(b),m=(r,u)=>{for(let a=0;a<u.length;a++)s.setUint8(r+a,u.charCodeAt(a))},y=(r,u)=>{for(let a=0;a<u.length;a++,r+=n){const f=Math.max(-1,Math.min(1,u[a])),A=f<0?f*32768:f*32767;s.setInt16(r,A,!0)}};return m(0,"RIFF"),s.setUint32(4,c-8,!0),m(8,"WAVE"),m(12,"fmt "),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,U,!0),s.setUint32(24,e,!0),s.setUint32(28,o,!0),s.setUint16(32,i,!0),s.setUint16(34,E,!0),m(36,"data"),s.setUint32(40,w,!0),y(44,t),s},K=(e,t)=>{const n=window.AudioContext||window.webkitAudioContext,i=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(!n||!i)throw new Error("Web Audio API is not supported in this browser. Please use a modern browser with Web Audio API support.");const o=new n,[w,c]=$(e,t),b=Math.ceil(_*c),s=new i(U,b,_),m=s.createOscillator(),y=s.createGain();m.type=t.oscillator.type,m.frequency.value=t.oscillator.frequency??500,w.forEach(([l,p])=>{y.gain.setValueAtTime(l,p)}),m.connect(y),y.connect(s.destination);let r=null,u=null,a="ready",f=0,A=0,h=null;const T=t.events||{};t.oscillator.onended&&!T.onended&&(T.onended=t.oscillator.onended);const W=new Promise((l,p)=>{m.start(0),s.startRendering(),s.oncomplete=d=>{try{u=d.renderedBuffer,a="ready",T.onready?.(),l()}catch(V){p(V)}},s.addEventListener("error",d=>{p(d)})}),X=()=>{const l=o.createBufferSource();return l.buffer=u,l.connect(o.destination),l.onended=()=>{const p=D();a==="playing"&&p>=c-.01&&(a="stopped",f=0,T.onended?.())},l},B=async()=>{if(await W,o.state==="suspended"&&await o.resume(),a==="playing")return;(!r||r.buffer===null)&&(r=X()),r.start(o.currentTime,f),A=o.currentTime-f,a="playing",T.onstarted?.();const l=(c-f)*1e3;h=window.setTimeout(()=>{a==="playing"&&R()},l)},Y=()=>{a==="playing"&&(h!==null&&(clearTimeout(h),h=null),f=Math.min(o.currentTime-A,c),r&&(r.stop(0),r=null),a="paused",T.onpaused?.())},R=(l=!1)=>{if(h!==null&&(clearTimeout(h),h=null),r){try{r.stop(0)}catch{}r=null}const p=a==="playing";a="stopped",f=0,A=0,p&&T.onstopped?.(),l&&(u=null)},Z=async l=>{const p=a==="playing",d=Math.max(0,Math.min(l,c));if(r){h!==null&&(clearTimeout(h),h=null);try{r.stop(0)}catch{}r=null}f=d,T.onseeked?.(d),p&&(a="paused",await B())},e0=()=>{R(!0),o.state!=="closed"&&o.close()},D=()=>a==="playing"?Math.min(o.currentTime-A,c):f,t0=()=>c,n0=()=>a,k=async()=>{if(await W,!u)throw new Error("Audio buffer not available");const l=J(s.sampleRate,u.getChannelData(0)),p=new Uint8Array(l.byteLength);for(let d=0;d<l.byteLength;d++)p[d]=l.getUint8(d);return new Blob([p],{type:"audio/wav"})},N=async()=>{const l=await k();return URL.createObjectURL(l)};return{play:B,pause:Y,stop:R,seek:Z,dispose:e0,getCurrentTime:D,getTotalTime:t0,getState:n0,getWaveBlob:k,getWaveUrl:N,exportWave:async(l="morse.wav")=>{const p=await N(),d=document.createElement("a");d.href=p,d.target="_blank",d.download=l,d.click()},context:o,oscillator:m,gainNode:y}},S=(e,t)=>{const n=v(t),i=P(n);return[...e.replace(/\s+/g,n.separator).trim().toLocaleUpperCase()].map(o=>{for(const w in i){const c=i[w];if(c&&c[o])return c[o]}return n.invalid}).join(n.separator).replace(/0/g,n.dot).replace(/1/g,n.dash)},O=(e,t)=>{const n=v(t),i=G(n);return e.replace(/\s+/g,n.separator).trim().split(n.separator).map(o=>typeof i[o]<"u"?i[o]:n.invalid).join("")},x=(e,t=!1)=>M(v(e),t),L=(e,t,n)=>{const i=n||S(e,t),o=v(t);return K(i,o)},Q={encode:S,decode:O,characters:x,audio:L};g.audio=L,g.characters=x,g.decode=O,g.default=Q,g.encode=S,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})); //# sourceMappingURL=morse-code-translator.umd.js.map