2009年6月2日 星期二

Partial Tracking - centcent

20081118
主要是訂正 F0 frequency的精準度。
我們所得到的trajectory主要是由 F0 candidate 所產生出來的。

從Ircam的資料,我們可以明確的得知說每個frame 的 F0 candidate 是否有包含 Estimated F0。
可是從義崧的程式,只能得到上述兩個的Frequency,所以當初這部分的判斷和維城是用討論之後是用FFT bin來判斷。

不過因為義崧程式得到的 Estimated F0 的 bin 是經過權重之後的結果,會有小數,因此將這個bin 四捨五入之後在和F0 candidate的bin 做判斷,因此會有誤差存在。所以才會造成一直線的狀況發生

因為Estimated F0 的 bin經過四捨五入之後為20,包含於F0 candidate的bin,如下圖




解決辦法,如果一個frame的F0 candidate有包含 Estimated F0,這時就將F0 candidate其中的 frequency改成有包含Estimated F0的bin frequency。



投影片

comments:
1. 原先的 pruning 是判斷有無 estimated F0來移除 trajectory。
2. 如果我們沒有estimated F0的資訊,只有F0 candidate,想方法來判斷是否為 partial,移除掉其他非partial的部分,最後再利用找出來的partial來找出F0。
------------------------------------------------------------------------------------
20081125
這星期主要做的就是看能不能從義崧的程式找出更多的 candidate 出來。
改變設定上下限的變數即可找出多一點的 candidate ,不過低頻的地方看起來有很多非真正 candidate 的點。


另外發現如果有太多的 candidate,pruning 這動作好像無法找出真正的F0出來,這部分還要再仔細去看數據才知道哪裡出問題。

投影片

comments:
1. 會造成低頻有這麼多假的node,應該是因為是取最大公因數。要濾掉這些node,除了考慮這些點的weight之外,在去看看這些node有沒有能量存在
2. 如果F0沒有能量,這種例外的狀況,再想辦法來解決

------------------------------------------------------------------------------------
20081202
發現之前用當作 F0 candidate的資料是我找錯了,我找成義崧用來投票的,所以結果就不這麼好看。這次的結果看起來比較正常了。



是否可以試著透過義崧的演算法將已經找到的 partial 的資訊移除,然後再找另一個partial?
partial是經由投票所產生的,而每個bin都有提供各自的 weight,若將每個bin提供的weight記錄下來,每找完一個partial,每個bin就減掉之前提供的weight,再用來找下一個partial

投影片

comments:
1. 增加一些參數給HMM,例如能量以及partial之間的相關性
2. inharmonicity 的狀況:或許不一定要看基頻,而可以只看前一個或二個的partial
------------------------------------------------------------------------------------
20081209
1. 上週提到「是否可以試著透過義崧的演算法將已經找到的 partial 的資訊移除,然後再找另一個partial?」這部分實做的時候移除weight後沒有重算bin的能量。
2. 找到一篇paper提到說freq 和 amp 在顫音的時候,freq 上升,amp會下降。paper中提出可以把 d^2 = [(fi - fj)(ai-aj)]^2 當成 HMM 中transition Prob的參數。

投影片
paper

comments:
1. paper 的假設是錯的,如果整個音源來看是對的,可是如果看單一partial的話,並不是絕對。
------------------------------------------------------------------------------------
20081210
1. 找鋼琴inharmonicity 的曲線,直接套用此曲線即可。
2. 斷掉的partial相連,試著找出一組公式,放進去HMM裡當參數。或者用公式來 implement
3. 由義崧的演算法,找出F0之後,再找F0的倍頻,看看倍頻附近是否有peak存在(能量大的),這個peak則為F0的partial。找出一個F0以及其partial,將這些移除,再找下一組F0和partial。若有鋼琴存在,則套用[1]的曲線公式。
---------------------------------------------------------------------------------
20081216
1. 義崧學長有針對bin下去做平滑化,當初是避免有小突起的peak,不過這樣會造成multiple f0差三根bin會找不到,所以把這部分移除掉。
2. 根據20081210,找出F0之後,再找F0的倍頻,看看倍頻附近是否有peak存在(能量大的),這個peak則為F0的partial,這邊判斷方式用12平均率,f0的倍數上下半個半音是否有能量存在,大約是上下3%。
3. 上面那個判斷方式,在高頻部分,有可能會包含許多bin進來,因此,將最接近f0*multiple的peak視為f0的partial

