2010年3月24日 星期三

回答網友的詢問 - 關於交互式電子音樂的問題

信中原文:

老师:
您好,我是上海音乐学院的学生,我的专业是电子音乐设计,通过网络我看到了您关于MAXMSP的文章,同时也了解到您创作了大量优秀的电子音乐作品,所以想请教您关于您的电子音乐作品是如何构思并完成的。
特别是在交互式电子音乐这方面,09年我们学校请来了PRISMA(外国著名电子音乐家组成的小组),他们给我们讲解了很多他们制作的MAXMSP模块,让我对MAX有了更深入的了解,自己也想创作交互式电子音乐,但不知道如何下手,
请问老师:

1.您创作作品时是头脑中先有乐谱,预先设定好一切PATCH,还是在用PATCH的过程中激起创作灵感?

2.对于交互式电子音乐的创作和传统调式的作品写作,您觉得有什么异同?

3.对于交互式电子音乐的结构问题,我一直不解,它偏于我们所学的传统曲式,请问,电子音乐的曲式结构是由作曲家随意而生还是有什么规律可循?MAX中的PATCH会不会影响作曲家对于该作品的结构设置?

这些问题我一直不解,也一直没有得到很好的答案,恳请老师抽出百忙时间帮我解答。谢谢老师。
爱音乐的张赢
2010.3.23



答覆張贏同學:

1. 學院派的嚴肅音樂作曲家,創作交互式電子音樂時,一般都有樂譜,因此每一個片刻電腦要如何回應器樂,有百分之九十以上的部分都是事先在電腦中設定好的,以保持作品的精緻與周嚴。在創作時, patch 就好比新創的樂器,因此仍有必要針對某個特定的 patch 的效果,來設計音樂,猶如器樂創作時,對於不同器樂有不同語法一樣。(部分「電子音樂家」以即興者自居,通常這些人並無足夠的訓練或能力可以創作純粹的器樂曲,不僅是不通配器法也不瞭解藝術音樂的美學要求,因此只專注於科技性的研究或強調即興,並把原本創作時記譜的苦工,完全交由即興與電腦的聲音特效。然而音樂界國際公認的優秀電子音樂家,如當代如日中天的 Kaija Saariaho、以及老一輩的Pierre Boulez、Stockenhausen 等,向來卻都是把樂譜鉅細靡遺的寫下來,以確保音樂的細緻性。即興固然有其趣味性,但容易落於基於習慣的手法,而導致千篇一律、或原本便毫無章法。)

事實上,所謂交互式音樂,在嚴肅的學院音樂創作中,常只是單向的互動,電腦總是被要求回應器樂,而非讓器樂隨電腦的演奏而即興。此種情況下,電腦的角色只是另一個隨著電腦內建樂譜而演出的演奏者,依照事先記載在電腦中的參數來發出聲音,而並非是一般人所誤解的「電腦變成一個自動製造音樂的機器」而可能讓作曲家無法掌控演出的結果。

2. 學院派嚴肅作曲家,無論是否創作電子音樂,多數人並不再寫傳統調式、調性作品,因為歷史上已經有過多曲目,再寫也已經了無新意了,目前調性音樂的創作,多以商用目的或通俗的表演藝術之目的而創作,跟學院派作曲家求新、求變的精神並不相同。至於創作交互式電子音樂,其實美學上,跟創作純粹器樂的新音樂是很接近的,只是交互式電子音樂提供了更多表達的手段,例如音色變化、空間感處、特殊織體的製造等。


3. 學院裡頭電子音樂的曲式結構,大致上仍遵循西方古典音樂傳承下來的美學,亦即音樂必須有方向性、有高潮點、對比性、樂思在變化中仍具有某種底層的一致性(coherent)等原則,跟非傳統調性的新音樂創作在美學上並無不同。交互式音樂的 Max Patch 往往是一些具有自動控制能力的效果器,藉此提供作曲家更多設計音樂形式、織體、音色變化的手段,但多數被公認為優秀的作品,早已把形式結構、特定時間點的參數變化事先寫入程式碼中了,因此「互動」是在作曲家能掌控的限制下的互動。

2010年3月18日 星期四

Jitter Tutorial 42 Slab: Data Processing on the GPU 摘要

  • 使用 GPU 可以同時獨立處理多重像素,比 CPU 更有效率。(p.372)
  • 為了配合DV原本就是 chroma-reduced YUV 的格式,因此可將 jit.qt.movie、jit.gl.slab 等物件加上 colormode uyvy 屬性,以便於達成更有效率的DV解壓縮程序,這種作法比起 RGBA 資料相比,僅佔用其一半的記憶體。(p.374)
  • 在 Jitter 中可使用 jit.gl.slab 物件來接收 jit._matrix 或 jit_gl_texture 訊息,並將之當作貼圖來使用,以配合套用 shader,執行簡易幾何算圖,並將算圖結果以另一個貼圖的方式,透過 jit_gl_texture  訊息的方式送出。jit_gl_texture 與 jit_matrix 訊息作用相似,但前者並不在主系統中的記憶體裡以矩陣方式存在,而是以貼圖的方式置放於圖卡硬體的記憶體上。最後要呈現影像時,則需要透過 jit.gl.videoplane 物件(可接受 jit_matrix 或  jit_gl_texture 的訊息)。其下還可以選擇性地接上 jit.gl.gridshape 等物件,例如將貼圖套到某個面上。(p.375)
  • jit.gl.texture 的事件通過 jit.gl.slab 物件時,是藉由相同的命名來指涉到圖卡中的資料。若我們需要使用到CPU為基礎的處理程序時、或需要將將資料儲存成影像時,則需要將GPU中的資料轉到主系統的記憶體中,此時需要藉由 jit.matrix 來接收 jit_gl_texture 資訊並執行 「讀回貼圖」(texture readback) 程序,亦即藉此將圖卡 (VRAM) 中的貼圖資料轉到主系統中的記憶體(RAM)中。此種 texture readback 的過程,速度不及將資料送往圖卡的速度,且也不支援 uyvy 格式(pp.376-8)。
  • Readback 的執行速度在最新的GPU中不斷被改進。尤其是 PCI-e 的圖卡一般而言,其 readback 效率優於 AGP 的圖卡。 

