Python Challenge[19]

[Level 19]

Python Challenge[19]_第1张图片

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)

有趣!

More

你可能感兴趣的:(Python Challenge[19])