Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

38
LINES

< > BotCompany Repo | #1032977 // SumOfVibrations

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (6058L/35K).

// This looks at a number of periods of a given frequency starting at a certain time in the audio
// and returns an intensity value.
// No phase adjustment here, so you have to call this twice to get meaningful (complex) results.
srecord noeq SumOfVibrations(IAudioSample sample, int channel, double start, double freq, int periods) {
  double period, end;
  
  double rawSum() {
    period = sample.sampleRate()/freq;
    double sum = 0, t = start;
    for p to periods: {
      // Subtract an expected trough from an expected neighboring peak and add to overall sum.
      // Nota bene: Trough and peak have the same area (=length), so this is basically a Haar-like feature!
      // By the use of which we automatically get around nasty complications like DC offsets in the input data.
      
      sum += sample.sampleSum(channel, t, t+period/2)
           - sample.sampleSum(channel, t+period/2, t+period);
        
      t += period;
    }
    end = t;
    ret sum;
  }
  
  // alternate calculation adjusted for duration
  double sumDividedByDuration() {
    ret rawSum()/(end-start);
  }
  
  // Not divided by duration - this seems like the best frequency detector at this point.
  // As in a proper FFT/DCT, we return a complex value to represent phase.
  // Call abs() to get the desired intensity value.
  Complex complexSum() {
    SumOfVibrations sum2 = new(sample, channel, start+period/4, freq, periods);
    ret Complex(rawSum(), sum2.rawSum());
  }
  
  double amplitude() { ret abs(complexSum()); }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 3 computer(s): bhatertpkbcr, ekrmjmnbrukm, mqqgnosmbjvj

No comments. add comment

Snippet ID: #1032977
Snippet name: SumOfVibrations
Eternal ID of this version: #1032977/7
Text MD5: dcc0bac5a491590dc3fc4323ce550c68
Transpilation MD5: e6b52075ae2c28843451ce88770657b5
Author: stefan
Category: javax / audio analysis
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-10-11 07:05:47
Source code size: 1556 bytes / 38 lines
Pitched / IR pitched: No / No
Views / Downloads: 178 / 287
Version history: 6 change(s)
Referenced in: [show references]