# Csound.start() directly starts performance

**URL:** <https://forum.csound.com/t/csound-start-directly-starts-performance/2366>\
**Category:** Web Csound\
**Created:** [January 19, 2026, 8:10am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366 "2026-01-19T08:10:47Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lovre](https://forum.csound.com/letter_avatar_proxy/v4/letter/l/bbce88/32.png) [@Lovre](https://forum.csound.com/u/Lovre)\
**Post date:** [January 19, 2026, 8:10am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366/1 "2026-01-19T08:10:47Z")

</div>

Dear Csounders!

in JS, when I execute `await csound.start();` my csound object directly starts with performance but in docs ([https://www.npmjs.com/package/@csound/browser#CsoundObj.start](https://www.npmjs.com/package/@csound/browser#CsoundObj.start)) it says that it “Prepares Csound for performance”. I would like to ‘drive’ my csound object manually using `performKsmps()` function.

I did this many times in python and c++ but never in JS so I’m not sure is this expected behavior? Should I do something different?

---

<div class="post-metadata">

**Author:** ![stevenyi](https://forum.csound.com/user_avatar/forum.csound.com/stevenyi/32/4_2.png) [@stevenyi](https://forum.csound.com/u/stevenyi)\
**Post date:** [January 21, 2026, 12:02am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366/2 "2026-01-21T00:02:47Z")

</div>

I think this is expected behavior as CsoundObj.start() is different than calling csoundStart() in the C API, as it does more work to deal with threads and things. I think if you want very fine control of Csound, you might have to use libcsound WASM directly (i.e., use @csound/wasm-bin).

---

<div class="post-metadata">

**Author:** ![Lovre](https://forum.csound.com/letter_avatar_proxy/v4/letter/l/bbce88/32.png) [@Lovre](https://forum.csound.com/u/Lovre)\
**Post date:** [January 21, 2026, 11:41am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366/3 "2026-01-21T11:41:15Z")

</div>

thanks @stevenyi ! I can definitely try that but is there any documentation/examples on how to work with csound/wasm-bin? i looked a bit but i havent found much…

---

<div class="post-metadata">

**Author:** ![stevenyi](https://forum.csound.com/user_avatar/forum.csound.com/stevenyi/32/4_2.png) [@stevenyi](https://forum.csound.com/u/stevenyi)\
**Post date:** [January 22, 2026, 2:00am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366/4 "2026-01-22T02:00:47Z")

</div>

There isn’t any documentation. The @csound/browser codebase does load the .wasm and uses it but it is not particularly straightforward. The browser library does a lot to supply FS and other things for wasm to use.

I did some work with AI to build out an example here:

> **[GitHub - kunstmusik/csound-wasm-bin-example: Example web project using...](https://github.com/kunstmusik/csound-wasm-bin-example)**
>
> Example web project using @csound/wasm-bin WASM binary directly - kunstmusik/csound-wasm-bin-example

There’s a lot of ceremony to be done to communicate values to/from WASM but you can see that done in the example.

---

<div class="post-metadata">

**Author:** ![Lovre](https://forum.csound.com/letter_avatar_proxy/v4/letter/l/bbce88/32.png) [@Lovre](https://forum.csound.com/u/Lovre)\
**Post date:** [January 23, 2026, 8:00am UTC](https://forum.csound.com/t/csound-start-directly-starts-performance/2366/5 "2026-01-23T08:00:48Z")

</div>

thanks @stevenyi ! that helped me a lot!

Also i had to strugle a bit to read values from the table so here if anyone else need it in the future:

1. get table length: `const tableLength = exports.csoundTableLength(csound, tableId);`
2. allocate the buffer in WASM memory for `tableLength` number of floats `const outputPtr = exports.allocFloatArray(tableLength);`
3. copy the table data into that buffer `exports.csoundTableCopyOut(csound, tableId, outputPtr);`
4. Read values from the table

```csound
// Csound defaults to 64-bit floats (Float64Array).         
const resultTable = new Float64Array(memory.buffer, outputPtr, tableLength);
// Make a copy so your can own the data in JS
const dataCopy = resultTable.slice();   

```
