pvsmix for mixing two pc signals

pvsmix
pvsmix — 두개의pv signals을 고르게 mix한다.

Description
두개의pv signals을 고르게 mix한다. 이 옵코드는 두개의 pvoc stream의 가장 주요한 요소를 하나의 mix된 stream으로 합쳐준다.

Syntax
fsig pvsmix fsigin1, fsigin2

Performance
fsig  — 출력pv stream
fsigin1 — 입력 pv stream.
fsigin2 — 입력 pv stream, fsigin1과 같은 format을 가져야 함.

Examples
Example 289. Example
fsig1        pvsanal  asig1,1024,256,1024,0  ; pvoc analysis
fsig2   pvsanal  asig2,1024,256,1024,0  
fsigout        pvsmix  fsig1, fsig2         ; mix signals
aout        pvsynth fsigout              ; pvoc synthesis
        
입력에 따라 이것은, 음정이 있는 소리를 bell같은 소리처럼 ingarmonic한 소리로 변형시킨다.

pvscale for pitch shift

pvscale
pvscale — pv stream의 frequency components를 scale한다.

Description
pitch shift의 결과가 되는 pv stream의 frequency components를 scale한다. 출력의 amplitudes는 선택적으로 수정되어 formant를 보존하도록 할수 있다.

Syntax
fsig pvscale fsigin, kscal[, ikeepform, igain]]

Performance
fsig — 출력pv stream

fsigin  — 입력pv stream

kscal  — scaling비율.

ikeepform — 입력 시그널을 유지하도록 하기 위해서 — — formants; 0: formants를 유지하지 말 것; 1: formant를 유지할 것(원래의 amplitude를 그대로 가지고 들어옴); 2: 원래의 spectrum envelope를 사용하여 filtering하여 formant를 유지할 것.(기본값 : 0)

igain  — amplitude scaling (기본값: 1).
Pvoc abalysis에서 Hanning window를 사용하면 pitch shift의 질이 향상될 수 있다. Formant의 보존은 강한 formant를 가진 소리(목소리, 악기소리와 같은 것)에서만 성공적으로 나타날 수 있으며, 흥미로운 소리 변화를 줄 수 있다.

Examples
Example 287. Example
asig  in                                 ; get the signal in

fsig  pvsanal   asig, 1024, 256, 1024, 1 ; analyse it
ftps  pvscale   fsig, 1.5, 1, 2          ; transpose it keeping formants
atps  pvsynth  ftps                      ; synthesise it

adp   delayr .1                          ; delay original signal
adel  deltapn 1024                         ; by 1024 samples
      delayw  asig                      
      
       out atps+adel                     ; add tranposed and original
        
위의 보여진 것은 vocal harmoniser이다. Delay는 소리의 time-align에 필요하다. 따라서 analysis-synthesis process 가 analysis input 과synthesis output 사이에 1024 샘플의 Delay를 포함한다.

pvshift

**pvshift이외에 pv stream 관련 opcode들을 다음에도 몇개 더 소개하겠습니다

pvshift

Description
pv stream 의frequency components가 spectrum을 stretching또는 compressing하면서 이동.

Syntax
fsig pvshift fsigin, kshift, klowest[, ikeepform, igain]

Performance
fsig —  pv stream 출력

fsigin — pv stream 입력

kshift — frequency의 이동 량 (Hz, 양수/음수).

klowest — 이동 될frequency의 최하지점

ikeepform — input signal formants를 지속시킴;
0:formants를 지속시키지 않음;
1:원래 amps을 사용하면서 formants 지속
2:원래의 spec envelope을 사용하여0 filtering하면서 formants지속
(기본값: 0).

igain — amplitude scaling (기본값 1).

이 옵코드는 pv stream의 구성요소를 특정 frequency에서부터 일정한 양(Hz)만큼 위아래로 이동시킨다. 이 옵코드는 harmonic spectrum을 inharmonic spectrum으로 전환하는데 사용되면 좋다. ikeepform flag는 가능한 흥미롭고 비범한 spectrum의 변화를 위해 시도되고 formant를 유지하는데 사용할 수 있다.

Examples
Example 288. Example
asig  in                                 ; 이 부분에 시그널을 넣는다.

fsig  pvsanal   asig, 1024, 256, 1024, 1 ; 시그널 분석
ftps  pvshift   fsig, 100, 0             ; 각 성분에 100 Hz를 더함
atps  pvsynth   ftps                     ; 합성
        
입력 시그널에 따라서 음정있는 소리가 inharmonic하게 변경될 수 있다.(벨소리와 같은)
———————————————————————————–

다음은 Matt J. Ingalls이 만든 pvs streams을 사용한 pitch shift예제 입니다.

다음은 채널 하나를 real time으로 사용하였음.
-m

nchnls = 2

opcode pvshift, 0, kkiiiii

; 입력값은 다음과 같다:
; kpitch – pitch shift 의 양[.5=한 옥타브 내림 1=이동없음, 2=옥타브 올림, etc]
; kstretch – spectral shift의 양 [일반적으로; .99-1.01, 1=no stretch]
; inumbins – fft bins의 수 [table의 size]
; iampin – amp data를 포함하고있는 table
; iampout – 수정된 amp data를 쓸 table
; ifreqin – freq data를 포함하는 table
; ifreqout – 수정된freq data 를 쓸 table

kpitch, kstretch, inumbins, iampin, iampout, ifreqin, ifreqout xin

; 반드시 빈 table로 시작해야 한다
iclear ftgen 0, 0, inumbins, 2, 0
tablecopy iampout, iclear
tablecopy ifreqout, iclear

; do-while loop, table들과 이동하는 pitch의 순환(cycling)
kcount = 0
loop:
kindex = kcount/kpitch
if (kindex < inumbins) then
kval table kindex, iampin
kamp table kcount, iampout
tablew kval+kamp, kcount, iampout

kval table kindex, ifreqin
tablew kval*kpitch, kcount, ifreqout
endif

kcount = kcount + 1
kpitch = kpitch * kstretch

if (kcount < inumbins) kgoto loop endop instr 2 ; pvshift opcode 의 test ; 입력을 넣고 pv anal 을 실행
ifftsize = 1024
iNumBins = ifftsize/2 + 1

ainl, ainr ins
fsigl pvsanal ainl, ifftsize, ifftsize/4, ifftsize*2, 0
; [ 또는 pvoc-ex file와 함께 pvsfread를 대신 사용할수있음 ]

; make ftables
iampin ftgen 0,0,iNumBins,2,0
iampout ftgen 0,0,iNumBins,2,0
ifreqin ftgen 0,0,iNumBins,2,0
ifreqout ftgen 0,0,iNumBins,2,0

; gui controls
kfiltl invalue “filtl”
kfilth invalue “filth”
kpitch invalue “pitch”
kstretch invalue “stretch”

; fsig 를 tables로 내보냄
kflag pvsftw fsigl, iampin, ifreqin
if (kflag > 0) then ; frame이 준비되었을때만

; pitch shift/stretch
pvshift kpitch, kstretch, iNumBins, iampin, iampout, ifreqin, ifreqout

; 다시 fsrc로 수정된 data를 읽는다read modified data back to fsrc
pvsftr fsigl, iampout, ifreqout

endif

; 재합성, 출력 – 건드리지 않은 오른쪽 채널과 비교
aoutl pvsynth fsigl

outs aoutl, ainr

endin