投影片
----------------------------------------------------------------------------------
20081223
1. 這次完成找出multiple f0了,針對小提琴和長笛下去做處理,找partial的判斷方式為
f0 * mutiple * 0.97 <= peak <= f0 * mutiple * 1.03
找出的結果如下圖

2. piano inharmonicity:根據[H. Fletcher, E. D. Blackham, and R. Stratton, 「Quality of piano tones,」 J. Acoust. Soc. Am., vol. 34, no. 6, pp. 749–761, 1962.]這篇論文,鋼琴的partial 頻率和鋼琴每根弦的直徑、長度、張力、材質有關。

投影片

comments:
1. 判斷partial的範圍:若要找第N個partial,f(N):
(△f + f(N-1)) * 0.97 <= peak <= (△f + f(N-1)) * 1.03
△f = f(N-1) - f(N-2)
------------------------------------------------------------------------------------
20081225
1. 12月23號那張圖的第一段音樂,F0有260HZ和330HZ,可是找出來的結果330HZ沒有找到,這和我們設定上下3%其實沒有關連,會造成這樣的結果是因為義崧的程式有一段是針對二胡的特性來寫的,二胡的最高能量不一定落在f0,可能落在2或3倍頻,因此用這段程式碼來找出F0。將這部分拿掉就可以找到260HZ和330HZ了。
2. 將原本找partial的判斷式改為
(△f + f(N-1)) * 0.97 <= peak <= (△f + f(N-1)) * 1.03
△f = f(N-1) - f(N-2)
結果如下圖:

這邊發現一個問題:原訊號如果兩個partial相當接近,而一個partial 能量遠大於另一個partial,能量較小的那個partial會無法找到。以這張圖為例,F0為260和330,在990和1040附近應該都要有partial,可是990的能量遠大於1040,就無法找到1040這個partial。
我想這是因為一開始要將有peak的bin考慮進來的時候,包含1040HZ的這根bin並沒有特別突出,這根bin就沒有被考慮進來了。
------------------------------------------------------------------------------------
20081230
偷懶了一下,這麼晚才更新
1. 如果兩個音只差一個半音,只能找到一個F0,而且這個F0會落在兩個音頻率的中間。例如Violin:260Hz & Flute:277Hz,找出來的結果大約是269Hz,因此這269Hz的partial都沒有能量也就沒有找到。


投影片

comments:
1. 關於12/25提到的partial能量不夠大,DNA提到可以做類似將高頻的能量平方的動作,或許可以使peak更為明顯。
2. 12/25的結果,高頻部分有些partial斷掉,在HMM中加入是否為partial的condition。
-----------------------------------------------------------------------------------
20090106
comments:
1. 關於F0s差半個音無法辨別出來,可以針對低頻部分提高解析度來做
2. 高頻部分,可以利用影像處理的前處理方式,做一個operator來處理,來辨別出我們所要的資訊
-----------------------------------------------------------------------------------
20090209
1. 之前關於低頻F0s差一個半音無法辨別出來,這段期間有做一些提高解析度(zero padding)以及一些作法來實驗。
a. 經過 lowpass filter
b. 經過 lowpass filter 再做 zero padding
c. 認為高頻有太多的candidate影響投票,所以只拿一半的 candidate 來投票
d. 只拿1.2K以下的candidate來投票
發現都無法找出兩個F0(260Hz、277Hz)。
後來發現原來是義崧學長在找candidate的時候,會根據一個peak的前後兩根 bin 找最大個一根來當作candidate,在samplerate=44100,framesize=8192時,260Hz和277Hz大概差3~4根bin,所以在這個地方就只會把其中一個拉進去當candidate。所以沒有這兩個candidate。
2. 將這地方拿掉之後就可以正確的找到260Hz和277Hz了,只是高頻部分(2.5kHz以上)有點糟糕。

