2017-01-02 91 views
0

Backstory和Context:我將盡我所能解釋我正在處理的問題,以及我已經確定的問題,以及我的思考過程爲我目前的代碼。忍受我,因爲我會盡量提供儘可能多的細節。請注意,我仍然在學習Quartz Composer,並且對Javascript語法不太熟悉。if語句中的if語句for循環/數組插入和構造

我正在與Quartz Composer一起修改程序附帶的視覺均衡器模板。實質上,我的音頻源被輸入到程序中,並作爲存儲在數組中的16個音頻頻段進行處理。這16個頻帶中的每一個對應於該範圍內頻率的大小,並且最終將顯示在具有各種均衡器電平的「條形圖」上。這部分很好,很好。

我的任務要求我的圖中有超過16個條。由於我無法進一步分割音頻而沒有轉向一個複雜的外部過程,我想我可以通過在實際的音頻條之間插入虛假的條和數值來僞裝我的方式,這些虛擬條和數值之間的平均或均勻地位於真實音頻小節值。

例如,假設我的輸入數組看起來像「A B C」,其中「A」,「B」和「C」是某些音頻值。我在我的代碼中聲明瞭一個「插入」值,該值確定在每個真實音頻值之間要添加多少假條。在「A B C」的情況下,假設插入值被設置爲0.不插入條,因此輸出數組是「A B C」。假設插入值設置爲1.將在每個真值之間插入1巴,返回「A(A + B)/ 2 B(B + C)/ 2 C」的數組。因此,如果插入值被設置爲2,則將在A和B之間放置兩個值,使得它們均勻分佈在A和B之間的1/3和2/3rds之間。

相關代碼:

var array = new Array(); 
 
function (__structure outputStructure) main (__structure inputStructure, __number insertions, __number time) { 
 
\t var result = new Object(); 
 
\t 
 
\t /* check if the input array for the sound bands is null or not */ 
 
\t if (inputStructure != null) { 
 
\t \t 
 
\t \t /* keep track of the number of times that a value is inserted so that, upon the counter being reset, a value from the original array can be inserted */ 
 
\t \t var counter = 0; 
 
\t \t 
 
\t \t /* keep track of which index location the original array value is to be pulled from */ 
 
\t \t var inputPlace = 0; 
 
\t \t 
 
\t \t /* build a new array that inserts a number of values equal to the value of the insertions variable in between all values of the original array */ 
 
\t \t for (i=0; i<((insertions + 1) * (inputStructure.length - 1) + 1); ++i) { 
 
\t \t \t 
 
\t \t \t /* if it is time to do so, pull a true audio bar value from the original string into the new string */ 
 
\t \t \t if (counter = 0) { 
 
\t \t \t \t array[i] = inputStructure[inputPlace]; 
 
\t \t \t \t 
 
\t \t \t /* if it is not time to pull a value from the original array, insert the specified number of evenly spaced, calculated bar values into the new array */ 
 
\t \t \t } else { \t 
 
\t \t \t \t /* space the insertion between the nearest two true values from the original input array */ 
 
\t \t \t \t array[i] = inputStructure[inputPlace] + ((inputStructure[inputPlace + 1] - inputStructure[inputPlace]) * counter/(insertions + 1)); 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t counter = counter + 1; 
 

 
\t \t \t /* reset the counter after each complete iteration of insertions is compelte so that an original array value can be pulled into the new array */ 
 
\t \t \t if (counter > insertions) { 
 
\t \t \t \t counter = 0; 
 
\t \t \t \t inputPlace = inputPlace + 1; 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t counter = counter + 1; 
 
\t \t \t 
 
\t \t } \t 
 
\t } 
 
\t 
 
\t result.outputStructure = array; 
 
\t return result; 
 
}

在這個特殊的代碼,我沒有手動聲明的投入,將他們全部從石英作曲家拉。這部分我沒有問題。我假設出於測試的目的,您可以在輸入結構,插入和時間的值中進行硬編碼。

問題: 我已經確定的問題似乎與我的for循環內的if語句。當我運行的代碼,它設置了新的陣列中的每一個0值

問題:我想我的問題是我在做什麼毛病在for循環的if語句是導致它覆蓋所有我的其他迭代值?我能夠使計數器工作,以便在插入設置爲2的情況下,每次迭代都會返回計數器值「0 1 2 0 1 2」,但我無法說好,現在在每次迭代中檢查,如果計數器爲0,則從原始數組中拉出一個值。否則,請執行其他操作,在這種情況下,計算虛假欄值並將其添加到新數組中。

回答

1

你的問題是這樣的一行: if (counter = 0) { 它將始終返回false,比較需要使用=====

+0

謝謝,解決它 –

+1

'如果(計數器= 0)'將永遠是*假*爲0是虛假的。 – Gerrit0

+0

修復它@ Gerrit0 – iagowp