2 lines
9.8 KiB
JavaScript
2 lines
9.8 KiB
JavaScript
"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[628],{9427:(e,t,a)=>{a.d(t,{J:()=>c});var s=a(4017),r=a(17833),i=a(61902),n=a(92304),o=a(63324);const g=r("music-metadata:parser:ogg:vorbis1");class h extends((0,o.fO)("Vorbis")){}class c{constructor(e,t){this.pageSegments=[],this.metadata=e,this.options=t}async parsePage(e,t){if(e.headerType.firstPage)this.parseFirstPage(e,t);else{if(e.headerType.continued){if(0===this.pageSegments.length)throw new h("Cannot continue on previous page");this.pageSegments.push(t)}if(e.headerType.lastPage||!e.headerType.continued){if(this.pageSegments.length>0){const e=c.mergeUint8Arrays(this.pageSegments);await this.parseFullPage(e)}this.pageSegments=e.headerType.lastPage?[]:[t]}}e.headerType.lastPage&&this.calculateDuration(e)}static mergeUint8Arrays(e){const t=e.reduce((e,t)=>e+t.length,0),a=new Uint8Array(t);return e.forEach((e,t,s)=>{const r=s.slice(0,t).reduce((e,t)=>e+t.length,0);a.set(e,r)}),a}async flush(){await this.parseFullPage(c.mergeUint8Arrays(this.pageSegments))}async parseUserComment(e,t){const a=new i.Y(e,t).parseUserComment();return await this.addTag(a.key,a.value),a.len}async addTag(e,t){if("METADATA_BLOCK_PICTURE"===e&&"string"==typeof t){if(this.options.skipCovers)return void g("Ignore picture");t=n.xu.fromBase64(t),g(`Push picture: id=${e}, format=${t.format}`)}else g(`Push tag: id=${e}, value=${t}`);await this.metadata.addTag("vorbis",e,t)}calculateDuration(e){this.metadata.format.sampleRate&&e.absoluteGranulePosition>=0&&(this.metadata.setFormat("numberOfSamples",e.absoluteGranulePosition),this.metadata.setFormat("duration",e.absoluteGranulePosition/this.metadata.format.sampleRate))}parseFirstPage(e,t){this.metadata.setFormat("codec","Vorbis I"),g("Parse first page");const a=n.Z.get(t,0);if("vorbis"!==a.vorbis)throw new h("Metadata does not look like Vorbis");if(1!==a.packetType)throw new h("First Ogg page should be type 1: the identification header");{const e=n.Sl.get(t,n.Z.len);this.metadata.setFormat("sampleRate",e.sampleRate),this.metadata.setFormat("bitrate",e.bitrateNominal),this.metadata.setFormat("numberOfChannels",e.channelMode),g("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s",e.sampleRate,e.bitrateNominal,e.channelMode)}}async parseFullPage(e){const t=n.Z.get(e,0);if(g("Parse full page: type=%s, byteLength=%s",t.packetType,e.byteLength),3===t.packetType)return this.parseUserCommentList(e,n.Z.len)}async parseUserCommentList(e,t){const a=s.UINT32_LE.get(e,t);t+=4,t+=a;let r=s.UINT32_LE.get(e,t);for(t+=4;r-- >0;)t+=await this.parseUserComment(e,t)}}},30628:(e,t,a)=>{a.r(t),a.d(t,{OggContentError:()=>b,OggParser:()=>w,SegmentTable:()=>N});var s=a(4017),r=a(10718),i=a(17833),n=a(56185),o=a(5031),g=a(74604),h=a(9427),c=a(63324);class m extends((0,c.fO)("Opus")){}class d{constructor(e){if(e<19)throw new m("ID-header-page 0 should be at least 19 bytes long");this.len=e}get(e,t){return{magicSignature:new s.StringType(8,"ascii").get(e,t+0),version:s.UINT8.get(e,t+8),channelCount:s.UINT8.get(e,t+9),preSkip:s.UINT16_LE.get(e,t+10),inputSampleRate:s.UINT32_LE.get(e,t+12),outputGain:s.UINT16_LE.get(e,t+16),channelMapping:s.UINT8.get(e,t+18)}}}class p extends h.J{constructor(e,t,a){super(e,t),this.idHeader=null,this.lastPos=-1,this.tokenizer=a}parseFirstPage(e,t){if(this.metadata.setFormat("codec","Opus"),this.idHeader=new d(t.length).get(t,0),"OpusHead"!==this.idHeader.magicSignature)throw new m("Illegal ogg/Opus magic-signature");this.metadata.setFormat("sampleRate",this.idHeader.inputSampleRate),this.metadata.setFormat("numberOfChannels",this.idHeader.channelCount)}async parseFullPage(e){"OpusTags"===new s.StringType(8,"ascii").get(e,0)&&(await this.parseUserCommentList(e,8),this.lastPos=this.tokenizer.position-e.length)}calculateDuration(e){if(this.metadata.format.sampleRate&&e.absoluteGranulePosition>=0){const t=e.absoluteGranulePosition-this.idHeader.preSkip;if(this.metadata.setFormat("numberOfSamples",t),this.metadata.setFormat("duration",t/48e3),-1!==this.lastPos&&this.tokenizer.fileInfo.size&&this.metadata.format.duration){const e=this.tokenizer.fileInfo.size-this.lastPos;this.metadata.setFormat("bitrate",8*e/this.metadata.format.duration)}}}}const l=i("music-metadata:parser:ogg:speex");class u extends h.J{constructor(e,t,a){super(e,t),this.tokenizer=a}parseFirstPage(e,t){l("First Ogg/Speex page");const a=(r=t,i=0,{speex:new s.StringType(8,"ascii").get(r,i+0),version:n.qW(new s.StringType(20,"ascii").get(r,i+8)),version_id:s.INT32_LE.get(r,i+28),header_size:s.INT32_LE.get(r,i+32),rate:s.INT32_LE.get(r,i+36),mode:s.INT32_LE.get(r,i+40),mode_bitstream_version:s.INT32_LE.get(r,i+44),nb_channels:s.INT32_LE.get(r,i+48),bitrate:s.INT32_LE.get(r,i+52),frame_size:s.INT32_LE.get(r,i+56),vbr:s.INT32_LE.get(r,i+60),frames_per_packet:s.INT32_LE.get(r,i+64),extra_headers:s.INT32_LE.get(r,i+68),reserved1:s.INT32_LE.get(r,i+72),reserved2:s.INT32_LE.get(r,i+76)});var r,i;this.metadata.setFormat("codec",`Speex ${a.version}`),this.metadata.setFormat("numberOfChannels",a.nb_channels),this.metadata.setFormat("sampleRate",a.rate),-1!==a.bitrate&&this.metadata.setFormat("bitrate",a.bitrate)}}const f=i("music-metadata:parser:ogg:theora");class T{constructor(e,t,a){this.metadata=e,this.tokenizer=a}async parsePage(e,t){e.headerType.firstPage&&await this.parseFirstPage(e,t)}async flush(){f("flush")}calculateDuration(e){f("duration calculation not implemented")}async parseFirstPage(e,t){f("First Ogg/Theora page"),this.metadata.setFormat("codec","Theora");const a=(r=t,i=0,{id:new s.StringType(7,"ascii").get(r,i),vmaj:s.UINT8.get(r,i+7),vmin:s.UINT8.get(r,i+8),vrev:s.UINT8.get(r,i+9),vmbw:s.UINT16_BE.get(r,i+10),vmbh:s.UINT16_BE.get(r,i+17),nombr:s.UINT24_BE.get(r,i+37),nqual:s.UINT8.get(r,i+40)});var r,i;this.metadata.setFormat("bitrate",a.nombr)}}class b extends((0,c.fO)("Ogg")){}const I=i("music-metadata:parser:ogg");class N{static sum(e,t,a){const s=new DataView(e.buffer,0);let r=0;for(let e=t;e<t+a;++e)r+=s.getUint8(e);return r}constructor(e){this.len=e.page_segments}get(e,t){return{totalPageSize:N.sum(e,t,this.len)}}}class w extends g.s{constructor(){super(...arguments),this.header=null,this.pageNumber=0,this.pageConsumer=null}async parse(){I("pos=%s, parsePage()",this.tokenizer.position);try{let e;do{if(e=await this.tokenizer.readToken(w.Header),"OggS"!==e.capturePattern)throw new b("Invalid Ogg capture pattern");this.metadata.setFormat("container","Ogg"),this.header=e,this.pageNumber=e.pageSequenceNo,I("page#=%s, Ogg.id=%s",e.pageSequenceNo,e.capturePattern);const t=await this.tokenizer.readToken(new N(e));I("totalPageSize=%s",t.totalPageSize);const a=await this.tokenizer.readToken(new s.Uint8ArrayType(t.totalPageSize));if(I("firstPage=%s, lastPage=%s, continued=%s",e.headerType.firstPage,e.headerType.lastPage,e.headerType.continued),e.headerType.firstPage){const e=new TextDecoder("ascii").decode(a.subarray(0,7));switch(e){case"vorbis":I("Set page consumer to Ogg/Vorbis"),this.pageConsumer=new h.J(this.metadata,this.options);break;case"OpusHea":I("Set page consumer to Ogg/Opus"),this.pageConsumer=new p(this.metadata,this.options,this.tokenizer);break;case"Speex ":I("Set page consumer to Ogg/Speex"),this.pageConsumer=new u(this.metadata,this.options,this.tokenizer);break;case"fishead":case"\0theora":I("Set page consumer to Ogg/Theora"),this.pageConsumer=new T(this.metadata,this.options,this.tokenizer);break;default:throw new b(`gg audio-codec not recognized (id=${e})`)}}await this.pageConsumer.parsePage(e,a)}while(!e.headerType.lastPage)}catch(e){if(!(e instanceof Error))throw e;e instanceof r.d1?(this.metadata.addWarning("Last OGG-page is not marked with last-page flag"),I("End-of-stream"),this.metadata.addWarning("Last OGG-page is not marked with last-page flag"),this.header&&this.pageConsumer.calculateDuration(this.header)):e.message.startsWith("FourCC")&&this.pageNumber>0&&(this.metadata.addWarning("Invalid FourCC ID, maybe last OGG-page is not marked with last-page flag"),await this.pageConsumer.flush())}}}w.Header={len:27,get:(e,t)=>({capturePattern:o.e.get(e,t),version:s.UINT8.get(e,t+4),headerType:{continued:n.mh(e,t+5,0),firstPage:n.mh(e,t+5,1),lastPage:n.mh(e,t+5,2)},absoluteGranulePosition:Number(s.UINT64_LE.get(e,t+6)),streamSerialNumber:s.UINT32_LE.get(e,t+14),pageSequenceNo:s.UINT32_LE.get(e,t+18),pageChecksum:s.UINT32_LE.get(e,t+22),page_segments:s.UINT8.get(e,t+26)})}},61902:(e,t,a)=>{a.d(t,{Y:()=>r});var s=a(4017);class r{constructor(e,t){this.data=e,this.offset=t}readInt32(){const e=s.UINT32_LE.get(this.data,this.offset);return this.offset+=4,e}readStringUtf8(){const e=this.readInt32(),t=new TextDecoder("utf-8").decode(this.data.subarray(this.offset,this.offset+e));return this.offset+=e,t}parseUserComment(){const e=this.offset,t=this.readStringUtf8(),a=t.indexOf("=");return{key:t.slice(0,a).toUpperCase(),value:t.slice(a+1),len:this.offset-e}}}},92304:(e,t,a)=>{a.d(t,{Sl:()=>o,Z:()=>n,xu:()=>i});var s=a(4017),r=a(47675);class i{static fromBase64(e){return i.fromBuffer(Uint8Array.from(atob(e),e=>e.charCodeAt(0)))}static fromBuffer(e){return new i(e.length).get(e,0)}constructor(e){this.len=e}get(e,t){const a=r.n5[s.UINT32_BE.get(e,t)];t+=4;const i=s.UINT32_BE.get(e,t);t+=4;const n=new s.StringType(i,"utf-8").get(e,t);t+=i;const o=s.UINT32_BE.get(e,t);t+=4;const g=new s.StringType(o,"utf-8").get(e,t);t+=o;const h=s.UINT32_BE.get(e,t);t+=4;const c=s.UINT32_BE.get(e,t);t+=4;const m=s.UINT32_BE.get(e,t);t+=4;const d=s.UINT32_BE.get(e,t);t+=4;const p=s.UINT32_BE.get(e,t);return t+=4,{type:a,format:n,description:g,width:h,height:c,colour_depth:m,indexed_color:d,data:Uint8Array.from(e.slice(t,t+p))}}}const n={len:7,get:(e,t)=>({packetType:s.UINT8.get(e,t),vorbis:new s.StringType(6,"ascii").get(e,t+1)})},o={len:23,get:(e,t)=>({version:s.UINT32_LE.get(e,t+0),channelMode:s.UINT8.get(e,t+4),sampleRate:s.UINT32_LE.get(e,t+5),bitrateMax:s.UINT32_LE.get(e,t+9),bitrateNominal:s.UINT32_LE.get(e,t+13),bitrateMin:s.UINT32_LE.get(e,t+17)})}}}]);
|
||
//# sourceMappingURL=628.f193d49d6dc4a615777a.js.map
|