Pounding Literary Club x Python ① Analyse de fichier de personnage

introduction

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 __

Semaine 1 "Analyse des fichiers de caractères"

Fichiers de personnages profondément impliqués dans la progression de l'histoire

Sayori (climatiseur incroyable)

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. Figure_1.png

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.

image.png

Non, c'est un code QR. Si vous régénérez ceci dans un code QR 25x25 ... S__65118215.jpg

http://www.projectlibitina.com/

Yuri

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.) 

Natsuki

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".

Monica

Enfin apparut Monica-chan. Comme d'habitude.

PNG~~~

Non, ça dit PNG! Ensuite, il s'ouvrira. monika.png

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.) 

À la fin

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.

Site de référence

http://f4sn.hateblo.jp/entry/2018/02/16/205800#f-7c959141

Recommended Posts

Pounding Literary Club x Python ① Analyse de fichier de personnage
2.x, 3.x code de caractères des séries python
[Python] Récupère le code de caractère du fichier
[Python] [chardet] Détection automatique du code de caractère dans les fichiers
Convertir le code de caractère du fichier avec Python3
Fichier python de script
Analyse de données python
code de caractère python
Traitement de fichiers Python
Téléchargez des fichiers tout en affichant la progression dans Python 3.x