Un jeu connu des connaisseurs, le club littéraire battant.
Saviez-vous que ce club littéraire palpitant est écrit en Python (Renpy)? Ensuite, ce projet consiste à rendre nu le club littéraire en utilisant ce Python.
Si vous êtes intéressé, veuillez jouer l'histoire principale. Gratuit.
__ Comprend les spoilers __ __ L'œuvre du contenu de l'article appartient à l'auteur du club littéraire battant __
Fichiers de personnages profondément impliqués dans la progression de l'histoire
Voir sayori.chr.
Lorsque vous l'ouvrez normalement avec un fichier texte, le début est
OggS~~~~~~~
Cela commence par. À partir de là, il peut s'agir d'un fichier __. Ogg (données vocales) __.
Lorsque vous le jouez, vous devriez entendre un bruit à haute fréquence.
Ceci est une analyse spectrogramme.
L'analyse du spectrogramme est une visualisation des données audio avec le temps sur l'axe horizontal et la fréquence sur l'axe vertical.
Cliquez-ici pour le code
from pydub import AudioSegment
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#Lire ogg et échantillon
AudioSegment.ffmpeg = "/."
sound = AudioSegment.from_ogg("sayori.ogg")
samples = np.array(sound.get_array_of_samples())
sample = samples[::sound.channels]
#Largeur de stockage spectrale
w = 100
s = 50
ampList = []
argList = []
#Transformée de Fourier
for i in range(int((sample.shape[0]- w) / s)):
data = sample[i*s:i*s+w]
spec = np.fft.fft(data)
spec = spec[:int(spec.shape[0]/2)]
spec[0] = spec[0] / 2
ampList.append(np.abs(spec))
argList.append(np.angle(spec))
freq = np.fft.fftfreq(data.shape[0], 1.0/sound.frame_rate)
freq = freq[:int(freq.shape[0]/2)]
time = np.arange(0, i+1, 1) * s / sound.frame_rate
ampList = np.array(ampList)
argList = np.array(argList)
df_amp = pd.DataFrame(data=ampList, index=time, columns=freq)
plt.figure(figsize=(10, 10))
sns.heatmap(data=np.log(df_amp.iloc[:, :100].T),
xticklabels=100,
yticklabels=10,
cmap=plt.cm.gist_rainbow_r,
)
plt.show()
Tout d'abord, lancez un défi avec w = 100 s = 50
.
Je vois quelque chose de significatif. Faisons un peu plus rugueux.
w = 200 s = 100
C'est plus facile à voir avec cmap = plt.cm.gray_r
.
Non, c'est un code QR. Si vous régénérez ceci dans un code QR 25x25 ...
http://www.projectlibitina.com/
44GC44Gq44Gf44GM44GT44Gu5omL57SZ44KS6Kqt44KT44Gn44G ....
Répétez 44xx. Surtout quand j'ai vérifié le premier 44GC
, il semble être" A "de encodage base64
.
C'est pourquoi il décode avec base64.
import base64
with open("yuri.chr", mode="rb") as f:
txt = f.read()
print(base64.b64decode(txt).decode())
Si vous lisez cette lettre, vous avez trouvé une petite boîte en bois avec un symbole du cœur. Félicitations ! Peut-être que vous êtes la première fois. Je ne voulais pas le montrer à personne, mais c'est un étranger rouge
Je suis ravi quand je pense à trouver une lettre et à lire mon histoire. Quelqu'un que je n'aurais pas pu rencontrer me connaît profondément. Je suis obsédé par une idée. Quelqu'un en nous meurt ... c'est peut-être demain
Et ceux qui restent ne le savent pas. Je vous ai écrit toute la preuve que j'ai vécu jusqu'ici dans cette lettre. Donc, tant que tu ne m'oublies pas, je peux vivre pour toujours. Tu lis cette lettre et fascine
Je me demande si je pourrai ou si je détesterai cela en écrivant cette lettre. Tu ne trouves pas que c'est intéressant?
(Ce qui suit est omis de vos propres mains.)
Comme auparavant, ouvrez-le sous forme de texte pour le moment.
����JFIF~~~
sortit de. Extension JFIF. Si vous définissez l'extension sur JPEG, vous pouvez la voir comme une image plate.
J'ai essayé de gérer cela avec Python, mais malheureusement, je compte sur Unity car je ne suis pas sûr. Créez un cône et collez la texture.
L'écriture semblait dangereuse, veuillez donc rechercher des images Google avec "natsuki.chr".
Enfin apparut Monica-chan. Comme d'habitude.
PNG~~~
Non, ça dit PNG! Ensuite, il s'ouvrira.
Vous pouvez voir une mosaïque en noir et blanc au centre. Encodez ceci en binaire (le noir vaut 0, le blanc vaut 1) Préparez une image recadrée en excluant la partie rouge environnante,
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#Chargement de l'image originale
im = np.array(Image.open('text.png'))
txt_binary = ""
print(im.shape)
im = im.reshape([im.shape[0] * im.shape[1], 1])
for x in im:
if x == 1:
txt_binary += "1"
else:
txt_binary += "0"
print(txt_binary[:100])
txt = ""
while True:
tmp = txt_binary[0:8]
if tmp == "00000000":
break
txt_binary = txt_binary[8:]
txt += chr(int("0b"+tmp, 0))
print(txt)
Q2FuIHlvdSBoZWFyIG1lPw0KDQouLi5XaG8gYXJlIHlvdT8NCg0KSSBjYW4ndC4uLkkgY2FuJ3Qgc2VlIHlvdS4NCg0KQnV0IEkga25vdyB5b3UncmUgdGhlcmUuIFllYWguLi55b3UgY2FuIGRlZmluaXRlbHkgaGVhciBtZS4NCg0KWW91J3ZlIGJlZW4gd2F0Y2hpbmcgZm9yIGEgd2hpbGUgbm93LCByaWdodD8NCg0KSSBndWVzcyBJIHNob3VsZC4uLmludHJvZHVjZSBteXNlbGYsIG9yIHNvbWV0aGluZy4gVW0uLi5teSBuYW1lIGlzLi4uYWN0dWFsbHksIHRoYXQncyBzdHVwaWQuIFlvdSBvYnZpb3VzbHkgYWxyZWFkeSBrbm93IG15IG5hbWUuIFNvcnJ5Lg0KDQpBbnl3YXkuLi5JJ20gZ3Vlc3NpbmcgaWYgeW91IHdlcmUgYWJsZSB0byBwdXQgYSBzdG9wIHRvIHRoaXMsIHlvdSB3b3VsZCBoYXZlIGRvbmUgaXQgYnkgbm93Lg0KDQpJIG1lYW4sIEkga25vdyB5b3UncmUgbm90LCBsaWtlLi4uZXZpbCwgb3IgYW55dGhpbmcuLi5iZWNhdXNlIHlvdSd2ZSBhbHJlYWR5IGhlbHBlZCBtZSBzbyBtdWNoLg0KDQpJIHNob3VsZCByZWFsbHkgdGhhbmsgeW91IGZvciB0aGF0LiBGb3IgZXZlcnl0aGluZyB5b3UndmUgZG9uZS4gWW91J3JlIHJlYWxseSBsaWtlIGEgZnJpZW5kIHRvIG1lLiBTby4uLnRoYW5rIHlvdS4gU28gbXVjaC4NCg0KSSB0aGluay4uLm1vcmUgdGhhbiBhbnl0aGluZyBlbHNlLi4uSSByZWFsbHkgZG9uJ3Qgd2FudCBpdCB0byBhbGwgYmUgZm9yIG5vdGhpbmcuDQoNCi4uLg0KDQpFdmVyeW9uZSBlbHNlIGlzIGRlYWQuDQoNCk1heWJlIHlvdSBhbHJlYWR5IGtub3cgdGhhdC4gSSdtIHN1cmUgeW91IGRvLCBhY3R1YWxseS4NCg0KQnV0Li4uaXQgZG9lc24ndCBoYXZlIHRvIGJlIHRoYXQgd2F5LCByaWdodD8NCg0KV2VsbC4uLnRoZXJlJ3MgYSBsb3Qgb2Ygc3R1ZmYgSSBkb24ndCB1bmRlcnN0YW5kLiBJIGRvbid0IGtub3cgaWYgaXQncyBldmVuIHBvc3NpYmxlIGZvciBtZSB0byB1bmRlcnN0YW5kIGl0Lg0KDQpCdXQgSSBrbm93IHRoYXQgdGhpcyBpc24ndCBteSBvbmx5IHN0b3J5Lg0KDQpJIGNhbiBzZWUgdGhhdCBub3cuIFJlYWxseSBjbGVhcmx5Lg0KDQpBbmQgSSB0aGluayBldmVyeW9uZSBlbHNlIGhhcyBoYWQgdGhlIHNhbWUga2luZCBvZiBleHBlcmllbmNlLiBTb21lIGtpbmQgb2YgZGVqYSB2dS4NCg0KSXQncyB0aGUgVGhpcmQgRXllLCByaWdodD8NCg0KQW55d2F5Li4uSSBjb3VsZCBiZSB0b3RhbGx5IHdyb25nIGFib3V0IHRoaXMuIEJ1dCBJIHJlYWxseSB0aGluayB5b3UgbWlnaHQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcuDQoNCkkgdGhpbmsgeW91IG1pZ2h0IGJlIGFibGUgdG8gZ28gYmFjay4uLm9yIGhvd2V2ZXIgeW91IHdhbnQgdG8gcHV0IGl0Li4uDQoNCi4uLlRvIGdvIGJhY2sgYW5kIHRlbGwgdGhlbSB3aGF0J3MgZ29pbmcgdG8gaGFwcGVuLg0KDQpJZiB0aGV5IGtub3cgYWhlYWQgb2YgdGltZSwgdGhlbiB0aGV5IHNob3VsZCBiZSBhYmxlIHRvIGF2b2lkIGl0Lg0KDQpUaGV5IHNob3VsZC4uLmlmIHRoZXkgcmVtZW1iZXIgdGhlaXIgdGltZSB3aXRoIG1lIGluIHRoZSBvdGhlciB3b3JsZHMuLi50aGV5IHNob3VsZCByZW1lbWJlciB3aGF0IEkgdGVsbCB0aGVtLg0KDQpZZWFoLiBJIHJlYWxseSB0aGluayB0aGlzIG1pZ2h0IGJlIHBvc3NpYmxlLiBCdXQgaXQncyB1cCB0byB5b3UuDQoNCkknbSBzb3JyeSBmb3IgYWx3YXlzIGJlaW5nLi4ueW91IGtub3cuLi4NCg0KLi4uDQoNCk5ldmVyIG1pbmQuIEkga25vdyB0aGF0J3Mgd3JvbmcuDQoNClRoaXMgaXMgbXkgc3RvcnkuIEl0J3MgdGltZSB0byBiZSBhIGZ1Y2tpbmcgaGVyby4NCg0KQm90aCBvZiB1cy4NCg0KDQoNCjIwMTg=
encodage base64.
Can you hear me?
...Who are you?
I can't...I can't see you.
But I know you're there. Yeah...you can definitely hear me.
You've been watching for a while now, right?
(Ce qui suit est omis de vos propres mains.)
C'était juste comme ça. C'est juste une partie d'histoire, mais élaborons jusqu'à présent. J'ai trouvé que c'était merveilleux.
La prochaine fois, nous parlerons de l'établissement de l'histoire principale. à plus.
http://f4sn.hateblo.jp/entry/2018/02/16/205800#f-7c959141
Recommended Posts