Python (Jython) Playing notes from pixels in picture
这是课堂作业:
这个节目是关于听颜色的。我们将把图片当作钢琴乐谱。编写一个名为listentopicture的函数,该函数将一张图片作为参数。它首先显示图片。接下来,它将每四行中的每四个像素循环一次,并执行以下操作。它将计算像素的红色、绿色和蓝色级别的总和,除以9,然后将结果相加为24。该号码将是PlayNote播放的音符编号。这意味着像素越暗,音符就越低;像素越浅,音符就越高。它将以全音量(127)播放该音符十分之一秒(100毫秒)。每次移动到新行时,它都会在控制台上打印出行数(Y值)。您的主要功能将要求用户选择带有图片的文件。它将打印要播放的音符数(即图片中的像素数除以16;为什么?),然后调用listentopicture函数。
好吧,我编辑了目前为止的内容,我唯一还没弄明白(我相信)的是如何在主函数中打印注释的数量。顺便说一下,感谢所有帮助过的人。你们真是太棒了。这个网站有捐赠的地方吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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) |
你以前问过类似的事情。好吧,既然你没有输入任何关于实际检索像素值的代码,我假设你仍然不能这样做。我知道这远远超出了你的问题,但上次你对你的问题相当含糊,并表示你需要更多的帮助,而不仅仅是你所要求的。如果不需要这样做,那就忽略它。我只是想提供一些建议,你可以接受也可以不接受。
如果你还不知道如何读取像素,我建议你使用pil。它具有打开此处记录的图像的功能。然后,您可以使用记录在同一页上的getpixel通过其x和y值访问图像中的像素。
对于播放音符,我建议您查看pyaudio模块,并制作您自己的各种频率的正弦曲线(取决于像素的大小),然后将其写入打开的音频流。这部分可能有更好的软件包,但这是我在Python音频小冒险中使用的。
对于音频设备,我会尝试在实际发出一个不同的频率之前以固定的频率输出一个声音。
编辑:你的套环现在看起来更好了,所以我拿出了我关于你套环的资料。
Robbie适合环的宽度/高度。
你用来获取像素和播放音符的循环看起来像是获取所有像素,每次你得到一个唯一的x和y时都在播放它们。你应该做的是获取(x,y)处的像素,然后拉出RGB值并调用播放注释。你甚至不需要第三个for循环。你离得不远。试着用简单的英语按逻辑步骤写出这个问题。在我开始编码之前,我发现这有很大帮助。
祝你好运。