Python Audio Ausgabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
downandout
User
Beiträge: 6
Registriert: Dienstag 30. September 2014, 18:01

Hallo Leute,

also ich will mit Python einfach Töne mit versch. Instrumenten zu spielen, im Folgenden spiele ich den Ton F6 mit pygame.midi
Weiters will ich Töne in eine Wav-Datei exportieren. Ich bin mir leider nicht sicher, ob das mit pygame.midi auch gut möglich ist, bzw. unterstützt pygame.midi nur die Ausgabe auf eine "device"?!
Wie erzeuge ich mit pygame eine Wav-Datei? --> Bzw. könnt ihr mir eine Klasse empfehlen mit der das gut funktioniert?

Vielen Dank schon im Voraus ;)

Code: Alles auswählen

import pygame.midi
import time

 pygame.midi.init()
 player = pygame.midi.Output(0)
 player.set_instrument(0)
 player.note_on(65, 127)
 time.sleep(1)
 player.note_off(65, 127)
 del player
 pygame.midi.quit()
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Kennst du bereits Wave?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@downandout: Was ist denn das eigentliche Ziel?
downandout
User
Beiträge: 6
Registriert: Dienstag 30. September 2014, 18:01

Mein Ziel ist es einen Ton in eine .wav-Datei zu speichern! Im obrigen Programm erzeuge ich ja einen Ton, den will ich dann abspeichern können.

Gefunden habe ich wave.py und scipyio.wavfile damit ist es anscheinend möglich in eine .wav Datei zu schreiben. In meinem ersten Post generiere ich einen Ton mit Pygame, aber dann komm ich nicht weiter, da ich die erforderlichen Eingabeparameter ja nicht habe. (bzw. nicht umwandeln kann) Jetzt war eben meine Frage ob ich pygame überhaupt dafür nutzen kann, wenn ich Töne in eine .wav Datei schreiben will?
Oder ob ich da auf scipy und numpy angewiesen bin?
Im Idealfall hätte ich gerne ein Codebeispiel, das zwei Töne zB F6, C6 in eine .wav Datei schreiben kann.

Ich steh leider gerade etwas an...

Code: Alles auswählen

wave.py
Wave_write.setparams(nchannels, sampwidth, framerate, nframes, comptype, compname)

scipy.io.wavfile
write(filename, rate, data)	Write a numpy array as a WAV file
BlackJack

@downandout: MIDI ist ein paar Abstraktionsschichten über ”Töne” in WAV-Dateien schreiben. Und Pygame ist eher zum Abspielen von Audiodateien als zum erzeugen gedacht.

Mit Numpy-Arrays am einfachsten dürfte es sein wenn man sich eine Sinuskurve mit der entsprechenden Länge und Frequenz erstellt. Wie man die Frequenz zu einer Notenangabe wie C6 ermittelt, sollte im Netz zu finden sein.
downandout
User
Beiträge: 6
Registriert: Dienstag 30. September 2014, 18:01

Danke für deine Antwort!

Kann man mit scipy und numpy auch verschiedene Musikinstrumente einbauen?
BlackJack

@downandout: Da ist jetzt die Frage was Du unter einem ”Musikinstrument” verstehst. Statt Sinuskurven kann man natürlich auch andere Funktionen verwenden. Und man kann sich auch eine ADSR-Hüllkurve als Array erstellen und das mit den Tondaten verrechnen. Und/oder mehrere Funktionen kombinieren. Oder Samples von echten oder synthetischen Instrumenten bei einer bekannten Tonhöhe hernehmen und die durch resamplen (oder aufwändigeren Verfahren) auf die gewünschte Tonhöhe bringen.

Da stellt sich wieder die Frage was Du *eigentlich* machen möchtest, denn es gibt ja bereits einen ganzen Haufen an Softwaresynthesizern, Trackern, MIDI-Sequenzern, und so weiter.
Antworten