3. spectrum要幾次方以及protrudeValue的threshold會影響 260Hz&277Hz 和 260Hz&330Hz 的結果,第一個結果不錯,第二個就有點糟,這地方還要多測試。
------------------------------------------------------------------------------------
20090212
1. 多設定一個noise floor,將原本的spectrum扣掉這條 noise floor再去做後面的動作。noise floor的做法為往前往後看L點,取平均
s[i] = Σ x[i-k] / (2L+1) , k = -L ~ L
x:原本spectrum
這樣做可以避免若基頻落在高頻的時候,低頻一些peak會影響結果,導致找出來的F0落在低頻。
2. 原本義崧學長程式中protrudeValue表示的是 (magnitude of a peak) / (magnitude of the higher foot),這邊我改成用斜率表示。
260 & 277Hz

260 & 330Hz

1046 & 1108Hz

-----------------------------------------------------------------------------------
20090217
1. 修正bug:原本 F0 * 0.97 < F0 < F0 * 1.03,沒有處理在這個範圍內有兩個以上的bin。新增要找最接近的bin。
2. 在找 candidate 時,新增一個threshold:比最大能量小 48db(約1 / 256)的bin 不考慮進來。針對單純沒有變音的就抓的比較漂亮了。
1046 & 1108 Hz

3. 找了巴哈無伴奏的一段音樂來跑,有六段不同基頻(小明聽出來的),分別是
a. 0 - 1 sec : 830 Hz
b. 1 - 2 sec : 260 Hz & 493 Hz
c. 2 - 2.5 sec : 440 Hz
d. 2.5 - 3 sec : 554 Hz
e. 3 - 3.5 sec : 698 Hz
f. 3.5 ~ sec : 830 Hz
原始的圖如下:

找到的F0:在應該只有單音的地方找到多個F0,應該是換音所造成的,畢竟從能量上來看,這些frequency 以及其倍頻都還有能量存在。

F0 以及 Partial:

----------------------------------------------------------------------------------
20090223
1. 老師提出的對每一根有可能是f0的bin,將五倍以內的bin都取出來投票,若有得到F0以及其
partial,則下一輪投票就不要將這些考慮進來。只是這樣結果好像沒有比較好,跟上次的比較起來,F0少了一點。

2. 用midi產生DoMeSo,結尾加上 reverb,再加上ReFaLa。
Wav:

F0:在有重疊到的地方,找的還不錯

------------------------------------------------------------------------------------
20090225
1. 20090223提到的第一點,做出來效果不好是因為我程式少寫一些判斷式,所以少找了許多F0出來。下面是更改過後的結果。
做法是每個candidate都假設可能是F0,依照這根bin往上看5倍。

是有比原本的結果比較好,可是相對的高頻也多出了許多fake的F0,這是因為每個candidate都預先認為可能是F0,高頻部分有些剛好不是先前找到F0的partial,所以再往上看5倍,也有可能會認為當下的這根bin是F0。
2. 如果要用這種辦法,好像無法避免這種狀況。因此在這邊多加了一個threshold,當一個candidate的能量大於最大能量的1/8(約18db),才認為這個candidate可能是F0,再下去投票。
結果如下:高頻部分少了許多fake的F0。

3. 拿真正鋼琴的聲音來做測試
wave:

F0:當一個新的音起來,舊的音還有餘音的時候,而新的音剛好是舊餘音的倍數時,這時候就有可能把F0找成舊的音。

