Pounding Literary Club x Python ① Analyse der Charakterdatei

Einführung

Ein Spiel, das Kennern bekannt ist, der hämmernde Literaturclub.

Wussten Sie, dass dieser pochende Literaturclub in Python (Renpy) geschrieben ist? Dann soll dieses Projekt den hämmernden Literaturclub mit diesem Python nackt machen.

Wenn Sie interessiert sind, spielen Sie bitte die Hauptgeschichte. Frei.

__ Beinhaltet Spoiler __ __ Die Arbeit des Inhalts des Artikels gehört dem Autor des pochenden Literaturclubs __

Woche 1 "Zeichendateianalyse"

Charakterdateien, die stark am Fortschritt der Geschichte beteiligt sind

Sayori (erstaunliche Klimaanlage)

Siehe sayori.chr.

Wenn Sie es normalerweise mit einer Textdatei öffnen, ist der Anfang

OggS~~~~~~~

Es beginnt mit. Daraus kann sich eine __. Ogg-Datei (Sprachdaten) __ ergeben.

Wenn Sie es tatsächlich spielen, sollten Sie hochfrequentes Rauschen hören.

Dies wird spektral analysiert.

Die Spektrogrammanalyse ist eine Visualisierung von Audiodaten mit der Zeit auf der horizontalen Achse und der Frequenz auf der vertikalen Achse.

Klicken Sie hier für den Code

from pydub import AudioSegment
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#Ogg lesen und probieren
AudioSegment.ffmpeg = "/."
sound = AudioSegment.from_ogg("sayori.ogg")
samples = np.array(sound.get_array_of_samples())
sample = samples[::sound.channels]

#Spektrale Speicherbreite
w = 100
s = 50

ampList = []
argList = []

#Fourier-Transformation
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()

Fordern Sie zuerst mit "w = 100 s = 50" heraus. Figure_1.png

Ich sehe etwas Sinnvolles. Machen wir es etwas rauer. w = 200 s = 100 Mit cmap = plt.cm.gray_r ist es einfacher zu sehen.

image.png

Nein, es ist ein QR-Code. Wenn Sie dies in einen 25x25 QR-Code umwandeln ... S__65118215.jpg

http://www.projectlibitina.com/

Yuri

44GC44Gq44Gf44GM44GT44Gu5omL57SZ44KS6Kqt44KT44Gn44G ....

Wiederholen Sie 44xx. Besonders als ich das erste "44GC" überprüft habe, scheint es "A" der "Base64-Codierung" zu sein. Deshalb dekodiert es mit base64.

import base64

with open("yuri.chr", mode="rb") as f:
    txt = f.read()
    print(base64.b64decode(txt).decode())
Wenn Sie diesen Brief lesen, bedeutet dies, dass das Herzsymbol eine kleine Holzkiste als Orientierungspunkt gefunden hat. Glückwunsch ! Vielleicht bist du das erste Mal. Ich wollte es niemandem zeigen, aber das ist ein roter Fremder
Ich bin begeistert, wenn ich daran denke, einen Brief zu finden und meine Geschichte zu lesen. Jemand, den ich nicht hätte treffen können, kennt mich sehr gut. Ich bin besessen von einer Idee. Jemand in uns stirbt ... es kann morgen sein
Und diejenigen, die übrig bleiben, wissen es nicht. Ich habe Ihnen den ganzen Beweis geschrieben, dass ich bisher in diesem Brief gelebt habe. So lange du mich nicht vergisst, kann ich für immer leben. Sie lesen diesen Brief und faszinieren
Ich frage mich, ob ich es beim Schreiben dieses Briefes kann oder hasse. Findest du es nicht interessant?

(Das Folgende wird von Ihren eigenen Händen weggelassen.) 

Natsuki

Öffnen Sie es nach wie vor als Text.

����JFIF~~~

kam heraus. Erweiterung JFIF. Wenn Sie die Erweiterung auf JPEG setzen, können Sie sie als flaches Bild sehen.

Ich habe versucht, dies mit Python zu handhaben, aber leider verlasse ich mich auf Unity, weil ich nicht sicher bin. Erstellen Sie einen Kegel und fügen Sie die Textur ein.

Das Schreiben schien gefährlich zu sein, bitte suchen Sie Google-Bilder mit "natsuki.chr".

Monica

Schließlich erschien Monica-chan. Wie gewöhnlich.

PNG~~~

Nein, es heißt PNG! Dann wird es geöffnet. monika.png

In der Mitte sehen Sie ein Schwarzweißmosaik. Binär codieren dies (schwarz ist 0, weiß ist 1) Bereiten Sie ein zugeschnittenes Bild ohne den umgebenden roten Teil vor.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

#Laden des Originalbildes
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=

Base64-Codierung.

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?

(Das Folgende wird von Ihren eigenen Händen weggelassen.) 

Am Ende

Es war einfach so. Es ist nur ein Teil der Geschichte, aber lassen Sie uns so weit gehen. Ich fand es wunderbar.

Nächstes Mal werden wir über die Festlegung der Hauptgeschichte sprechen. wir sehen uns.

Referenzseite

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

Recommended Posts

Pounding Literary Club x Python ① Analyse der Charakterdatei
2.x, 3.x Serienzeichencode von Python
[Python] Ruft den Zeichencode der Datei ab
[Python] [chardet] Automatische Erkennung von Zeichencode in Dateien
Konvertieren Sie den Zeichencode der Datei mit Python3
Skript-Python-Datei
Datenanalyse Python
Python-Zeichencode
Python-Dateiverarbeitung
Laden Sie Dateien herunter, während Sie den Fortschritt in Python 3.x anzeigen