Experimental real-time audio and signal processing application development framework.
Go to file
2021-05-08 08:15:06 -04:00
dns_sd Changes to support autotools build. 2020-03-24 08:51:51 -04:00
html audio_midi : Initial implementation of audio_midi io-based app. 2021-04-10 13:38:49 -04:00
study cwDataSet.h/cpp, cwNN.h/cpp : Updates. 2020-10-30 09:40:39 -04:00
.gitignore .gitignore : updates 2020-03-23 10:51:18 -04:00
cwAudioBuf.cpp cwAudioBuf.h/cpp : Added version of meter() which returns an array of meter values from a device. 2021-01-31 11:04:11 -05:00
cwAudioBuf.h cwAudioBuf.h/cpp : Added version of meter() which returns an array of meter values from a device. 2021-01-31 11:04:11 -05:00
cwAudioBufDecls.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwAudioDevice.cpp Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwAudioDevice.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwAudioDeviceAlsa.cpp cwAudioDeviceAlsa.cpp : Replaced printf()'s with cwLogInfo()'s. 2021-01-31 11:10:44 -05:00
cwAudioDeviceAlsa.h cwAudioBuf,cwAudioDeviceAlsa : Test functions now return error codes. 2020-09-27 10:27:32 -04:00
cwAudioDeviceDecls.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwAudioDeviceTest.cpp cwAudioDeviceTest.cpp : Change static_cast<> to reinterpet_cast<> 2021-01-20 13:06:57 -05:00
cwAudioDeviceTest.h cwAudioDeviceTest.h/cpp : test() now takes a cfg object and added test_tone(). 2020-12-15 15:30:45 -05:00
cwAudioFile.cpp cwAudioFile.h/cpp : Add floating point file format. 2021-05-08 08:15:06 -04:00
cwAudioFile.h cwAudioFile.h/cpp : Add floating point file format. 2021-05-08 08:15:06 -04:00
cwAudioFileOps.cpp cwAudioFileOps.cpp : selecToFile(cfg) now has generates optional Audacity marker file. 2021-02-26 13:34:37 -05:00
cwAudioFileOps.h cwFileOps.h/cpp: Added fade in/out fucnctionality to selectToFile(). 2021-02-24 13:21:35 -05:00
cwAvahiSurface.cpp Updated dns_sd/ to match the Arduino build. 2020-02-13 11:29:52 -05:00
cwCommon.h cwVectOps.h : Initial commit. 2020-09-22 11:37:19 -04:00
cwCommonImpl.cpp Initial commit 2019-12-18 22:24:12 -05:00
cwCommonImpl.h Makefile.am,cwCommonImpl.h : Implement use of cwWEB 2020-10-04 20:05:31 +00:00
cwDataSets.cpp cwDataSets.h/cpp : Add use of cache_t file cache to rdr to improve file read performance and add shuffling option. 2020-12-29 11:22:29 -05:00
cwDataSets.h cwDataSets.h/cpp : Add use of cache_t file cache to rdr to improve file read performance and add shuffling option. 2020-12-29 11:22:29 -05:00
cwDnsSd.cpp cwTime.h/cpp,cwDnsSd.cpp,cwMdns.cpp : Changed cwTime interface to use all references rather than pointers as arguments. 2020-04-17 11:16:21 -04:00
cwDnsSd.h cwUtility, cwDnsSd, cwEuCon : Initial commit. 2020-02-12 13:43:00 -05:00
cwDsp.cpp Makefile.am,cwDsp,cwFFT: Updates to make FFTW optional. 2020-10-11 17:18:58 -04:00
cwDsp.h Makefile.am,cwDsp,cwFFT: Updates to make FFTW optional. 2020-10-11 17:18:58 -04:00
cwEuCon.cpp cwEuCon.cpp : Change mute id's to indicate source. 2020-05-19 20:51:20 -04:00
cwEuCon.h cwEuCon.h/cpp : Implemented sendMsg() and use cwEuConDecls.h. 2020-05-14 11:13:07 -04:00
cwEuConDecls.h cwEuConDecls.h : Changed kMuteEuconId to kEucMuteEuconId and added kFdrMuteEuconId. 2020-05-19 20:44:35 -04:00
cwFFT.cpp Makefile.am,cwDsp,cwFFT: Updates to make FFTW optional. 2020-10-11 17:18:58 -04:00
cwFFT.h Makefile.am,cwDsp,cwFFT: Updates to make FFTW optional. 2020-10-11 17:18:58 -04:00
cwFile.cpp cwFile.cpp : open() now calls filesys::expandPath() on all file names. 2021-02-26 13:33:31 -05:00
cwFile.h cwFile.h/cpp : read()/write() now check 'lastRC' as a precondition. 2020-12-29 11:20:24 -05:00
cwFileSys.cpp cwFileSys.h/cpp : Added makeVersionedFn(). 2021-04-10 13:36:07 -04:00
cwFileSys.h cwFileSys.h/cpp : Added makeVersionedFn(). 2021-04-10 13:36:07 -04:00
cwIo.cpp cwIo.h/cpp : Added timer implementation. 2021-04-10 13:37:07 -04:00
cwIo.h cwIo.h/cpp : Added timer implementation. 2021-04-10 13:37:07 -04:00
cwIoAudioMidi.cpp audio_midi : Initial implementation of audio_midi io-based app. 2021-04-10 13:38:49 -04:00
cwIoAudioMidi.h audio_midi : Initial implementation of audio_midi io-based app. 2021-04-10 13:38:49 -04:00
cwIoAudioPanel.cpp cwIoAudioPanel.h/cpp,cwIoSocketChat.h/cpp, Makefile.am, cwIoTest.cpp : Initial commit of cwIoAudioPanel and cwIoSocketChat. 2021-01-31 11:16:08 -05:00
cwIoAudioPanel.h cwIoAudioPanel.h/cpp,cwIoSocketChat.h/cpp, Makefile.am, cwIoTest.cpp : Initial commit of cwIoAudioPanel and cwIoSocketChat. 2021-01-31 11:16:08 -05:00
cwIoSocketChat.cpp cwIoAudioPanel.h/cpp,cwIoSocketChat.h/cpp, Makefile.am, cwIoTest.cpp : Initial commit of cwIoAudioPanel and cwIoSocketChat. 2021-01-31 11:16:08 -05:00
cwIoSocketChat.h cwIoAudioPanel.h/cpp,cwIoSocketChat.h/cpp, Makefile.am, cwIoTest.cpp : Initial commit of cwIoAudioPanel and cwIoSocketChat. 2021-01-31 11:16:08 -05:00
cwIoTest.cpp cwIoAudioPanel.h/cpp,cwIoSocketChat.h/cpp, Makefile.am, cwIoTest.cpp : Initial commit of cwIoAudioPanel and cwIoSocketChat. 2021-01-31 11:16:08 -05:00
cwIoTest.h cwIo.h/cpp, cwIoTest.h/cpp, html/ioTest.* : Many changes and additions to support first working Ui and audio subsystem. 2021-01-20 13:13:11 -05:00
cwLex.cpp Standardized filesys and mem namespaces. 2019-12-27 21:51:28 -05:00
cwLex.h Initial implementation cwTcpSocket* 2019-12-27 16:52:45 -05:00
cwLib.cpp Changes to support autotools build. 2020-03-24 08:51:51 -04:00
cwLib.h cwLib.h/cpp, cwMutex.h/cpp : Initial commit. 2020-03-04 14:05:54 -05:00
cwLog.cpp cwFileSys.h/cpp : Added makeDir(). 2020-09-01 15:46:21 -04:00
cwLog.h cwFileSys.h/cpp : Added makeDir(). 2020-09-01 15:46:21 -04:00
cwMath.cpp Makefile.am,cwMath.h/cpp : Initial commit. 2020-12-29 10:09:03 -05:00
cwMath.h Makefile.am,cwMath.h/cpp : Initial commit. 2020-12-29 10:09:03 -05:00
cwMdns.cpp cwTime.h/cpp,cwDnsSd.cpp,cwMdns.cpp : Changed cwTime interface to use all references rather than pointers as arguments. 2020-04-17 11:16:21 -04:00
cwMdns.h cwMdns.h/cpp : Initial commit. 2020-01-27 17:51:38 -05:00
cwMem.cpp Pine64 Updates. 2020-10-31 14:17:43 -04:00
cwMem.h cwMem.h : Expanded allocDupl() interfaces. Added printp(),appendStr() 2020-08-19 20:08:14 -04:00
cwMidi.cpp cwMidi.h/cpp : Added kMidiPortMdId MIDI File meta status id. 2021-02-21 08:47:29 -05:00
cwMidi.h cwMidi.h/cpp : Added kMidiPortMdId MIDI File meta status id. 2021-02-21 08:47:29 -05:00
cwMidiAlsa.cpp Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwMidiDecls.h cwMidiDecls.h : Updated comments. 2021-01-31 11:08:36 -05:00
cwMidiFile.cpp cwMidiFile.h/cpp, Makefile : Initial commit. 2021-02-21 08:48:37 -05:00
cwMidiFile.h cwMidiFile.h/cpp, Makefile : Initial commit. 2021-02-21 08:48:37 -05:00
cwMidiPort.cpp Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwMidiPort.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwMpScNbQueue.h cwMpScNbQueue.h : Initial commit. 2021-01-12 15:49:19 -05:00
cwMpScQueue.h cwMpScQueue.h : replace use of atomic exchange 2021-01-12 15:57:57 -05:00
cwMtx.cpp cwMtx.h,cpp : Added slice() and derivatives. 2020-09-22 13:33:32 -04:00
cwMtx.h cwFileSys.cpp, cwMtx.h, cwObject.cpp : minor changes to eliminate warning during non-debug build. 2021-02-21 08:53:39 -05:00
cwMutex.cpp cwmutex.h : Added signalCondVar(). 2021-01-20 13:07:36 -05:00
cwMutex.h cwMutex.h : Added 'spurious wakeup' comments. 2021-01-22 09:33:23 -05:00
cwNbMem.cpp cwNbMem.h/cpp : Initial commit. 2020-01-27 17:51:56 -05:00
cwNbMem.h cwNbMem.h/cpp : Initial commit. 2020-01-27 17:51:56 -05:00
cwNN.cpp cwDataSet.h/cpp, cwNN.h/cpp : Updates. 2020-10-30 09:40:39 -04:00
cwNN.h cwDataSet.h/cpp, cwNN.h/cpp : Updates. 2020-10-30 09:40:39 -04:00
cwNumericConvert.h cwNumericConvert.h,cwObject.cpp : Added type specializations for cwNumericConvert.number_to_string(). 2020-12-29 10:11:00 -05:00
cwObject.cpp cwFileSys.cpp, cwMtx.h, cwObject.cpp : minor changes to eliminate warning during non-debug build. 2021-02-21 08:53:39 -05:00
cwObject.h cwObject.h : Added is_type(). 2021-01-31 11:04:49 -05:00
cwObjectTemplate.h cwObject.h/cpp : Added newPairObject(), typeid: kCStringTId, changed list_ele() to child_ele() 2020-04-06 19:15:03 -04:00
cwSerialPort.cpp cwSerialPort.cpp : fix bug where the incorrect byte count could be sent on a receive callback. 2020-03-16 22:54:14 -04:00
cwSerialPort.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwSerialPortDecls.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwSerialPortSrv.cpp cwSerialPort.h/cpp,cwSerialPortSrv.h/cpp : serialPort now manages multiple ports. 2020-03-05 22:04:53 -05:00
cwSerialPortSrv.h cwSerialPort.h/cpp,cwSerialPortSrv.h/cpp : serialPort now manages multiple ports. 2020-03-05 22:04:53 -05:00
cwSocket.cpp cwSocket.cpp : Log a warning if the socket to destroy() is not found. 2020-04-17 14:05:14 -04:00
cwSocket.h cwSocket.h : Updated comments. 2021-01-31 11:08:09 -05:00
cwSocketDecls.h cwSocket.h/cpp : Changed name of cbId_t to cbOpId_t 2020-04-01 10:46:31 -04:00
cwSpScBuf.cpp Pine64 Updates. 2020-10-31 14:17:43 -04:00
cwSpScBuf.h cwSpScBuf.h/cpp, cwThreadMach.h/cpp : initial commit. 2020-04-09 21:06:44 -04:00
cwSpScQueueTmpl.cpp Pine64 Updates. 2020-10-31 14:17:43 -04:00
cwSpScQueueTmpl.h cwSpScQueueTmpl.h : Change operation such that get() ony returns empty records. 2020-04-19 15:17:11 -04:00
cwString.cpp cwString, cwDsp : Initial commit. 2020-10-04 10:48:27 -04:00
cwString.h cwString, cwDsp : Initial commit. 2020-10-04 10:48:27 -04:00
cwSvg.cpp cwSvg.h/cpp : Removed unused flags from svg::write(). 2020-12-29 11:21:00 -05:00
cwSvg.h cwSvg.h/cpp : Removed unused flags from svg::write(). 2020-12-29 11:21:00 -05:00
cwTcpSocket.cpp cwTcpSocket.cpp : Fixed signed/unsigned compare. 2020-04-16 11:11:09 -04:00
cwTcpSocket.h cwTcpSocket.h/cpp : Remove the handle_t argument in initAddr() 2020-03-16 22:52:21 -04:00
cwTcpSocketSrv.cpp Many changes and additions to cwTcpSocket* to support MDNS and DNS-SD operations. 2020-02-12 13:25:13 -05:00
cwTcpSocketSrv.h Many changes and additions to cwTcpSocket* to support MDNS and DNS-SD operations. 2020-02-12 13:25:13 -05:00
cwTcpSocketTest.cpp Many changes and additions to cwTcpSocket* to support MDNS and DNS-SD operations. 2020-02-12 13:25:13 -05:00
cwTcpSocketTest.h Many changes and additions to cwTcpSocket* to support MDNS and DNS-SD operations. 2020-02-12 13:25:13 -05:00
cwText.cpp cwText.h/cpp : Added textAppend() and textJoin(). 2020-08-19 20:12:19 -04:00
cwText.h cwText.h/cpp : Added textAppend() and textJoin(). 2020-08-19 20:12:19 -04:00
cwTextBuf.cpp Standardized filesys and mem namespaces. 2019-12-27 21:51:28 -05:00
cwTextBuf.h Many changes and additions. 2019-12-24 10:05:24 -05:00
cwThread.cpp cwThread.cpp : Fix bug where waitTimeMicrosSecs was not properly updates. 2020-12-11 15:57:35 -05:00
cwThread.h cwThread.h/cpp : thread_id_t is changed form unsigned to unsigned long long. 2020-01-27 17:50:57 -05:00
cwThreadMach.cpp cwThreadMach.h/cpp : Many changes to support use in cwIo. 2021-01-20 13:11:44 -05:00
cwThreadMach.h cwThreadMach.h/cpp : Many changes to support use in cwIo. 2021-01-20 13:11:44 -05:00
cwTime.cpp cwVectOps.h : Initial commit. 2020-09-22 11:37:19 -04:00
cwTime.h cwVectOps.h : Initial commit. 2020-09-22 11:37:19 -04:00
cwUi.cpp cwUi.h/cpp : Fixed bug in _parseValueMsg() and updated comments in cwUi.h 2021-01-31 11:07:29 -05:00
cwUi.h cwUi.h/cpp : Fixed bug in _parseValueMsg() and updated comments in cwUi.h 2021-01-31 11:07:29 -05:00
cwUiDecls.h cwUi.h/cpp,cwUiTest.h/cpp, cwUiDecls.h : Moved public variables to cwUiDecls.h. Added a version of create() which uses an arg_t record. Added parseArgs() and releaseArgs(). 2021-01-20 13:10:56 -05:00
cwUiTest.cpp cwUi.h/cpp,cwUiTest.h/cpp, cwUiDecls.h : Moved public variables to cwUiDecls.h. Added a version of create() which uses an arg_t record. Added parseArgs() and releaseArgs(). 2021-01-20 13:10:56 -05:00
cwUiTest.h cwUi.h/cpp,cwUiTest.h/cpp, cwUiDecls.h : Moved public variables to cwUiDecls.h. Added a version of create() which uses an arg_t record. Added parseArgs() and releaseArgs(). 2021-01-20 13:10:56 -05:00
cwUtility.cpp cwUtility : Added powerOfTwo() functions. 2020-10-04 10:47:03 -04:00
cwUtility.h cwUtility : Added powerOfTwo() functions. 2020-10-04 10:47:03 -04:00
cwVariant.cpp cwVariant.h/cpp, Makefile.am : Initial commit. 2020-12-11 15:58:06 -05:00
cwVariant.h cwVariant.h/cpp, Makefile.am : Initial commit. 2020-12-11 15:58:06 -05:00
cwVectOps.h cwVectOpts.h : Added comments 2020-10-18 09:02:03 -04:00
cwWebSock.cpp cwWebSock.cpp: replace use of MpScNbQueue until MpScQueue can be debugged. 2021-01-12 17:05:34 -05:00
cwWebSock.h cwWebSock.h/cpp : Added 'sessionId' to send() (and msg_t) to allow a message to be sent to a specific endpoint. 2020-03-31 12:53:14 -04:00
cwWebSockDecls.h Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules. 2020-03-23 10:41:28 -04:00
cwWebSockSvr.cpp Pine64 Updates. 2020-10-31 14:17:43 -04:00
cwWebSockSvr.h Pine64 Updates. 2020-10-31 14:17:43 -04:00
Makefile.am audio_midi : Initial implementation of audio_midi io-based app. 2021-04-10 13:38:49 -04:00
README.md README.md : Added To Do's. 2021-01-31 11:16:24 -05:00

