Python Challenge[19]

[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])

可以听出关键词idiotidiot.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [Level 25] Title: imagine how they sound 源码中看到can you see...
    Recgat阅读 514评论 0 0
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,546评论 7 249
  • 生活是一场繁华的戏。 早晨,阳光斜射在窗角。 低头的向日葵半醒着,我伸个懒腰,糊里糊涂的从床上爬起来。 草草的化了...
    梦烨阅读 333评论 0 1
  • 心情:低落、后悔 今天去面了群面,感觉很受打击…其实真正是什么问题,也许自己并没有特别认真去剖析过,所以才一直没有...
    睡不醒的璐阅读 258评论 0 0
  • 我离开妈妈的怀抱,都是因为眼前这个小女孩,如果不是她,我此刻还在妈妈的怀里吃奶,和哥哥们抢吃的。不过她似乎也不错,...
    王可淇阅读 490评论 0 0