<div dir="ltr">Hello everybody!<br>I need help solving my problem.<br><br>I wanted to make a C++ implementation of the Audio silence detector. I used the example from github (<a href="https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/af_silencedetect.c">https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/af_silencedetect.c</a>). I have also simplified this example to the following form.<div><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">nb_samples</span>            = <span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">frame</span>-><span style="color:rgb(156,220,254)">nb_samples</span>     * <span style="color:rgb(156,220,254)">nb_channels</span>;</div><div>        <span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(78,201,176)">int64_t</span> <span style="color:rgb(156,220,254)">nb_samples_notify</span> = <span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">srate</span> * <span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">duration</span>¬†*¬†<span style="color:rgb(106,153,85)">this->nb_channels:</span></div></div><div><span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">frame</span>-><span style="color:rgb(156,220,254)">format</span> == <span style="color:rgb(79,193,255)">AV_SAMPLE_FMT_S16P</span>) {</div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(78,201,176)">int16_t</span> *<span style="color:rgb(156,220,254)">p</span> = (<span style="color:rgb(86,156,214)">const</span> <span style="color:rgb(78,201,176)">int16_t</span> *)<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">frame</span>-><span style="color:rgb(156,220,254)">data</span>[<span style="color:rgb(181,206,168)">0</span>];</div></blockquote><br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(197,134,192)">for</span> (<span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(156,220,254)">i</span> = <span style="color:rgb(181,206,168)">0</span>; <span style="color:rgb(156,220,254)">i</span> < <span style="color:rgb(156,220,254)">nb_samples</span>; <span style="color:rgb(156,220,254)">i</span>++, <span style="color:rgb(156,220,254)">p</span>++) {</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(197,134,192)">if</span> (*<span style="color:rgb(156,220,254)">p</span> < <span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">noise</span> && *<span style="color:rgb(156,220,254)">p</span> > -<span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">noise</span>) {</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(197,134,192)">if</span> (!<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">start</span>) {</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">nb_null_samples</span>++;</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">nb_null_samples</span> >= <span style="color:rgb(156,220,254)">nb_samples_notify</span>) {<span style="color:rgb(106,153,85)"> //nb_samples_notify</span></div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">start</span> = <span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">frame</span>-><span style="color:rgb(156,220,254)">pts</span> - (<span style="color:rgb(78,201,176)">int64_t</span>)(<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">duration</span> / <span style="color:rgb(220,220,170)">av_q2d</span>(<span style="color:rgb(156,220,254)">time_base</span>) + <span style="color:rgb(181,206,168)">.5</span>);</div></blockquote></blockquote></blockquote></blockquote><br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(78,201,176)">Log</span>::<span style="color:rgb(220,220,170)">write</span>(<span style="color:rgb(206,145,120)">"silence detected start = "</span> <span style="color:rgb(220,220,170)">+</span> <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(220,220,170)">to_string</span>(<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(220,220,170)">getCurrentSec</span>()));</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>                        }</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>                    }</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>                } <span style="color:rgb(197,134,192)">else</span> {</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(197,134,192)">if</span> (<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">start</span>) {</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silent</span> = <span style="color:rgb(86,156,214)">false</span>;</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(78,201,176)">Log</span>::<span style="color:rgb(220,220,170)">write</span>(<span style="color:rgb(206,145,120)">"silence detected end = "</span> <span style="color:rgb(220,220,170)">+</span> <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(220,220,170)">to_string</span>(<span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(220,220,170)">getCurrentSec</span>()));</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>                    }</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">nb_null_samples</span> = <span style="color:rgb(86,156,214)">this</span>-><span style="color:rgb(156,220,254)">silence</span>-><span style="color:rgb(156,220,254)">start</span> = <span style="color:rgb(181,206,168)">0</span>;</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>                }</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>            }</div></blockquote><div>        }</div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-size:14px;line-height:19px;white-space:pre"></div><div><br></div><div>nb_samples = 2304</div><div>srate = 48000</div><div>nb_chaneks = 2</div><div>noise = 0.001</div><div>duratiion¬†= 0.7</div><div>//</div><div>input video file format - * .ts<br>audio codec - mp2<br></div><div><br>In "*p" I get very strange data (for example -22634) and as a result, silence was not detected.<br><br>Please tell me what I'm doing wrong? (because ffmpeg can find silence in this file)<br></div><div><br></div></div>