2010年3月16日 星期二

Jitter 配合擊樂器之演出

Alexander Schubert 的作品呈現了另一種互動音樂的範本。以往的學院中的互動音樂,被定義為「以電腦偵測並詮釋樂器的現場演奏,並依此予以回應」。電腦多被用來即時分析樂器的聲音,再產生回饋,亦即以聲音回應聲音。但 Alexander Schubert 的幾個作品中,出現了另一種概念,亦即以演奏者的表演的動作姿態與電腦作互動,而這個姿態往往是樂器演奏時的動作再度誇大的延伸,然而這個誇大的動作,並非只是單純的為作品加入了音樂他律性的內容,而是「演奏」另一個樂器所需的動作,以此來觸發創作者自行設計的「電子樂器」,這個樂器的音色特質,又與傳統擊樂器的音色有某種程度的類似性,或許也可以解讀為樂曲中使用的打擊樂器之擴充與延伸。進一步與影像結合之後,成就了另一種新的音樂表演形式,使影像、音樂、互動電子樂器、表演者的動作姿態彼此相互彰顯。我個人認為這個作品與其另一個小提琴的互動表演,都是很成功而新穎的音樂作品。

2010年3月15日 星期一

Jitter Tutorial 41 Shader 摘要

  • 圖形顯示卡主要的作用之一是將2D的元件轉成3D的元件以便於顯示。這些元件以何種方式算圖,是由 shading model 所決定,通常包括元件的顏色、位置、燈光及其位置、貼圖座標、材質特徵(如光澤的多寡等)。軟硬體中,執行這些計算的程式,被稱為 shader,傳統的圖卡使用固定式的 shading pipeline 來將這些 shading model 套用到元件上,但近幾年則發展出可編程的 shading pipeline,使得自行定義的 shader 可以取代固定式的 pipeline。(p.365)
  • 藉由將 jit.gl.gridshape 的屬性設為 lighting_enable 1,可達成最簡易的且考慮光的因素的 shading model 之套用,被稱為 flat shading 或 facet shading。
  • 多數元件在真實世界中會隨著物件的表面漸變其光澤,Gouraud Shading (1971) 則是最早考量此種現象的 shader 之一,其依據 surface normal 與光的屬性,藉由計算  per vertex color 有效達成運算。其以顏色的線性漸變處理每個多邊形,而達成平順的 shading 效果(多邊形數量越多,外觀越平順),廣為 fixed shading pipeline 的圖卡所使用,在 jitter 中,則可藉由設定 jit.gl.gridshape 的屬性 smooth_shading 1 達成之。當 dim $1 $1 設定得越大時,表面越平順。(p.366)
  • Phone shading (1975) 不僅可以柔化多邊形的每個頂點的顏色,也可以柔化該多邊形的surface normal (與表面垂直之向量)。其是依據平順的 normal 及燈光屬性來運算 per fragment color (per pixel color),被稱為 per pixel lighting。運算結果針對較少的多邊形時,效果仍佳,但運算卻較耗費 CPU。其不存在於  OpenGl 的 fixed pipeline 中,需藉由讀取自訂的 shader 至可邊程的 pipeline 中才可套用。可將 「shader [ shader 名稱]」之指令送往 jit.gl.gridshape,使 jit.gl.gridshape 得以指涉到相同命名的 jit.gl.shader。
  • 1984年由Robert Cook 提出 shade tree 的概念,讓使用者可以透過 shading language,建立自己的 shading model,此種語法後為 Ken Perlin 所延伸,後來又成為 Pixar 的 RenderMan 的 shading language。晚近則有使用相似的原則、以 GPU 為核心的 Cg 及 GLSL shading language。(p.368)
  • jit.gl.shader 可藉由 read 指令讀取 shader;藉由 getparamlist 或  dump params 讓所讀取的 shader 之相關參數由 jit.gl.shader 右下方輸出口輸出;getparamval [參數名稱] 則可使 jit.gl.shader 輸出目前參數的數值;getparamdefault [參數名稱] 則可使 jit.gl.shader 輸出該參數的預設值;getparamtype [參數名稱] 可使 jit.gl.shader 輸出該參數的型態。(p.369)

  • shader 可以用來決定元件的表面顏色,但也可以用來改變 vertex 的位置與屬性。實際上在此的範例中,每個程式都包含處理 vertex 的程式 (vertex program)、與運算 pixel 的程式(fragment program)。 vertex program 用來將3D元件作變形 (rotation、translation、scaling),也用來控制燈光、顏色、及其他屬性。當我們使用 jit.gl.handel 物件來旋轉 3D 元件時,便有某個  vertex program 正在被執行。邏輯上言之,vertex program 與 fragment program 各自使用獨立的、可編程的處理器,此種模型與使用 fixed function pipeline 時,分開處理兩者的模式相同。