Hi,

The new « soundfile » primitive is progressively implemented in the different 
backends. Work has been done in the C/C++ and LLVM backends. Several faust2xx 
tools supports it (faust2caqt, faust2jack, faustjaqt, faust2ios, faust2msp, 
faust2max6). You’ll have to use the -soundfile parameter so that sound files 
are copied in the produced binary (so something like: faust2caqt -soundfile 
foo.dsp). faustgen~ supports it also, FaustLive dev branch can now use it. 

Here is the current state of documentation: 

=========
3.5.3 Soundfiles

The soundfile("label[url:path]", n) primitive allows to access an externally 
defined sound resource. A soundfile has one input (the read index in the 
sound), three fixed outputs (the first one is the sound length in frames, the 
second one is the sound nominal sample rate, the third one is the sound number 
of channels) and several more outputs for the sound channels themselves.

If more outputs than the actual number of channels in the soundfile are used, 
the sound channels will be automatically duplicated up to the wanted number of 
outputs (so for instance if a stereo sound is used with four output channels, 
the same group of two channels will be duplicated).

If the soundfile cannot be loaded for whatever reason, a default sound with one 
channel, a length of 1024 frames and null outputs (with samples of value 0) 
will be used. Note also that soundfiles are entirely loaded in memory by the 
architecture file.

Architecture files are responsible to load the actual soundfile. The SoundUI 
C++ class located in the faust/gui/SoundUI.h file implements the void 
addSoundfile( label, file_name, sf_zone) method, which loads the actual 
soundfiles using the libsndfile library, and set up the sf_zone sound memory 
pointers. If label is used without any url metadata, it will be considered as 
the soundfile pathname.

Note that a special architecture file can perfectly decide to access and use 
sound resources created by another means (that is, not directly loaded from a 
soundfile). For instance a mapping between labels and sound resources defined 
in memory could be used, with some additional code in charge to actually setup 
all sound memory point- ers when void addSoundfile(label, file_name, sf_zone) 
is called by the buidUserInterface mechanism.

=========

Some simple example are located in tests/soundfile folder. The libraries 
contain some helper functions:  
https://github.com/grame-cncm/faustlibraries/blob/41163d260be908778d638e1d0211626b8b22b7e7/soundfiles.lib
 

Next step is to support it in WebAssembly backend, and WebAudio related glue 
code.

Use the latest master-dev branch (version 2.6.3 and later).

Testing welcome !

Stéphane 



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Faudiostream-devel mailing list
Faudiostream-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-devel

Reply via email to