Simple audio in-out code for the ADSP-BF706 EZ-KIT

I have an audio in-out program in C for the ADSP-BF706 EZ-KIT mini, about 80 lines in length. It's simple and very easy to understand. It's also completely self-contained - it doesn't use any of the header files that the "TalkThrough_BF706Mini.c" program uses (supplied with the kit). It includes a basic TWI driver, SPORT0 set up and configuration routine for the on board codec (ADAU1761). With some simple modifications it can be used for filtering, both FIR and IIR. The file is attached. All welcome to use free.

PatrickG

BF706_audio_inout.pdf
Parents
  • Hello Mario,

    Double buffering is not necessary as long as you do sample by sample processing.
    This is often a good choice producing the lowest possible audio latency.
    It is also quite efficient (<5% overhead). More than 400 biquad filters can
    be performed at 48kHz sampling rate (32 bit, C++, inline, release mode).
    Blackfin+ is a very powerful processor!

    However, if block processing is needed (to implement FFT based algorithms like
    overlap save) some sort of double buffering is necessary:

    During the processing of one audio buffer new samples are stored a separate buffer.
    If one block is full, the recording and processing buffers are swapped.
    The same is true for audio output. One buffer is sent to the output while a separate
    buffer is filled with input. I have implemented this manually in BF706_Block_Filter.zip (main.cpp).

    2D-DMA is a clever way to do this automatically: BF706 2D DMA Audio Loopback 

    Did you find another way to implement this?

    Best regards
    Uwe

Reply
  • Hello Mario,

    Double buffering is not necessary as long as you do sample by sample processing.
    This is often a good choice producing the lowest possible audio latency.
    It is also quite efficient (<5% overhead). More than 400 biquad filters can
    be performed at 48kHz sampling rate (32 bit, C++, inline, release mode).
    Blackfin+ is a very powerful processor!

    However, if block processing is needed (to implement FFT based algorithms like
    overlap save) some sort of double buffering is necessary:

    During the processing of one audio buffer new samples are stored a separate buffer.
    If one block is full, the recording and processing buffers are swapped.
    The same is true for audio output. One buffer is sent to the output while a separate
    buffer is filled with input. I have implemented this manually in BF706_Block_Filter.zip (main.cpp).

    2D-DMA is a clever way to do this automatically: BF706 2D DMA Audio Loopback 

    Did you find another way to implement this?

    Best regards
    Uwe

Children
No Data