-----------------------------------------------------------------------------------
20090226
上面鋼琴曲的樂譜,原來有這麼複雜, Ballade No. 1 Op. 23,應該是蕭邦的吧

-----------------------------------------------------------------------------------
20090304
1. 我們為瞭解決低頻能正確找到F0,所以FFT的size增加到8192,但是,相對的原音在Vibrato時,會碎成許多小peak(如下圖),所以會找到許多相近的F0。

2. 解決辦法:在一個半音內(94% ~ 106%)只會存在一個F0,因此試著用在這範圍內,找出能量最大的來當作F0。跟20090225的巴哈比起來,第一段有抖音的部分,已經沒有非常接近的F0了。

3. 解決完這問題之後才突然發現,這問題其實可以靠HMM來解決,因為我們HMM要多加入partial和 amplitude 這兩個參數進去。到時候將HMM建構起來之後在和上面提到的方法來做比較。
-----------------------------------------------------------------------------------
20090310
1. 原本定義下列狀況下,candidate不相連。cCandidate:current candidate,rCandidate:往前看的 candidate
(cCandidate is F0) && (rCandidate is Partial)
(cCandidate is Partial) && (rCandidate is F0)
(cCandidate's F0 和 rCandidate's F0 差超過一個半音)
(cCandidate's Freq 和 rCandidate's Freq差超過一個半音)
老師建議將 candidate 的 Frequency 和 magnitude 都放進去 HMM 的 HiddenStateProb 裡。這樣可以讓 model 更加完美,讓人信服。
2. 維城學長是利用 Gaussian function ,△f當變數來算 prob,我們可以利用2維的Gaussian function,△f 和 △magnitude來當變數。function如下



3. 在前端部分,也就是f0 detection 部分,在找partial的部分加入一些 virtual node,可以讓後面的 HMM 的加以參考。要增加 virtual node的條件先假設 F0 往上看10倍,若real node比例達80%以上,再增加 virtual node。virtual node的magnitude為0。
4. 因為有這些 virtual node,magnitude 為0,所以 HMM 那邊多一個只有 △f 的 Gaussian function 給 virtual node 用。
-----------------------------------------------------------------------------------
20090312
1. 用不同的 Gaussian function 來處理node 之間的連線,會有問題,因此還是只用一個Gaussian function,只是virtual node的magnitude,直接用FFT的能量即可。

2. 原本討論要用 α*Decay + β* HiddenProb + (1 - α - β) * PartialFunc,這邊PartialFunc是考慮 Partial 的關係。原本HMM的連線方式是node 對 node,我們可以改成 整組對整組,也就是F0以及其partial視為一組下去做HMM。
-----------------------------------------------------------------------------------
20090318
1. 現在的作法是 α*Decay + (1 - α)* HiddenProb,HiddenProb是用二維的Gaussian function,△f 和 △magnitude來當變數,整組(F0+partials)下去算的。
結果如下:
小提琴 DoMeSo+ReFaLa:

巴哈無伴奏:

2. 接下來就是建立前後兩部分(f0 detect、HMM)的LOOP以及tune HMM 的參數(σ和α)。
-----------------------------------------------------------------------------------
20090325
1. 要training Gaussian function的參數,打算利用八度音來區隔,大略分成6個區段
100 ~ 261 Hz (C4)
261 ~ 523 Hz (C5)
523 ~ 1046 Hz (C6)
1046 ~ 2093 Hz (C7)
2093 ~ 4186 Hz (C8)
4186 ~ 8000 Hz
2. 用midi產生的wav來train這些參數(σ1,σ2,Cov),儘量有Vibrato和滑音。
-----------------------------------------------------------------------------------
20090408
1. 六個區域的參數已經train出來了。
只用一組參數的Bach

六組參數

變化好像不大
2. 皆下來的工作 a.建立loop b.train出attack state的initial weight c.擬出論文大綱
----------------------------------------------------------------------------------
20090421
20090421
1. 原本Loop的動作是
  • 找出f0
  • Tracking
  • Smooth
  • interpolated
  • 利用出來的結果回頭找F0

