diff options
Diffstat (limited to 'command/audio.cpp')
-rw-r--r-- | command/audio.cpp | 120 |
1 files changed, 26 insertions, 94 deletions
diff --git a/command/audio.cpp b/command/audio.cpp index 46fa57a..082010f 100644 --- a/command/audio.cpp +++ b/command/audio.cpp @@ -11,11 +11,6 @@ #include <stdlib.h> #include <string.h> -extern "C" -{ -#include "debug.h" -} - #include "audio.h" cMarkAdAudio::cMarkAdAudio(MarkAdContext *maContext) @@ -31,12 +26,21 @@ cMarkAdAudio::cMarkAdAudio(MarkAdContext *maContext) cMarkAdAudio::~cMarkAdAudio() { - Clear(); ResetMark(); + Clear(); +} + +void cMarkAdAudio::Clear() +{ + channels=0; + if (result.CommentBefore) free(result.CommentBefore); + if (result.CommentAfter) free(result.CommentAfter); + memset(&result,0,sizeof(result)); } void cMarkAdAudio::ResetMark() { + if (!mark.Type) return; if (mark.Comment) free(mark.Comment); mark.Comment=NULL; mark.Position=0; @@ -68,55 +72,6 @@ bool cMarkAdAudio::AddMark(int Type, int Position, const char *Comment) return true; } -bool cMarkAdAudio::AnalyzeGain(int FrameNumber) -{ - if (!macontext->Audio.Data.Valid) return false; - - int samples=macontext->Audio.Data.SampleBufLen/ - sizeof(*macontext->Audio.Data.SampleBuf)/ - macontext->Audio.Info.Channels; - - double left[samples]; - double right[samples]; - - for (int i=0; i<samples; i++) - { - left[i]=macontext->Audio.Data.SampleBuf[0+(i*2)]; - right[i]=macontext->Audio.Data.SampleBuf[1+(i*2)]; - } - - if (FrameNumber!=lastframe_gain) - { - if ((lastframe_gain>0) && (audiogain.AnalyzedSamples()>=(3*samples))) - { - double gain = audiogain.GetGain(); - printf("%05i %+.2f db\n",lastframe_gain,gain); - } - audiogain.Init(macontext->Audio.Info.SampleRate); - lastframe_gain=-1; - } - - if (audiogain.AnalyzeSamples(left,right,samples,2)!=GAIN_ANALYSIS_OK) - { - lastframe_gain=-1; - return false; - } - else - { - lastframe_gain=FrameNumber; - } - return true; -} - -void cMarkAdAudio::Clear() -{ - channels=0; - lastframe_gain=-1; - if (result.CommentBefore) free(result.CommentBefore); - if (result.CommentAfter) free(result.CommentAfter); - memset(&result,0,sizeof(result)); -} - bool cMarkAdAudio::ChannelChange(int a, int b) { if ((a==0) || (b==0)) return false; @@ -124,24 +79,6 @@ bool cMarkAdAudio::ChannelChange(int a, int b) return false; } -MarkAdPos *cMarkAdAudio::Process2ndPass(int FrameNumber) -{ - if (!FrameNumber) return NULL; -#if 0 - if (AnalyzeGain(FrameNumber)) - { - if (result.CommentBefore) free(result.CommentBefore); - if (asprintf(&result.CommentBefore,"audio silence detection (%i)",FrameNumber)==-1) - { - result.CommentBefore=NULL; - } - result.FrameNumberBefore=FrameNumber; - return &result; - } -#endif - return NULL; -} - MarkAdMark *cMarkAdAudio::Process(int FrameNumber, int FrameNumberNext) { if ((!FrameNumber) || (!FrameNumberNext)) return NULL; @@ -155,38 +92,33 @@ MarkAdMark *cMarkAdAudio::Process(int FrameNumber, int FrameNumberNext) snprintf(buf,255,"audio channel change from %i to %i (", channels, macontext->Audio.Info.Channels); - if (macontext->Info.Channels) + if (macontext->Audio.Info.Channels>2) { - if (macontext->Info.Channels==macontext->Audio.Info.Channels) - { - char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)*",FrameNumberNext); - nbuf[19]=0; - strcat(buf,nbuf); - AddMark(MT_CHANNELSTART,FrameNumberNext,buf); - } - else - { - char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)",framelast); - nbuf[19]=0; - strcat(buf,nbuf); - AddMark(MT_CHANNELSTOP,framelast,buf); - } + char nbuf[20]; + snprintf(nbuf,sizeof(nbuf),"%i)*",FrameNumberNext); + nbuf[19]=0; + strcat(buf,nbuf); + AddMark(MT_CHANNELSTART,FrameNumberNext,buf); } else { char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)?",FrameNumber); + snprintf(nbuf,sizeof(nbuf),"%i)",framelast); nbuf[19]=0; strcat(buf,nbuf); - AddMark(MT_CHANNELCHANGE,FrameNumber,buf); + AddMark(MT_CHANNELSTOP,framelast,buf); } free(buf); } channels=macontext->Audio.Info.Channels; framelast=FrameNumber; - return &mark; + if (mark.Position) + { + return &mark; + } + else + { + return NULL; + } } - |