emerging-ezaudio Releases (3): 0.4.0.0 0xd2dab0fbc9db2e9ba3da65dae724eb41 indexed https://jend.leeeet.dev/files.txt?path=emerging-ezaudio@0.4.0.0 0.3.0.0 0x9137a47f23b329cb0d636ed271d4bfb2 unindexed https://jend.leeeet.dev/files.txt?path=emerging-ezaudio@0.3.0.0 0.2.9.0 0x05eb91b04a37c34a9abe2324661894f5 unindexed https://jend.leeeet.dev/files.txt?path=emerging-ezaudio@0.2.9.0 Definitions (1035, 1 to 100 shown): EmergingEzaudio.Format (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=Format) # signed 16-bit PCM, or IEEE 754 binary32 type Format is Data: S16{} Flt{} EmergingEzaudio.Clip (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=Clip) # one clip. pcm is interleaved. s16 lives in the low 16 bits. type Clip is Data: Clip{hz: U32, nch: U32, fmt: Format, pcm: List<&2, U32>} EmergingEzaudio.s16 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=s16) # signed 16-bit little-endian PCM def s16() -> Format: EmergingEzaudio.f32 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=f32) # IEEE 754 binary32, stored as its bits def f32() -> Format: EmergingEzaudio.kind.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=kind.of) def kind.of(fmt: Format) -> U32: EmergingEzaudio.fmt.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=fmt.of) def fmt.of(+kind: U32) -> Format: EmergingEzaudio.wav.clip (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=wav.clip) def wav.clip(w: Wav.Wav) -> Clip: EmergingEzaudio.fmt.same (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=fmt.same) def fmt.same(aa: Format, bb: Format) -> Bool: EmergingEzaudio.clip (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=clip) # a clip from its rate, channel count, format, and interleaved frames def clip(+rate: U32, +channels: U32, format: Format, frames: List<&2, U32>) -> Clip: EmergingEzaudio.rate (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=rate) # the sample rate, in hertz def rate(c: Clip) -> U32: EmergingEzaudio.channels (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=channels) # how many channels are interleaved def channels(c: Clip) -> U32: EmergingEzaudio.format (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=format) # s16 or f32 def format(c: Clip) -> Format: EmergingEzaudio.frames (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=frames) # the interleaved frames def frames(c: Clip) -> List<&2, U32>: EmergingEzaudio.count.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=count.of) def count.of(+channels: U32, +nsamples: U32) -> U32: EmergingEzaudio.count (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=count) # how many frames. zero channels count as none. def count(c: Clip) -> U32: EmergingEzaudio.fill (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=fill) # one sample, repeated across nframes frames def fill(+rate: U32, +channels: U32, format: Format, +sample: U32, +nframes: U32) -> Clip: EmergingEzaudio.ls.drop (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=ls.drop) def ls.drop(hop: Nat, xs: List<&2, U32>) -> List<&2, U32>: EmergingEzaudio.ls.take (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=ls.take) def ls.take(hop: Nat, xs: List<&2, U32>, acc: List<&2, U32>) -> List<&2, U32>: EmergingEzaudio.ls.slice (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=ls.slice) def ls.slice(xs: List<&2, U32>, +dropn: U32, +taken: U32) -> List<&2, U32>: EmergingEzaudio.trim.go (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=trim.go) def trim.go( ok: Bool, +rate: U32, +channels: U32, format: Format, frames: List<&2, U32>, +start: U32, +nframes: U32 ) -> Maybe<&2, Clip>: EmergingEzaudio.trim (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=trim) # frames [start, start + nframes). none when that span passes the end. def trim(c: Clip, +start: U32, +nframes: U32) -> Maybe<&2, Clip>: EmergingEzaudio.eq.all (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=eq.all) def eq.all(ar: Bool, ac: Bool, af: Bool) -> Bool: EmergingEzaudio.concat.go (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=concat.go) def concat.go( ok: Bool, +rate: U32, +channels: U32, format: Format, left: List<&2, U32>, right: List<&2, U32> ) -> Maybe<&2, Clip>: EmergingEzaudio.concat.pair (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=concat.pair) def concat.pair(+rate: U32, +channels: U32, +format: Format, left: List<&2, U32>, other: Clip) -> Maybe<&2, Clip>: EmergingEzaudio.concat (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=concat) # the frames of both clips, or none when rate, channels, or format differ def concat(left: Clip, right: Clip) -> Maybe<&2, Clip>: EmergingEzaudio.list.empty (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=list.empty) def list.empty(xs: List<&2, U32>) -> Bool: EmergingEzaudio.wav.bytes (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=wav.bytes) def wav.bytes(empty: Bool, +rate: U32, +channels: U32, +kind: U32, frames: List<&2, U32>) -> Maybe<&2, List<&2, U32>>: EmergingEzaudio.wav.parsed (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=wav.parsed) def wav.parsed(got: Maybe<&2, Wav.Wav>) -> Maybe<&2, Clip>: EmergingEzaudio.decode_wav (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=decode_wav) # a RIFF WAVE clip, or none when the bytes are not mono or stereo PCM or float def decode_wav(xs: List<&2, U32>) -> Maybe<&2, Clip>: EmergingEzaudio.encode_wav (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=encode_wav) # a RIFF WAVE file. none when there are no frames, or the rate or channels are unfit. def encode_wav(c: Clip) -> Maybe<&2, List<&2, U32>>: EmergingEzaudio.mp3.clip (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=mp3.clip) def mp3.clip(p: Mp3.Pcm) -> Clip: EmergingEzaudio.mp3.parsed (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=mp3.parsed) def mp3.parsed(got: Maybe<&2, Mp3.Pcm>) -> Maybe<&2, Clip>: EmergingEzaudio.decode_mp3 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=decode_mp3) # MPEG-1 Layer III to f32 frames. Layer I, Layer II, joint stereo, and a CRC are none. def decode_mp3(xs: List<&2, U32>) -> Maybe<&2, Clip>: EmergingEzaudio.encode_mp3 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/main.bend&name=encode_mp3) # MPEG-1 Layer III at 320 kbit/s. rates are 32000, 44100, and 48000. none when unfit or empty. def encode_mp3(c: Clip) -> Maybe<&2, List<&2, U32>>: Mp3.Bit (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=Bit) # one pulled bit, or a field, beside the reader type Bit is Data: Bit{xs: List<&2, U32>, buf: U32, n: U32, v: U32} Mp3.Br (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=Br) # bitstream: leftover bytes, the current byte, how many low bits remain type Br is Data: Br{xs: List<&2, U32>, buf: U32, n: U32} Mp3.Acc (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=Acc) # a field just read type Acc is Data: Acc{br: Br, v: U32} Mp3.hdr.layer (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.layer) # 'MPEG-1 Layer III' is layer code 1 in the header def hdr.layer(xs: List<&2, U32>) -> U32: Mp3.hdr.mpeg1 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.mpeg1) # 1 when the ID bit selects MPEG-1 def hdr.mpeg1(xs: List<&2, U32>) -> U32: Mp3.hdr.index (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.index) # bitrate index, 0 and 15 are not a frame def hdr.index(xs: List<&2, U32>) -> U32: Mp3.hdr.sr (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.sr) # sampling-frequency index. 3 is reserved. def hdr.sr(xs: List<&2, U32>) -> U32: Mp3.hdr.mode (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.mode) # channel mode. 3 is mono. def hdr.mode(xs: List<&2, U32>) -> U32: Mp3.hdr.pad (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.pad) # padding bit def hdr.pad(xs: List<&2, U32>) -> U32: Mp3.hdr.crc (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.crc) # protection bit 0 means a 16-bit CRC follows the header def hdr.crc(xs: List<&2, U32>) -> U32: Mp3.hdr.sync (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.sync) # 1 when the first two bytes carry the 11-bit sync 0xFFE def hdr.sync(xs: List<&2, U32>) -> Bool: Mp3.kbps.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=kbps.of) def kbps.of(+ix: U32) -> U32: Mp3.hdr.kbps (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.kbps) # ISO/IEC 11172-3 MPEG-1 Layer III bitrate, kilobits per second def hdr.kbps(xs: List<&2, U32>) -> U32: Mp3.hz.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hz.of) def hz.of(+ix: U32) -> U32: Mp3.hdr.hz (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.hz) # ISO/IEC 11172-3 sampling frequency, hertz def hdr.hz(xs: List<&2, U32>) -> U32: Mp3.ch.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=ch.of) # 1 or 2 channels. mode 3 is single channel. def ch.of(+mode: U32) -> U32: Mp3.hdr.ch (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=hdr.ch) def hdr.ch(xs: List<&2, U32>) -> U32: Mp3.l3.and (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=l3.and) def l3.and(a: Bool, b: Bool) -> Bool: Mp3.l3.ok (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=l3.ok) def l3.ok(+xs: List<&2, U32>) -> Bool: Mp3.frame.n (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=frame.n) # frame length in bytes: 1152 * kbps * 125 / hz, plus the pad bit def frame.n(+kb: U32, +hz: U32, +pad: U32) -> U32: Mp3.frame.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=frame.of) def frame.of(+xs: List<&2, U32>) -> U32: Mp3.br.zero (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.zero) def br.zero(xs: List<&2, U32>) -> Br: Mp3.br.fill (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.fill) def br.fill(xs: List<&2, U32>) -> Br: Mp3.br.norm (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.norm) def br.norm(br: Br) -> Br: Mp3.bit.at (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=bit.at) def bit.at(z: Bool, xs: List<&2, U32>, +buf: U32, +n: U32) -> Bit: Mp3.br.one.at (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.one.at) def br.one.at(br: Br) -> Bit: Mp3.br.one (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.one) def br.one(br: Br) -> Bit: Mp3.br.shift (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.shift) def br.shift(b: Bit, +acc: U32) -> Acc: Mp3.br.next (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.next) def br.next(ac: Acc) -> Acc: Mp3.br.get (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.get) def br.get(hop: Nat, ac: Acc) -> Acc: Mp3.br.take (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=br.take) def br.take(br: Br, +k: U32) -> Acc: Mp3.acc.br (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=acc.br) def acc.br(ac: Acc) -> Br: Mp3.acc.v (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=acc.v) def acc.v(ac: Acc) -> U32: Mp3.side.n (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=side.n) # side-info length in bytes. MPEG-1 mono is 17, stereo is 32. def side.n(+ch: U32) -> U32: Mp3.sr.row (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=sr.row) def sr.row(+hz: U32) -> U32: Mp3.enc.b2 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.b2) # encoder header at 320 kbit/s, original bit set, no CRC, no pad def enc.b2(+hz: U32) -> U32: Mp3.enc.srbits (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.srbits) def enc.srbits(+hz: U32) -> U32: Mp3.enc.b3 (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.b3) def enc.b3(+ch: U32) -> U32: Mp3.enc.hdr (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.hdr) def enc.hdr(+hz: U32, +ch: U32) -> List<&2, U32>: Mp3.enc.rate (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.rate) def enc.rate(+hz: U32) -> Bool: Mp3.enc.ch (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=enc.ch) def enc.ch(+ch: U32) -> Bool: Mp3.kind.ok (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=kind.ok) def kind.ok(+k: U32) -> Bool: Mp3.zeros.rest (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=zeros.rest) def zeros.rest(xs: List<&2, U32>) -> Bool: Mp3.frames.zero (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=frames.zero) # an empty sample list is not silence. Silence is one or more zero samples. def frames.zero(xs: List<&2, U32>) -> Bool: Mp3.frames.empty (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=frames.empty) def frames.empty(xs: List<&2, U32>) -> Bool: Mp3.ls.cat (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=ls.cat) def ls.cat(xs: List<&2, U32>, ys: List<&2, U32>) -> List<&2, U32>: Mp3.silence.of (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=silence.of) # one silent 320 kbit/s frame. big_values and part2_3_length are zero. def silence.of(+hz: U32, +ch: U32) -> List<&2, U32>: Mp3.silence.ok (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=silence.ok) def silence.ok(ok: Bool, +hz: U32, +ch: U32) -> Maybe<&2, List<&2, U32>>: Mp3.mp3.live (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.live) # non-zero PCM goes through the analysis filterbank, MDCT, and Huffman encoder. def mp3.live( +hz: U32, +ch: U32, +kind: U32, frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.one.tail (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=one.tail) def one.tail(xs: List<&2, U32>) -> Bool: Mp3.one.only (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=one.only) def one.only(xs: List<&2, U32>) -> Bool: Mp3.samp.hd (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=samp.hd) def samp.hd(xs: List<&2, U32>) -> U32: Mp3.pulse.ch (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=pulse.ch) def pulse.ch(one: Bool, mono: Bool, pcm: Bool) -> Bool: Mp3.pulse.yes (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=pulse.yes) # one signed sample is a single Huffman pair, not the filterbank def pulse.yes(one: Bool, +ch: U32, +kind: U32) -> Bool: Mp3.pulse.fit (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=pulse.fit) # a magnitude above 15 stays on the filterbank. 0 is not a pair. def pulse.fit(yes: Bool, +w: U32) -> Bool: Mp3.pulse.small (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=pulse.small) def pulse.small(one: Bool, +ch: U32, +kind: U32, +w: U32) -> Bool: Mp3.mp3.arm (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.arm) def mp3.arm( pulse: Bool, +hz: U32, +ch: U32, +kind: U32, frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.mp3.nz (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.nz) def mp3.nz( z: Bool, +hz: U32, +ch: U32, +kind: U32, +frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.mp3.body (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.body) def mp3.body( empty: Bool, +hz: U32, +ch: U32, +kind: U32, +frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.mp3.pick (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.pick) def mp3.pick( ok: Bool, +hz: U32, +ch: U32, +kind: U32, +frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.mp3.encode (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=mp3.encode) # samples are interleaved U32 bits. kind 1 is s16, kind 3 is binary32. def mp3.encode( +hz: U32, +ch: U32, +kind: U32, frames: List<&2, U32> ) -> Maybe<&2, List<&2, U32>>: Mp3.Pcm (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=Pcm) # a decoded frame: hertz, channels, interleaved binary32 words type Pcm is Data: Pcm{hz: U32, ch: U32, pcm: List<&2, U32>} Mp3.Wk (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=Wk) # decoder state. phase 0 seeks a header, 1 collects a frame, 2 has failed. type Wk is Data: Wk{ hz: U32, ch: U32, pcm: List<&2, U32>, ov: List<&2, F32>, qmf: List<&2, F32>, fresh: U32, lib: Dec.Lib, on: U32, phase: U32, left: U32, buf: List<&2, U32> } Mp3.le.pick (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=le.pick) def le.pick(eq: Bool, +aa: U32, +bb: U32) -> Bool: Mp3.le.u (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=le.u) def le.u(+aa: U32, +bb: U32) -> Bool: Mp3.frm.fit (https://jend.leeeet.dev/definition.txt?path=emerging-ezaudio@0.4.0.0/src/mp3.bend&name=frm.fit) def frm.fit(+xs: List<&2, U32>, +nn: U32) -> Bool: More: https://jend.leeeet.dev/packages/emerging-ezaudio.txt?definitions_offset=100