2. 不過因為smooth的動作經過多次loop之後會讓vibrato趨於平緩,因此這邊改用linear prediction的方式來校正node
  • 找出f0
  • Tracking
  • linear presiction
  • interpolated
  • 利用出來的結果回頭找F0

----------------------------------------------------------------------------------
20090506
1. vibrato 部分顯示出來會像是鋸齒波,而不是sin波,如下圖。

這是因為我們找出來的F0的曲線就是類似這樣子的。

2. 如果我們看f0那張圖在vibrato的時候,有時候在同一個frame會找到兩個點,這是因為在原本的頻譜圖上就有兩個peak存在了,這應該是頻率解析度造成的問題。

3. 既然我們知道它是vibrato了,那我們可以記錄它震盪的大小,經過多次smooth之後,會趨近於sin波,這時候我們再將它放大到原本震盪的大小。
4. 也可以用分bank的方式,低頻用高解析度,高頻用低解析度。
-----------------------------------------------------------------------------------
20090512
1. 記錄vibrato震盪的幅度,最後再修正到原本的位置。我是先用古琴來測試,第一張圖是一開始找到的F0,第二張是經過多次smooth之後的,第三張是是修正到原本的位置。
原本的F0,請忽略那幾條直線,畫線出問題

多次smooth之後

修正至原本位置

2. 用在Bach上,還有些問題,正在找出問題所在,應該是條件設定要調整。
----------------------------------------------------------------------------
20090602
1. 打算加入之前20090225我們討論過的,只往上看五倍下去投票,這樣子的結果比較漂亮。
下圖是沒有加入新的方法。

下圖是加入新的方法,可以看出換音的地方原本的音延長了許多。

30 則留言:

SCREAMLab 提到...

你應該加到Analysis.

我想你的描述不是十分貼切我講的. 我再說一次簡單的, 請你回一下我們理解的是否一樣.

目前IRCAM與Bff的東西目地是在找出multiple FOs. 假如我們的觀點是修改為找出好的Partials呢? 那原來程式要改嗎? 至於輸入就也許要改一下義崧的程式了. 我的想法是:
找到好的Partial後, 好的F0s就不難找了.

還是你有其他想法嗎?

另外就是前面那個F0的問題解法請你在說清楚一點. Thx.

centcent 提到...

老師:
我想我們的理解是一樣的,只是我表達的不好

文章也已經修改過了,我想這樣子應該比較容易理解了

好想永遠這樣 提到...

