[Level 19]
Title: please!
查看源码,邮件的附件?试着下载indain.wav文件,不存在。下面的一段字符串,使用base64解码输出为indian.wav,是一段声音:杂音+sorry+杂音。
import base64
with open('indian.txt','rb') as input,open('indian.wav','wb') as output:
base64.decode(input,output)
跳转到sorry.html,显示- "what are you apologizing for?"。
想了很久,技穷了。印度地图海洋和陆地的颜色颠倒了,还有源码中提示Maybe my computer is out of order.。好吧,这两点真没发现。
import wave
with wave.open('indian.wav') as iw, wave.open('new.wav','w') as new:
new.setnchannels(iw.getnchannels())
new.setsampwidth(iw.getsampwidth())
new.setframerate(iw.getframerate())
data = iw.readframes(iw.getnframes())
new.writeframes(data[::-1])
声音是不同了,但有点问题。需要将音频每一帧反转:
for i in range(iw.getnframes()):
new.writeframes(iw.readframes(1)[::-1])
可以听出关键词idiot,idiot.html给出了过关链接,[Level 20]
小结
wave
模块的方法还是比较简单明了的。
Python Challenge Wiki
1. 使用email获取音频
import email
message = open('email.txt', 'rb').read().decode()
mail = email.message_from_string(message)
audio = mail.get_payload(0).get_payload(decode=True)
with open('indian.wav', 'wb') as f:
f.write(audio)
2. 反转之外
frames = iw.readframes(iw.getnframes())
iw2.setsampwidth(iw.getsampwidth())
iw2.setframerate(iw.getframerate()//2)
iw2.writeframes(frames[::2])
或者
h.setsampwidth(w.getsampwidth()//2)
h.setframerate(w.getframerate()*2)
wave.big_endiana = 1
h.writeframes(frames)
有趣!