Linux audio module -- 2
Budget: $250 – $750 USD
Relatively simple C++ module to handle 2-way I2S interfacing using standard ALSA mechanisms.
I have a preliminary non-optimized C++ working prototype project version in VSCode and would like a professional developer to review it and potentially refactor it and make optimized. Raspberry PI is the target HW platform
Key requirements and software functions:
• 2-way I2S interfacing with RPi at 352,8/384 kHz
• Module divided into three main sections:
1) input I2S audio data receiving
2) audio data processing
3) output I2S data transfer
• Ad 1) Audio will be received in blocks of 1..5k samples per one channel (stereo transmission). The size of the audio data in a block depends on the incoming sample rate, e.g. for 48kHz there will be one data sample interleaved with 7 zeros (since the I2S transfer speed will be 8x48k = 384k)
• Ad 2) There should be 2 instances (threads) of a C++ procedure handling very elementary copying of audio data blocks from input buffers to output buffers. Each of them should be allocated to a dedicated, separate CPU core to achieve highest performance.
When this project is finished and ready I will put my own audio processing into these 2 procedures
• Ad 3) The result of the audio processing in the procedures in section 2) will be transferred out via I2S port
I put a few technical questions below that are key to successful work on this module. I shall appreciate if you provide your answers to these questions on chat. It will help me to get a good feeling of your skills and experience and avoid potential mismatch:
1) Do you have experience in development in Linux for Raspberry Pi or other embedded Linux ? What kind of projects have you completed ? What kind of development and debugging environment have you used in these projects (e.g. VSCode over SSH, etc)
2) How do you propose to organize the module – what should start the 2 audio processing procedures – availability of new input data or rather completion of outgoing data transfer ? What kind of Linux/ALSA mechanisms you would use to coordinate/synchronize running of key 3 parts of the module: input I2S audio data receiving, audio data processing and output I2S data transfer ?
3) What kind of ALSA mechanisms you would suggest to use – e.g. asynchronous callback or something else ?
4) What kind of data buffering mechanisms would you consider to use (e.g. double buffering, some open-source queue library, simple own queue implementation, etc.) ?
5) I would like to maximize the performance and fully use the available processing power in the 2 audio processing procedures. What kind of tools or mechanisms you would use to monitor software efficiency and to be able to monitor how much processing power is consumed in the three main parts of the software (input receipt, data processing and output transfer) ?
Pawel
I have a preliminary non-optimized C++ working prototype project version in VSCode and would like a professional developer to review it and potentially refactor it and make optimized. Raspberry PI is the target HW platform
Key requirements and software functions:
• 2-way I2S interfacing with RPi at 352,8/384 kHz
• Module divided into three main sections:
1) input I2S audio data receiving
2) audio data processing
3) output I2S data transfer
• Ad 1) Audio will be received in blocks of 1..5k samples per one channel (stereo transmission). The size of the audio data in a block depends on the incoming sample rate, e.g. for 48kHz there will be one data sample interleaved with 7 zeros (since the I2S transfer speed will be 8x48k = 384k)
• Ad 2) There should be 2 instances (threads) of a C++ procedure handling very elementary copying of audio data blocks from input buffers to output buffers. Each of them should be allocated to a dedicated, separate CPU core to achieve highest performance.
When this project is finished and ready I will put my own audio processing into these 2 procedures
• Ad 3) The result of the audio processing in the procedures in section 2) will be transferred out via I2S port
I put a few technical questions below that are key to successful work on this module. I shall appreciate if you provide your answers to these questions on chat. It will help me to get a good feeling of your skills and experience and avoid potential mismatch:
1) Do you have experience in development in Linux for Raspberry Pi or other embedded Linux ? What kind of projects have you completed ? What kind of development and debugging environment have you used in these projects (e.g. VSCode over SSH, etc)
2) How do you propose to organize the module – what should start the 2 audio processing procedures – availability of new input data or rather completion of outgoing data transfer ? What kind of Linux/ALSA mechanisms you would use to coordinate/synchronize running of key 3 parts of the module: input I2S audio data receiving, audio data processing and output I2S data transfer ?
3) What kind of ALSA mechanisms you would suggest to use – e.g. asynchronous callback or something else ?
4) What kind of data buffering mechanisms would you consider to use (e.g. double buffering, some open-source queue library, simple own queue implementation, etc.) ?
5) I would like to maximize the performance and fully use the available processing power in the 2 audio processing procedures. What kind of tools or mechanisms you would use to monitor software efficiency and to be able to monitor how much processing power is consumed in the three main parts of the software (input receipt, data processing and output transfer) ?
Pawel