義崧和我所採用的分析過程,基本上資料都是一種反覆式的使用,而非連續式的,以義崧的例子來說,第一步,會將spectrum做smoothing,然後找出peak location(integer);第二步,就peak location(integer)及相臨近的原始FT係數,去做二次曲線內插,得到一個比較精準的peak location(real);之後再進行最大公因數計算等等程序。所以資料可能是(freq,mag)->(freq,mag'),然後再從(freq,mag)->(freq+offset,mag"),mag'的資訊只是提供尋找初步的peak location。
我想這是屬於比較技術性上的細節,至於tracking和pruning兩個程序,基本上是可以分開來的,tracking相對來說是比較獨立的,有兩點是要注意的:
(1)修改HMM model可以改變node間連接的機率,目前只使用頻率差來做為依據,可以思考是否要加入其他參數。
(2)最後擷取出partial是使用back-tracking,這裏有個可能的缺點,是不允許partial間相交;雖然在目前的程序理論上,partial間相交是不可能,但是實際上,可能存在一些ambiguity。
pruning程序則是依IRCAM的pitch detector來設計的,不一定可以套用到所有狀況,可以修改pruning的條件,或是使用不同的方法來處理tracking出來的candidate partial。

匿名 提到...

AL的東西是基於monophonic做的, 所以有些條件是那樣社的, 可是搬到polyphonic就可能不適用了

問題是: 條件放寬後一定會出現其他問題, 我們如何用後面的處理來解掉他呢? 我想你是需要先發現哪種狀況會在哪裡發生.

匿名 提到...

甚麼是第二個有點糟?

centcent 提到...

就是如果260Hz&277Hz找的好的
260Hz&330Hz就找的不好
反之也是一樣

匿名 提到...

我今天來看看

匿名 提到...

假如是Bach無伴奏, 可以找到譜來對.

我的建議是先用mdid轉wave來試. 然後在此一wave檔加少量reverb, 再依序加大reverb來貼近真實錄音.

多找出一些pitches在現階段不是壞事, 我们要再接下來的處理去掉一些可能不是pitches的.

之前說的關於HMM的partial tracking要改進的事我们明天來談談.

另外要請你找一些有關partial/pitch tracking的papers, 請注意這些是未來用來與你的方法比較的, 我要請修課部份學生來實作.

SCREAMLab 提到...

哇! 看midi轉的wave的處理效果很棒. 我想看一下再複雜一點檔案(一樣midi轉的)會怎樣.

此外, 我想知道為何取5倍音高在找pitch時為何效果會降低, 是否是設定上的問題, 訊號的問題, or 其他?

下一步呢? 找一段時間你來跟我解釋HMM那邊要更新的做法.

感謝你的努力.

SCREAMLab 提到...

用一個threshold (1/8)事不是洽當我們可以在談一下.

擬可以show一下那鋼琴曲的原譜跟你找出來的差多少嗎? 我想知道一下你的論文裡可不可以把剛琴也弄進來.

匿名 提到...

vibrato的問題很重要, 要請你在這邊敘述一下.

匿名 提到...

感謝centcent的即時. 希望大家都可以這麼快地把彼此討論的結果放上來.

centcent 提到...

老師,可以請您講解一下為啥要增加 virtual node 的用意嗎?
我向DNA解釋的不清楚 ^^?

SCREAMLab 提到...

我覺得要把Partial的關係加進去考慮, 不過centcent知錢的方法看起來實在不漂亮.

我原先的意思是在cost function上加上第三項, 不過現在先修正為加上virtual node. 所謂virtual node即是在原先的步驟裡選點沒被選進來, 或許是因為他的magnitude不夠大, 或者因為他的票數不高. 可是比他低的頻段的點形成好的Harmonic結構, 所以這一點就被訂為virtual node. 所以其cost function只比frequency differece, 而不看magnitude. 至於怎樣才可已被訂為virtual peak, centcent還要做實驗.

我還在想cost function是否可以或需要加上第三項, 有請DNA來說說.

SCREAMLab 提到...

原則上, 有利必有弊, 用一組"可能"是Harmonic sequence的member形成一個Vector來做tracking是有好處, 也就是之前的partial relation有考慮進去, 但是要死也是一起死, 歷來沒有人這麼做, 就試試吧! 反正SCREAM Lab愛亂試試出名的.

不過我還是私心以為單獨考慮, 把第三項加進去應該try一下, 不管前面那種好不好, 至少要是不好可以讓我死心.

看過這類的東西, 多半還是以pitches已經找到了, 要是pitches找錯了呢?

另外, 遇到Inharmonicity呢?

唉呀! 還有好多研究可以做, 建議冠廷, cent跟DNA看一下我昨天請showmin下載的那篇paper. 我已經請showmin先寄給cent了.

不過,cent, 你在擔心什麼? 沒叫你一股腦全做完呀! 現在就缺這個, 還有把loop建起來.

喔喔! 除非你要繼續念. 那要來找我寫信. 哈哈!

對了, Perry Cook大我九歲, 他只比我早不到一年拿到學位. 你算年輕啦! 要是你可以做出像Chuck一樣的東西, 那也不枉此生了.

centcent 提到...

老師:
我們一開始的假設也是假設F0都是正確,只是後來也做了F0 detection這部分。

關於 inharmoncity部分,我們討論出往上看partial都是看△f,而不單單只看F0的倍數,這樣應該可以解決大部分的問題。

至於第三項,我想先把整組的HMM搞定之後,再來試試看第三個function,不知道這樣可行嗎?

匿名 提到...

好好好! ^-^

SCREAMLab 提到...

google了一下partial tracking. These are wheat I found.

http://www.cirmmt.mcgill.ca/activities/student-colloquia/music-tech/kereliuk-hockman

這好像是改良自ircam做的.

centcent 提到...

老師
這篇論文我之前有找到
有放到上課同學們要看的論文當中
只是 還沒有人看
我找時間看一下好了

SCREAMLab 提到...

我想題目先定一個普通的就好.

Pitch and Partial Tracking of Polyphonic Musical Signals

SCREAMLab 提到...

我可以請你跟冠廷與showmin各要一段Bartok violin duo與古琴單音, run一下結果給我看嗎?

因為他們現在都在忙DAfx paper, 而我又想快一點知道結果.

SCREAMLab 提到...

請試一下有滑音的音一下.

另外你的提議OK. 感謝.

對了, 五秒要五分鐘, 嗚嗚! 有地方可以快一點嗎?

我要再跟你討論一下整體的架構.

centcent 提到...

老師我忘了什麼提議了?

之前五秒鐘的音檔跑五分鐘是因為是用20090225所說的假設每根bin都是F0,只往上看五倍來投票,這是為了增進F0的準確度。不過這個我拿掉了,老師不是說降低一些門檻,要讓F0變多一點來試試看。

SCREAMLab 提到...

So far, 我們看了一堆論文, 例如在找Partial group members或是inmarmonicity的papers, 不知到他們是否可以改進現有的系統呢?

另外我們對低一點的音都沒辦法處理, 有什麼意見嗎? 我記得我是建議用filter bank, 不同range的用不同的FFT sizes.

還有就是針對古琴滑音後的現象, 應該是可以有解, 因為畢竟是可以參考前一個frame來猜這個frame以及改變一些參數的.

87showmin 提到...

DNA報的那篇DCT的作法或許也可當作參考,它為了最快fit原波形,通常都是先找出低頻訊號。

至於滑音的現象,我想問一個樂器的特性,像吉他在滑音時,其實是有技巧去trigger一個新能量的;換句話說,在滑音的過程中,能量不見得會隨著時間遞減。如果古琴也有這特性,那參考前一個frame是否也不一定準呢?

另一方面,當我們在分析這個frame時,很多partials因能量低於門檻而被截斷,這真的是「異象」嗎?如果真得連耳朵聽不到,即使譜上面是這樣寫,我們用程式應該也沒辦法對得到吧?

SCREAMLab 提到...

人聽不見partial?? 應該可以, 因為pure tone與含微弱partial的音聽起來就是不一樣, 所以我說遇到這狀況可以參考前幾個frame的資訊, 再把threshold降低, 這樣看看有沒機會.

我不會那麼高段的吉他彈法, 不知道. 古琴在華音的時候確實有新的能量進來, 不過比例上不大, 除非這琴特別.

SCREAMLab 提到...

請centcent把vibrato的問題再說一下, 順便帶一下可能的解法. 就今天討論的那些.

Thx.

87showmin 提到...

吉他要滑出音應該比古琴簡單,我猜是因為有琴柱的關係。XD.. btw, 較粗的鋼絃也較容易使出這種技巧。

SCREAMLab 提到...

比較正確的說法是:

因為vibrato, 基頻在變, 而我們用的window size太大, 以致cover到不同頻率的區段以致造成這情況.

DNA說的方法也不錯, 用不同的Windows各掃一遍, 再交叉比對. 不過計算量就double了.

SCREAMLab 提到...

低頻的問題可以updated一下現況嗎?