GEN43
Prev | Score Statements and GEN Routines | Next

## GEN43

GEN43 — Loads a PVOCEX file containing a PV analysis.

## Description

This subroutine loads a PVOCEX file containing the PV analysis (amp-freq) of a soundfile and calculates the average magnitudes of all analysis frames of one or all audio channels. It then creates a table with these magnitudes for each PV bin.

## Syntax

    f # time size 43 filecod channel

## Initialisation

size -- number of points in the table, power-of-two or power-of-two plus 1. GEN 43 does not make any distinction between these two sizes, but it requires the table to be at least the fftsize/2. PV bins cover the positive spectrum from 0Hz (table index 0) to the Nyquist (table index fftsize/2+1) in equal-size frequency increments (of size sr/fftsize).

filcod -- a pvocex file (which can be generated by pvanal).

channel -- audio channel number from which the magnitudes will be extracted; a 0 will average the magnitudes from all channels.

Reading stops at the end of the file.

| Note
if p4 is positive, the table will be post-normalised. A negative p4 will cause post-normalisation to be skipped.

## Examples

Here is an example of the GEN43 routine. It uses the files gen43.csd.

Note: In this example, the .csd uses the ‘system_i’ opcode to launch and run the pvanal utility and analyze a section from the sound file, finneganswake1.flac, where we find a bit of reverb and noise. The ‘reverbnoise’ selection has a duration of 0.8 seconds (-d0.8) which we find after 1.04 seconds of the source (-b1.04) and thus pvanal creates the pvocex file that we use in instrument 3 to remove this noise and reverb from the original with the pvstencil opcode.

Example 1309. An example of the GEN43 routine.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac      ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o GEN43.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    ; by Menno Knevel 2021

    sr = 44100
    ksmps = 32
    nchnls = 2
    0dbfs  = 1

    ; Audacity shows the selection of reverb and noise- see image above

    instr 1 ; analyze this selection and output result to pvx file
    ires system_i 1,{{
        pvanal -b1.04 -d0.8 finneganswake1.flac reverbnoise.pvx
            }}
    endin

    instr 2 ; untreated signal, contains some reverb and noise
    asig    diskin2   "finneganswake1.flac", 1
    outs    asig, asig
    endin

    instr 3 ; use .pvx file from instr. 1 to remove reverb and noise
    ; pvanal created 1 frame of size 1024, so size of table for GEN 43 = 512 (fftsize/2)
    ipvx    ftgen 1, 0, 512, -43, "reverbnoise.pvx", 0    ; can be found in examples folder
    asig    diskin2   "finneganswake1.flac", 1
    fsig    pvsanal   asig, 1024, 256, 1024, 1
    fclean  pvstencil fsig, 0, 1, ipvx ; maximum cleaning
    aclean  pvsynth   fclean
    outs    aclean, aclean
    endin

    </CsInstruments>
    <CsScore>
    i1 0   2       ; first analyze
    i2 5  12.7     ; untreated signal
    i3 20 12.7     ; denoised gignal
    e
    </CsScore>
    </CsoundSynthesizer>

These tables can be used as a masking table for pvstencil and pvsmaska.

    f1 0 512   43  "viola.pvx" 1
    f1 0 -1024 -43 "noiseprint.pvx" 0

The first example uses a 1024-point FFT phase vocoder analysis file from which the first channel is used. The second uses all channels of a 2048-point file, without post-normalisation. For noise reduction applications with pvstencil, it is easiest to skip table normalisation (negative GEN code).

## Credits

Author: Victor Lazzarini

Prev | Up | Next
GEN42 | Home | GEN44