~/bend-docscommunity

wav.bend checks

raw source on the hub · import 0x9137a47f23b329cb0d636ed271d4bfb2/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.

type Fm source · line 9 · raw

Data

fmt fields that passed the PCM checks

type St source · line 13 · raw

Data

the chunk walker: phase 0 tag, 1 size, 2 payload, 3 pad byte

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