2010-03-02 81 views
0

這是從一個課堂作業從像素彈奏的音符:的Python(Jython的)的圖片

這個程序是關於傾聽的顏色。我們將把照片當作鋼琴樂譜。 編寫一個名爲listenToPicture的函數,將一張圖片作爲參數。它首先顯示圖片。接下來,它將遍歷每第四行中的每個第4個像素,並執行以下操作。它將計算像素的紅色,綠色和藍色等級的總和,將其除以9,然後將結果添加到24.該數字將是playNote播放的音符編號。 這意味着像素越暗,音符越低;像素越亮,音符越高。它將以全音量(127)播放該音符十分之一秒(100毫秒)。每次移動到新行時,它都會在控制檯上輸出行號(y值)。 您的主要功能將要求用戶選擇一個帶有圖片的文件。它將打印要播放的音符數(這是圖像中的像素數除以16;爲什麼?)。然後它會調用listenToPicture函數。

好吧我編輯我到目前爲止,唯一我沒有想出(我相信)是如何打印主要功能的筆記數量。順便說一句,感謝所有幫助過我的人。你們太棒了。有沒有地方可以捐贈給這個網站?

def main(): 
    pic=makePicture(pickAFile()) 
    show (pic) 
    listenToPicture(pic) 

def listenToPicture(pic): 
    w=getWidth(pic) 
    h=getHeight(pic) 

    for y in range(0,h,4): 
     printNow(str(y)) 
     for x in range (0,w,4): 
      px=getPixel(pic,x,y)        
      r=getRed(px) 
      g=getGreen(px) 
      b=getBlue(px) 
      tot=((r+g+b)/9)+24 
      playNote(tot,100,127) 
+1

您可能需要添加一些關於getPixels的更多信息。就像它返回的一樣。此外,它看起來並不像您意識到內置範圍功能的用途。在你的循環中,如果圖片的寬度是10,圖片的高度是10,那麼你不會從該範圍調用中得到任何東西。範圍第一個數字是從哪裏開始的範圍,第二個是結束它的地方,第三個是步長。 4將是正確的步長,但如果說你想枚舉的寬度,你會做範圍(0,W,4) – Robbie 2010-03-02 17:08:25

回答

1

羅比是正確的寬度/高度的循環。

您用來獲取像素和播放註釋的循環看起來好像是獲取所有像素並在每次獲取唯一的x和y時播放它們。你應該做的是讓像素在(x,y),然後拉出rgb值並調用play note。你真的不應該需要第三個for循環。你不太遠。嘗試用簡單的英文以邏輯步驟寫出問題。在我開始編碼之前,我發現這有助於大量工作。

祝你好運。

1

您之前詢問過的產品是similar things。那麼,因爲你沒有提供任何關於實際檢索像素值的代碼,所以我認爲你仍然無法做到這一點。我知道這是超出你的問題的,但上次你對你的問題非常模糊,並表示你需要更多的幫助,而不僅僅是你提出的問題。如果任何這不是必要的,那麼就忽略它。我只是想提供一些建議,你可以拿走它或者離開它。

如果您還沒有弄清楚如何讀取像素,我推薦使用PIL。它具有打開圖像文件here的功能。然後,您可以通過使用同一頁面上記錄的getpixel的x和y值訪問圖像中的像素。

爲了播放音符,我建議您查看PyAudio模塊,並根據您寫入開放音頻流的不同頻率(取決於像素的大小)製作自己的正弦曲線。這部分可能有更好的包,但這是我在Python音頻中的小冒險中使用的。

對於音頻的東西,我會嘗試在固定頻率下輸出聲音,然後嘗試實際發出變化的頻率。

編輯: 你的循環更好看,所以我現在拿出我的東西,你的循環。