So, let me see if I can get this straight. You want to implement a class with the same interface as RtAudio (which I'm not deeply familiar with), but have it run on the web.
Said RtAudio implementation would have to be built on some web API such as the Web Audio API. Am I understanding correctly? If so, Embind makes it convenient to interact with JavaScript APIs from C++, and it could be used to implement your scenario. On Fri, Sep 12, 2014 at 2:00 AM, Arve Knudsen <[email protected]> wrote: > Are you sure this would meet my use case? My use case is not to use a C++ > class from JavaScript, but rather to mimic it, for the benefit of the > ported code. Like how SDL is emulated by Emscripten for instance. > > Arve > On Sep 12, 2014 5:38 PM, "Chad Austin" <[email protected]> wrote: > >> Hi Arve, >> >> If you have a C++ class and you want to make it accessible to JavaScript, >> you probably want to use Embind or WebIDL. There is an introduction to >> Embind at >> http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html >> >> You may also get some value out of the information in these slides, >> though it probably goes deeper than you are thinking about at the moment: >> http://chadaustin.me/2014/09/connecting-c-and-javascript-on-the-web-with-embind/ >> >> Let me know if you have any questions, >> Chad >> >> (I don't have any personal experience with WebIDL, but it probably also >> solves your use case.) >> >> >> On Thu, Sep 11, 2014 at 9:20 PM, Arve Knudsen <[email protected]> >> wrote: >> >>> Gotcha, thanks. >>> On Sep 12, 2014 12:55 PM, "Bruce Mitchener" <[email protected]> >>> wrote: >>> >>>> Needs to be C for the JS library stuff to work. >>>> >>>> - Bruce >>>> >>>> >>>> On Fri, Sep 12, 2014 at 10:09 AM, Arve Knudsen <[email protected]> >>>> wrote: >>>> >>>>> Bruce, can you comment on the C++ thing though? Could I write this JS >>>>> implementation for a C++ class instead, or does it have to be C? >>>>> >>>>> Arve >>>>> >>>>> On Fri, Sep 12, 2014 at 12:08 PM, Arve Knudsen <[email protected] >>>>> > wrote: >>>>> >>>>>> Bruce, ahhh thank you, that was the missing piece of the puzzle. It >>>>>> works now! >>>>>> >>>>>> Arve >>>>>> >>>>>> On Fri, Sep 12, 2014 at 12:05 PM, Bruce Mitchener < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> You don't want to put your function inside the $RTAUDIO object. >>>>>>> >>>>>>> You'd just put it at top level in the LibraryRtAudio object. >>>>>>> $RTAUDIO is where you'll put shared internal stuff. >>>>>>> >>>>>>> - Bruce >>>>>>> >>>>>>> >>>>>>> On Fri, Sep 12, 2014 at 9:58 AM, Arve Knudsen < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> I need to write a shim for the C++ API RtAudio, i.e. the class >>>>>>>> RtAudio really. Your docs show how to write shims for C APIs (e.g. >>>>>>>> SDL), >>>>>>>> but not C++ APIs: >>>>>>>> http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html?highlight=webidl#implement-a-c-api-in-javascript. >>>>>>>> No idea how embind/webidl-binder would fit into this scenario. >>>>>>>> >>>>>>>> Anyhow, I wrote a (very) simple C wrapper for RtAudio, thus >>>>>>>> sidestepping the C++ issue, so I can just write a C API shim. I try to >>>>>>>> implement a single C function, rtaudio_initialize, in JavaScript, but >>>>>>>> it's >>>>>>>> not found by the generated JavaScript (chuck.js). I can tell that the >>>>>>>> shim >>>>>>>> (or JavaScript library) is used when building however, since I can >>>>>>>> have it >>>>>>>> break the build by throwing an exception. Why is my JS implementation >>>>>>>> of >>>>>>>> rtaudio_initialize not found?? >>>>>>>> >>>>>>>> My shim can be seen here: >>>>>>>> https://github.com/aknuds1/chuck/blob/emscripten/src/emscripten/shims/rtaudio.js, >>>>>>>> and it's incorporated in the build via the --js-library option to >>>>>>>> emcc: --js-library emscripten/shims/rtaudio.js. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Arve >>>>>>>> >>>>>>>> On Fri, Sep 12, 2014 at 11:31 AM, Alon Zakai <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> What do you mean by "shim a C++ API"? And in what way are embind >>>>>>>>> and the webidl-binder not sufficient? >>>>>>>>> >>>>>>>>> - Alon >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, Sep 11, 2014 at 7:29 PM, Arve Knudsen < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> I can't see that those docs mention how to shim a C++ API in >>>>>>>>>> JavaScript? There is a section on C API though, and how to integrate >>>>>>>>>> your >>>>>>>>>> shims, so that's helpful at least. Is it simply not possible to shim >>>>>>>>>> a C++ >>>>>>>>>> API? If so, I'll have to write a C wrapper instead I guess. >>>>>>>>>> >>>>>>>>>> Arve >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Fri, Sep 12, 2014 at 11:17 AM, Alon Zakai <[email protected] >>>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> General docs on that are at >>>>>>>>>>> http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html?highlight=webidl >>>>>>>>>>> >>>>>>>>>>> In particular if you are going to use C++ classes from JS, you >>>>>>>>>>> probably want embind or webidl-binder. >>>>>>>>>>> >>>>>>>>>>> - Alon >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Thu, Sep 11, 2014 at 7:02 PM, Arve Knudsen < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi guys >>>>>>>>>>>> >>>>>>>>>>>> As pertaining my previous more general question about writing >>>>>>>>>>>> Emscripten shims, I have a more specific follow-up question. How >>>>>>>>>>>> can I >>>>>>>>>>>> write an Emscripten shim library to mimic the RtAudio C++ class >>>>>>>>>>>> constructor >>>>>>>>>>>> ( >>>>>>>>>>>> http://www.music.mcgill.ca/~gary/rtaudio/classRtAudio.html#afd0bfa26deae9804e18faff59d0273d9)? >>>>>>>>>>>> And how do I integrate said shim into my build, so that invoking >>>>>>>>>>>> the >>>>>>>>>>>> constructor works? The shim will eventually need to do more than >>>>>>>>>>>> just mimic >>>>>>>>>>>> the constructor of course, but that would be a superb start. >>>>>>>>>>>> >>>>>>>>>>>> For context, what I'm trying to do is to port the ChucK music >>>>>>>>>>>> programming language to JS, my GitHub project can be found here >>>>>>>>>>>> (branch >>>>>>>>>>>> emscripten): https://github.com/aknuds1/chuck/tree/emscripten. >>>>>>>>>>>> The README includes instructions on how to build with Emscripten. >>>>>>>>>>>> >>>>>>>>>>>> Let me know if you need to know more. >>>>>>>>>>>> >>>>>>>>>>>> Best, >>>>>>>>>>>> Arve >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to >>>>>>>>>>>> [email protected]. >>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>> it, send an email to >>>>>>>>>>> [email protected]. >>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>>> send an email to [email protected]. >>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "emscripten-discuss" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to [email protected]. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "emscripten-discuss" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to [email protected]. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "emscripten-discuss" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "emscripten-discuss" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "emscripten-discuss" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Chad Austin >> Technical Director, IMVU >> http://engineering.imvu.com <http://www.imvu.com/members/Chad/> >> http://chadaustin.me >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Chad Austin Technical Director, IMVU http://engineering.imvu.com <http://www.imvu.com/members/Chad/> http://chadaustin.me -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
