---- ;help
Sound.Sc3.sc3_scdoc_help_server_command_open False "/b_allocRead"

> import Sound.OSC {- hosc -}
> import Sound.Sc3 {- hsc3 -}

Read an audio file into a buffer.

> f_00 = sfResolve "jonchaies.wav"
> m_00 = b_allocRead 0 f_00 0 0

    withSc3 (async m_00)

Audio data is loaded in IEEE 32-bit form, so in-memory storage can be
greater than on-disk storage.

$ sndfile-info data/audio/xenakis/jonchaies.wav
Sample Rate : 44100
Frames      : 42271320
Duration    : 00:15:58.533
$ du -h data/audio/xenakis/jonchaies.wav
162M    data/audio/xenakis/jonchaies.wav
$

    round ((16 * 60 * 44100 * 4 * 2) / (1024 * 1024)) == 323
    round ((42271320 * 2 * 4) / (1024 * 1024)) == 323

Query buffer.

> q_00 :: Connection UDP ()
> q_00 = do
>   sendMessage (b_query [0])
>   r <- waitReply "/b_info"
>   liftIO (print r)

    withSc3 q_00

Play buffer.

> g_00 =
>   let bufnum = 257
>       s = bufRateScale KR bufnum
>   in playBuf 1 AR bufnum s 1 0 NoLoop RemoveSynth

Re-read file into buffer with the same identifier.  The existing
buffer is freed but not before further memory is allocated,
intermediate in-memory use is greater than final memory use.

    withSc3 (async (b_allocRead 0 fn 0 0))

Free buffer.  Memory is immediately made free.

    withSc3 (async (b_free 0))

Small sample buffer

> f_01 = sfResolve "metal.wav"

    withSc3 (async m_01)

> m_01 :: Message
> m_01 = b_allocRead 0 f_01 0 0
