From 317ed4bf1754a028e35d642362d48d16d924ea58 Mon Sep 17 00:00:00 2001 From: "clayton.otey@gmail.com" Date: Fri, 11 Jun 2010 01:34:52 +0000 Subject: [PATCH] sbsms Transient Sharpening shouldn't crash anymore, but it's not thoroughly tested yet. --- lib-src/sbsms/src/subband.cpp | 64 +++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/lib-src/sbsms/src/subband.cpp b/lib-src/sbsms/src/subband.cpp index 203ee985d..8c0a8dc2e 100644 --- a/lib-src/sbsms/src/subband.cpp +++ b/lib-src/sbsms/src/subband.cpp @@ -296,8 +296,8 @@ void subband :: write_(audio *inBuf, long n, real a, real ratio) long n_advance = 0; for(int k=0;kreadPos;kwritePos;k++) { if(nDropped < nToDrop) { - nDropped++; + nDropped++; } else { - if(!parent && (nTrackPointsWritten)%nGrainsPerFrame == 0) { - grain *g = inPre->read(k); - grain::referenced(g); - real o = calculateOnset(gPrev,g); - onset.write(o); - if(gPrev) grain::forget(gPrev); - gPrev = g; - setA(a); - } - if(!parent && (nTrackPointsWritten+1)%nGrainsPerFrame == 0) { - setAForH(a); - } - if((nTrackPointsWritten+1)%nGrainsPerFrame == 0) { - setH(ratio); - } - nTrackPointsWritten++; + if(!parent && (nTrackPointsWritten)%nGrainsPerFrame == 0) { + grain *g = inPre->read(k); + grain::referenced(g); + real o = calculateOnset(gPrev,g); + onset.write(o); + if(gPrev) grain::forget(gPrev); + gPrev = g; + setA(a); + } + if(!parent && (nTrackPointsWritten+1)%nGrainsPerFrame == 0) { + setAForH(a); + } + if((nTrackPointsWritten+1)%nGrainsPerFrame == 0) { + setH(ratio); + } + nTrackPointsWritten++; } ng_read++; } @@ -1131,9 +1131,9 @@ void subband :: preAnalyzeComplete() for(long k=k0;k 0.4f) || (o0>1.4f*o1)); if(!bOnset && k>k0+1) { - real o2 = getOnset(k-2); - bOnset = ((o0 > 1.2f*o1) && (o1 > 1.2f * o2)); - if(!bOnset && k>k0+2) { - real o3 = getOnset(k-3); - bOnset = ((o0 > 0.3f) && (o1 > 1.1f * o2) && (o2 > 1.1f * o3)); - } + real o2 = getOnset(k-2); + bOnset = ((o0 > 1.2f*o1) && (o1 > 1.2f * o2)); + if(!bOnset && k>k0+2) { + real o3 = getOnset(k-3); + bOnset = ((o0 > 0.3f) && (o1 > 1.1f * o2) && (o2 > 1.1f * o3)); + } } } if(bOnset) { if(kend != 0) { - calculateA(kstart,kend); + calculateA(kstart,kend); } kstart = kend; kend = k; } } calculateA(kstart,k1); + aPreAnalysis.write(1.0f); + aPreAnalysis.advance(1); } void subband :: calculateA(long kstart, long kend) @@ -1170,6 +1172,8 @@ void subband :: calculateA(long kstart, long kend) if(o > oMax) oMax = o; } + oMax *= 1.3; + for(long k=kstart;k