Spielen Sie Sounds in Python ab, vorausgesetzt, die Tastatur ist eine Klaviertastatur

ピアノの鍵盤

!! Yahho Kon'nichiwa </ b> </ span> Ich bin Ozaki, der Physik liebt (@ sena0801masato).

Unter der Annahme, dass es sich bei der Tastatur um eine Klaviertastatur handelt, möchte ich dieses Mal Python verwenden, um Sounds von einem Computer abzuspielen. Ich kam auf die Idee, als ich von dem Anime "April ist deine Lüge" beeindruckt war lol Ich bin überhaupt nicht mit Musik vertraut, also sag es mir bitte.

Wer ist das Ziel dieses Artikels?

――Ich möchte die Waage von meinem Computer aus spielen!

  • Ich möchte nur Standardmodule verwenden
  • Ich möchte die Tonquelle nicht herunterladen
  • Ich benutze Windows

Was ich in Zukunft verbessern möchte

――Ich möchte die heruntergeladene Tonquelle anstelle des Signaltons verwenden können

  • Ich möchte Akkorde ausgeben ――Ich möchte weiterhin einen einzelnen Ton erzeugen, indem ich ihn gedrückt halte

Über die Skala

Wenn Sie an die Skala denken, denken Sie an Doremi Fasorashi. Zusätzlich zu diesen 7 Tönen werden 5 Töne der schwarzen Taste hinzugefügt, um insgesamt 12 Töne zu erzeugen, und es beginnt erneut mit einer Oktave höher.

Die Standardfrequenz der Skala beträgt 440 Hz von La, und die Frequenz verdoppelt sich, wenn sie um eine Oktave ansteigt. Daher wird die Frequenz in 1 Halbton mit $ 2 ^ {1/12} $ multipliziert und nicht in 12 Halbtönen zweimal.

Diesmal wurde die Oktave mit der Referenz la (440 Hz) als 4. Stufe eingestellt, und der Variablenname wurde mit dem Klang als Tonhöhe definiert.

Klang ドイツ語のKlang階表記
Machen C4
Machen# Cis4
Les D4
Les# Dis4
Mi. E4
Fa F4
Fa# Fis4
Damit G4
Damit# Gis4
La(440Hz) A4
La# Ais4
Shi H4
High de C5

Schwierigkeiten

Ich habe mich gefragt, wie das Programm Tastatureingaben erhalten würde. Ich konnte keine Eingabe verwenden, da es nicht wie bei einem Klavier war, jedes Mal die Eingabetaste zu drücken, um die Tonhöhe zu korrigieren, also habe ich endlich getch verwendet. getch liest die Tastenanschläge und gibt die gelesenen Zeichen zurück, aber es gab eine sehr gute Standardbibliothek, die nichts auf der Konsole wiedergab und nicht einmal die Eingabetaste drücken musste. (Es hat eine Weile gedauert, bis ich dazu gekommen bin ... Es scheint, dass ich normalerweise Pygame usw. benutze.)

Code abgeschlossen

digital_piano_ver01.py


from winsound import Beep
from msvcrt import getch

#Definition, wie oft die Abweichung einer halben Note ist
onestep_pitch = 2 ** (1.0/12.0)
#Definieren Sie die Zeit für ein Geräusch in Millisekunden
duration = 300

#Definieren Sie eine Funktion, um einen Ton zu erzeugen
def play_pitch(frequency, duration):
    Beep(frequency, duration)
#Definieren Sie eine Funktion zum Anheben oder Absenken einer halben Note
def down_pitch(base_pitch):
    return int(round(base_pitch / onestep_pitch))
def up_pitch(base_pitch):
    return int(round(base_pitch * onestep_pitch))

#Definieren Sie die Frequenz jeder Tonhöhe
A4 = 440
Ais4 = up_pitch(A4)
H4 = up_pitch(Ais4)
C5 = up_pitch(H4)
Cis5 = up_pitch(C5)
D5 = up_pitch(Cis5)
Dis5 = up_pitch(D5)
E5 = up_pitch(Dis5)

Gis4 = down_pitch(A4)
G4 = down_pitch(Gis4)
Fis4 = down_pitch(G4)
F4 = down_pitch(Fis4)
E4 = down_pitch(F4)
Dis4 = down_pitch(E4)
D4 = down_pitch(Dis4)
Cis4 = down_pitch(D4)
C4 = down_pitch(Cis4)
H3 = down_pitch(C4)
Ais3 = down_pitch(H3)
A3 = down_pitch(Ais3)

#Verknüpfen Sie die Tonhöhe mit der Tastatur. Von der Tastatur"d"Ist C4, das heißt, der Sound von do usw.
pitchs = {}
pitchs["a"] = A3
pitchs["w"] = Ais3
pitchs["s"] = H3
pitchs["d"] = C4
pitchs["r"] = Cis4
pitchs["f"] = D4
pitchs["t"] = Dis4
pitchs["g"] = E4
pitchs["h"] = F4
pitchs["u"] = Fis4
pitchs["j"] = G4
pitchs["i"] = Gis4
pitchs["k"] = A4
pitchs["o"] = Ais4
pitchs["l"] = H4
pitchs[";"] = C5
pitchs["@"] = Cis5
pitchs[":"] = D5
pitchs["["] = Dis5
pitchs["]"] = E5

while True:
    #Erkennen Sie den eingegebenen Schlüssel
    bytes_keyboard = getch()
    #Konvertieren Sie von Byte-String zu String
    str_keyboard = bytes_keyboard.decode("utf-8")
    #Richten Sie die Zeichenfolge an den unteren Buchstaben aus
    pitch = str_keyboard.lower()
    print("Musikskala", pitch)
    #Gibt einen Ton aus, wenn sich die gedrückte Taste im Wörterbuch befindet
    if pitch in pitchs:
        play_pitch(pitchs[pitch], duration)
    #Drücken Sie q, um den Vorgang zu beenden
    elif pitch == 'q':
        break

Zusammenfassung

Vorerst habe ich so etwas wie ein Klavier gemacht. Aber es gibt noch Raum für Verbesserungen. Was mich sehr beunruhigt, ist, dass ich keine Akkorde spielen kann, und selbst wenn ich sie drücke und halte, wird der Ton in der definierten Millisekunde abgeschnitten. Ich frage mich, ob diese beiden nicht mit asynchroner Verarbeitung ausgeführt werden können. Bitte lassen Sie mich wissen, wenn jemand dies kann. Eine andere Idee ist, dass Sie, wenn Sie einen Klang aus einer Wellenform erzeugen, einen Akkord und einen Klang ausdrücken können, der durch Drücken und Halten gedämpft wird. Ich dachte nur, dass die elektronischen Klaviere, die tatsächlich verkauft wurden, erstaunlich waren, lol

Dann! </ B> </ span>

Verweise

[Winsound --- Audio-Wiedergabeschnittstelle für Windows] (https://docs.python.org/ja/3/library/winsound.html) msvcrt --- Nützliche Routinen für das MS VC ++ - Laufzeitsystem Ich wollte ein Schlüsselereignis in Python erhalten, konnte es aber nicht. ← Ich habe es getan. [Erstellen von GUI-Sound-Play-Software mit Tkinter (4) - Erstellen von Sound mit Python] (https://takasa-5.blogspot.com/2017/04/tkinter-gui4.html)

Recommended Posts