To Do

  • Should a warning be issued by audioBuf functions which return a set of values: muteFlags(),toneFlags(), gain( ... gainA) but where the size of the dest array does not match the actual number of channesl?

  • Document the meaning and way that id's and names/labels are used, and intended to be used, and found by UI. As it is they are confusing.

  • Any socket function which takes a IP/port address should have a version which also takes a sockaddr_in*.

  • Fix the time functions to make them more convenient and C++ish.

  • implement floating point UI numbers

  • UI needs a special UUID (not kInvalidId) to specify the 'root' UI element. See note in cwUi._createFromObj()

  • Look at 'BUG' warnings in cwNumericConvert.h.

  • cwObject must be able to parse without dynamic memory allocation into a fixed buffer

  • cwObject must be able to be composed without dynamic memory allocation or from a fixed buffer.

  • cwWebsock is allocating memory on send().

  • cwWebsock: if the size of the recv and xmt buffer, as passed form the protocolArray[], is too small send() will fail without an error message. This is easy to reproduce by simply decreasing the size of the buffers in the protocol array.

  • Clean up the cwObject namespace - add an 'object' namespace inside 'cw'

  • Add underscore to the member variables of object_t.

  • logDefaultFormatter() in cwLog.cpp uses stack allocated memory in a way that could easily be exploited.

  • lexIntMatcher() in cwLex.cpp doesn't handle 'e' notation correctly. See note in code.

  • numeric_convert() in cwNumericConvert.h could be made more efficient using type_traits.

  • numeric_convert() d_min is NOT zero, it's smallest positive number, this fails when src == 0. min value is now set to zero.

  • The UI app id map should be validated after the UI is created. In otherwords the parent/child pairs shoud actually exists.

  • Add an ui::appIdToUuId() that returns the first matching appId, and then optionally looks for duplicates as an error checking scheme.

  • thread needs setters and getters for internal variables

  • change cwMpScNbQueue so that it does not require 'new'.

  • cwAudioBuf.cpp - the ch->fn in update() does not have the correct memory fence.

  • change file names to match object names

  • (DONE) change all NULL's to nullptr

  • (DONE) implement kTcpFl in cwTcpSocket.cpp

