src/wav.bend checks
raw source on the hub · import 0xd2dab0fbc9db2e9ba3da65dae724eb41/src/wav.bend as Wav
RIFF WAVE. PCM is little-endian signed 16-bit. Float is IEEE binary32.
1 import
import Base
Types
type Wav source · line 5 · raw
Data
a parsed wave. kind 1 is signed 16-bit, kind 3 is binary32. frames are interleaved.
Wav@rate:U32 -> @channels:U32 -> @kind:U32 -> @frames:List<&2, U32> -> Wav
type Fm source · line 9 · raw
Data
fmt fields that passed the PCM checks
Fm@kind:U32 -> @ch:U32 -> @rate:U32 -> Fm
type St source · line 13 · raw
Data
the chunk walker: phase 0 tag, 1 size, 2 payload, 3 pad byte
St@phase:U32 -> @left:U32 -> @tag:U32 -> @sz:U32 -> @seen:U32 -> @kind:U32 -> @ch:U32 -> @rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
Definitions
def tag.riff source · line 20 · raw
U32
'RIFF'
def tag.wave source · line 24 · raw
U32
'WAVE'
def tag.fmt source · line 28 · raw
U32
'fmt '
def tag.data source · line 32 · raw
U32
'data'
def be.u32 source · line 35 · raw
@+aa:U32 -> @+bb:U32 -> @+cc:U32 -> @+dd:U32 -> U32
def le.u16 source · line 38 · raw
@+aa:U32 -> @+bb:U32 -> U32
def le.u32 source · line 41 · raw
@+aa:U32 -> @+bb:U32 -> @+cc:U32 -> @+dd:U32 -> U32
def put.u16 source · line 44 · raw
@+vv:U32 -> List<&2, U32>
def put.u32 source · line 47 · raw
@+vv:U32 -> List<&2, U32>
def put.be source · line 50 · raw
@+vv:U32 -> List<&2, U32>
def put.lo source · line 54 · raw
@+vv:U32 -> U32
def put.hi source · line 57 · raw
@+vv:U32 -> U32
def put.b2 source · line 60 · raw
@+vv:U32 -> U32
def put.b3 source · line 63 · raw
@+vv:U32 -> U32
def word4.pick source · line 66 · raw
@big:Bool -> @+aa:U32 -> @+bb:U32 -> @+cc:U32 -> @+dd:U32 -> U32
def word.of source · line 73 · raw
@xs:List<&2, U32> -> @+big:U32 -> U32
def st.empty source · line 80 · raw
St
def st.set source · line 83 · raw
@+phase:U32 -> @+left:U32 -> @+tag:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
def fmt.rate source · line 89 · raw
@ok:Bool -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> Maybe<&2, Fm>
def fmt.ok source · line 96 · raw
@+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @+br:U32 -> @+al:U32 -> @+bits:U32 -> Maybe<&2, Fm>
def fmt.pack source · line 109 · raw
@+k0:U32 -> @+k1:U32 -> @+c0:U32 -> @+c1:U32 -> @+r0:U32 -> @+r1:U32 -> @+r2:U32 -> @+r3:U32 -> @+b0:U32 -> @+b1:U32 -> @+b2:U32 -> @+b3:U32 -> @+a0:U32 -> @+a1:U32 -> @+t0:U32 -> @+t1:U32 -> Maybe<&2, Fm>
def fmt.fields source · line 117 · raw
@ys:List<&2, U32> -> Maybe<&2, Fm>
def pcm.cons source · line 125 · raw
@got:Maybe<&2, List<&2, U32>> -> @+vv:U32 -> Maybe<&2, List<&2, U32>>
def pcm.s16 source · line 132 · raw
@xs:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def pcm.f32 source · line 141 · raw
@xs:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def pcm.of source · line 150 · raw
@+kind:U32 -> @ys:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def done.ok source · line 157 · raw
@ok:Bool -> @+rt:U32 -> @+ch:U32 -> @+kd:U32 -> @fr:List<&2, U32> -> Maybe<&2, Wav>
def st.done source · line 164 · raw
@st:St -> Maybe<&2, Wav>
def step.next.pad source · line 169 · raw
@odd:Bool -> @+sz:U32 -> @+tag:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @frames:List<&2, U32> -> St
def step.next source · line 179 · raw
@+sz:U32 -> @+tag:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @frames:List<&2, U32> -> St
def step.fmt.got source · line 184 · raw
@got:Maybe<&2, Fm> -> @+sz:U32 -> @frames:List<&2, U32> -> St
def step.fmt source · line 191 · raw
@+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @ys:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.pcm.got source · line 201 · raw
@got:Maybe<&2, List<&2, U32>> -> @+sz:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> St
def step.pcm source · line 210 · raw
@ready:Bool -> @+sz:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @ys:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.dat source · line 220 · raw
@isd:Bool -> @+tag:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @ys:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.chunk.on source · line 230 · raw
@isf:Bool -> @+tag:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @ys:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.chunk source · line 240 · raw
@+tag:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @ys:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.tag.at source · line 246 · raw
@last:Bool -> @+left:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.tag source · line 256 · raw
@st:St -> @+hd:U32 -> St
def step.size.done source · line 261 · raw
@+sz:U32 -> @+tag:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @frames:List<&2, U32> -> St
def step.size.at source · line 270 · raw
@last:Bool -> @+left:U32 -> @+tag:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.size source · line 280 · raw
@st:St -> @+hd:U32 -> St
def step.pad source · line 285 · raw
@st:St -> St
def step.pay.at source · line 290 · raw
@last:Bool -> @+left:U32 -> @+tag:U32 -> @+sz:U32 -> @+seen:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.pay source · line 300 · raw
@st:St -> @+hd:U32 -> St
def step.err.dec source · line 305 · raw
@last:Bool -> @+phase:U32 -> @+left:U32 -> @+tag:U32 -> @+sz:U32 -> @+kind:U32 -> @+ch:U32 -> @+rate:U32 -> @acc:List<&2, U32> -> @frames:List<&2, U32> -> St
def step.err.keep source · line 315 · raw
@+_phase:U32 -> @st:St -> @+hd:U32 -> St
def step.on source · line 320 · raw
@+phase:U32 -> @st:St -> @+hd:U32 -> St
def step.bad source · line 331 · raw
@bad:Bool -> @+phase:U32 -> @st:St -> @+hd:U32 -> St
def step.byte source · line 338 · raw
@st:St -> @+hd:U32 -> St
def walk.go source · line 345 · raw
@xs:List<&2, U32> -> @st:St -> Maybe<&2, Wav>
def open.ok source · line 352 · raw
@ok:Bool -> @rest:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def open.riff source · line 359 · raw
@xs:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def wav.go source · line 368 · raw
@got:Maybe<&2, List<&2, U32>> -> Maybe<&2, Wav>
def wav.parse source · line 376 · raw
@xs:List<&2, U32> -> Maybe<&2, Wav>
bytes to a wave, or none when the form is not mono or stereo PCM or float
def enc.s16 source · line 379 · raw
@xs:List<&2, U32> -> List<&2, U32>
def enc.f32 source · line 386 · raw
@xs:List<&2, U32> -> List<&2, U32>
def enc.pcm source · line 393 · raw
@+kind:U32 -> @xs:List<&2, U32> -> List<&2, U32>
def enc.ch source · line 400 · raw
@+nc:U32 -> Bool
def enc.both source · line 409 · raw
@okc:Bool -> @okr:Bool -> Bool
def enc.ok source · line 416 · raw
@+nc:U32 -> @+fk:U32 -> @+rt:U32 -> Bool
def enc.bytes source · line 425 · raw
@+kind:U32 -> @+ns:U32 -> U32
def enc.cat source · line 432 · raw
@xs:List<&2, U32> -> @ys:List<&2, U32> -> List<&2, U32>
def align.of source · line 435 · raw
@+kind:U32 -> @+ch:U32 -> U32
def width.of source · line 442 · raw
@+kind:U32 -> U32
def enc.head source · line 449 · raw
@+rate:U32 -> @+ch:U32 -> @+kind:U32 -> @+nb:U32 -> List<&2, U32>
def write.some source · line 463 · raw
@+rate:U32 -> @+ch:U32 -> @+kind:U32 -> @frames:List<&2, U32> -> @pcm:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def write.if source · line 469 · raw
@ok:Bool -> @+rate:U32 -> @+ch:U32 -> @+kind:U32 -> @+frames:List<&2, U32> -> Maybe<&2, List<&2, U32>>
def wav.write source · line 479 · raw
@+rate:U32 -> @+ch:U32 -> @+kind:U32 -> @frames:List<&2, U32> -> Maybe<&2, List<&2, U32>>
a wave file, or none when the clip is not 16-bit PCM or 32-bit float, mono or stereo