<div dir="ltr"><p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial">Hi all !</span><span lang="EN-US" style="font-size:12pt;font-family:"Times New Roman",serif"></span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">If
someone could give me a hint on how to proceed with the following i'd be very
happy:</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">I
have a test setup on an nrf52832 (Cortex M4) in which I receive audio from a
PDM microphone (64 sample frame) and pass it directly to an I2S device i.e.
from ISR to ISR. With uncompressed audio this works just fine.</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Now
I try to insert OPUS1.3 in the path but cannot make it work. The audio passes
through but ends up “down pitched” and heavily distorted. </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Due
to the 32MHz base clock (+ prescalers) available it is not possible to get the
desired 16kHz sample rate. I am therefore forced to work with 15625Hz.</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">As
I understand it the opus encoder does not mind a strange sample rate as it will
re-sample it to 48kHz (Correct?). The decoder, however, will always output
48kHz, 24kHz, 16kHz etc (Correct?) which is incompatible with my 15625Hz rate.
(However; If my assumptions are correct there could be a possibility to make my
I2S device master and, thus, be able to pull the data at 16kHz)</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Consequently
I have been looking at “opus custom” as a solution but even with a (seemingly)
low complexity it does not yield the desired result.</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><u><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Setup
code:</span></u></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">mode
= opus_custom_mode_create(15625, 64, &err);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">size
= opus_custom_encoder_get_size(mode, 1);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">enc
= malloc(size);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">err
= opus_custom_encoder_init(enc, mode, 1);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">err
= opus_custom_encoder_ctl(enc, OPUS_SET_BITRATE(16000));</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">err
= opus_custom_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">size
= opus_custom_decoder_get_size(mode, 1);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">dec
= malloc(size);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">err
= opus_custom_decoder_init(dec, mode, 1);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><u><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">ISR
code (called once every 4.096ms):</span></u></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">    nbBytes = opus_custom_encode(</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">        enc, (opus_int16 *)lMicBuf, 64,
codedMicBuf, 64);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">    frame_size = opus_custom_decode(</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">        dec, codedMicBuf, 64, decodedMicBuf, 64);</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><u><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Build:</span></u></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">C:\Program
Files\SEGGER\SEGGER Embedded Studio for ARM
3.50\gcc\arm-none-eabi\bin\cc1" -fmessage-length=0
-fno-diagnostics-show-caret -mcpu=cortex-m4 -mlittle-endian -mfloat-abi=hard
-mfpu=fpv4-sp-d16 -mthumb -mtp=soft -nostdinc "-isystem</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">-D__SIZEOF_WCHAR_T=4
-D__ARM_ARCH_7EM__ -D__SES_ARM -D__ARM_ARCH_FPV4_SP_D16__ -D__SES_VERSION=35000
-DARM_MATH_CM4 -D__FPU_PRESENT -DDEBUG "-D DEBUG_NRF"
-DCONFIG_GPIO_AS_PINRESET -DINITIALIZE_USER_SECTIONS -DNO_VTOR_CONFIG -DNRF52
-DNRF52832_XXAA -DCONFIG_NFCT_PINS_AS_GPIOS -DOPUS_BUILD -DVAR_ARRAYS
-DFIXED_POINT -DDISABLE_FLOAT_API -DCUSTOM_MODES "-DARM_MATH_CM4 "
"-DOPUS_ARM_INLINE_EDSP " -DDOPUS_ARM_INLINE_ASM
-DOPUS_ARM_INLINE_MEDIA -MD </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Any
ideas?</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Regards</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 0.0001pt;line-height:normal;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US" style="font-size:12pt;font-family:Arial,sans-serif">Peter</span></p></div>