UI Control Creation Protocol

The UI elements have four identifiers:

uuId - An integer which is unique among all identifiers for a given cwUi object. appId - A constant (enumerated) id assigned by the application. Unique among siblings. jsId - A string id used by Javascript to identify a control. Unique among siblings. jsUuId - An integer which is unique among all identifers for the browser representation of a given cwUi object.

The 'jsId' is selected by the application when the object is created. The 'jsUuId' is generated by the JS client when the UI element is created. The 'uuId' is generated by the UI server when the JS client registers the control. The 'appId' is assigned by the UI server when the JS client regsiters the control.

Client sends 'init' message.
Server sends 'create' messages.
Client sends 'register' messages.
Server send' 'id_assign' messages.

sockaddr_in reference

#include <netinet/in.h>

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

struct in_addr { unsigned long s_addr; // load with inet_aton() };

Development Setup

  1. Install libwebsockets.
    sudo dnf install g++ openssl-devel cmake
    cd sdk
    git clone https://libwebsockets.org/repo/libwebsockets
    cd libwebsockets
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX:PATH=/home/kevin/sdk/libwebsockets/build/out ..
  1. Environment setup:

    export LD_LIBRARY_PATH=~/sdk/libwebsockets/build/out/lib

Raspberry Pi Build Notes:

cd sdk
mkdir libwebsockets
cmake -DCMAKE_INSTALL_PREFIX:PATH=/home/pi/sdk/libwebsockets/build/out -DLWS_WITH_SSL=OFF ..
make
sudo make install

apt install libasound2-dev