Was ist der einfachste Weg, eine Sounddatei (.wav) in Python abzuspielen? Mit dem einfachsten meine ich sowohl die meisten plattformunabhängig als auch die geringsten Abhängigkeiten. Pygame ist sicherlich eine Option, aber es scheint Overkill für nur Sound.Einen Sound mit Python abspielen
Antwort
The Snack Sound Toolkit kann wav, au und mp3-Dateien abspielen.
s = Sound()
s.read('sound.wav')
s.play()
Das Beispiel von pyMedia ist just that. Dies sollte alles sein, was Sie brauchen.
import time, wave, pymedia.audio.sound as sound
f= wave.open('YOUR FILE NAME', 'rb')
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output(sampleRate, channels, format)
s= f.readframes(300000)
snd.play(s)
hehe, das funktioniert gut, aber das Snack-Beispiel benötigt viel weniger Codezeilen! Ich bin sicher, pymedia ist flexibler – Claudiu
Verwenden Sie unbedingt Pyglet dafür. Es ist eine Art großes Paket, aber es ist reines Python ohne Erweiterungsmodule. Das wird definitiv am einfachsten für den Einsatz sein. Es hat auch großartige Format- und Codec-Unterstützung.
import pyglet
music = pyglet.resource.media('music.mp3')
music.play()
pyglet.app.run()
Für Windows können Sie winsound verwenden. Es ist in
import winsound
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
gebaut Sie sollten für Linux zu verwenden ossaudiodev Lage:
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams()
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
from sys import byteorder
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
(Kredit für ossaudiodev: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html)
das ist gut - es scheint einfach zu sein baue einen Wrapper, der zumindest für diese beiden Plattformen funktionieren würde – Claudiu
Vermeide Oss, es ist alt, ich glaube nicht, dass ich es überhaupt installiert habe –
OSS ist nicht alt. Es ist nur so, dass die Linux-Leute es aus Gründen, die mehr mit Politik und Ego als mit Softwareentwicklung zu tun haben, entschieden haben, es durch ALSA zu ersetzen. Unabhängig davon bleibt OSS das einzige plattformübergreifende UNIX-Soundsystem und wird wahrscheinlich auch in absehbarer Zeit bestehen bleiben. – Carpetsmoker
I pygame mögen, und der folgende Befehl sollte funktionieren :
pygame.init()
pygame.mixer.Sound('sound.wav').play()
aber es ist nicht auf einer meiner Berechnungen rs, und es gibt nur begrenzte Hilfe zum Thema da draußen. edit: Ich habe herausgefunden, warum der Pygame-Sound bei mir nicht funktioniert, er lädt die meisten Sounds nicht richtig, das Attribut 'Länge' ist ~ 0,0002, wenn ich sie lade. vielleicht lädt man sie mit etwas anderem als mygame, um es allgemeiner zu machen.
mit pyglet Ich bekomme eine Ressource nicht gefunden Fehler Verwenden Sie das obige Beispiel, sowohl relative als auch vollständige Pfade zu den Dateien.
mit pyglet.media.load()
anstelle von pyglet.resource.media()
kann ich die Dateien laden.
aber sound.play()
spielt nur die erste Bruchteil einer Sekunde der Datei, es sei denn, ich pyglet.app.run()
laufen die Blöcke alles andere ...
Aus dem Handbuch: "Das Mixer-Modul muss wie andere pygame-Module initialisiert werden, aber es hat einige zusätzliche Bedingungen. Die pygame.mixer.init - Initialisierung der Mixer-Modul-Funktion nimmt mehrere optionale Argumente, um die Wiedergabegeschwindigkeit und Stichprobengröße zu steuern. Pygame wird standardmäßig auf vernünftige Werte gesetzt, aber pygame kann kein Sound-Resampling durchführen, daher sollte der Mixer initialisiert werden, damit er mit den Werten der Audio-Ressourcen übereinstimmt. " - Das könnte der Grund sein, warum Ihre Ressourcen nicht korrekt geladen werden ... –
wxPython hat die Unterstützung für WAV-Dateien unter Windows und Unix spielen - Ich bin nicht sicher, ob Dazu gehören Macs. Allerdings unterstützt es nur Wav-Dateien, soweit ich das beurteilen kann - es unterstützt keine anderen gängigen Formate wie MP3 oder OGG.
Nach dem Spiel() Befehl eine Verzögerung hinzufügen von 10 Sekunden sagen, oder so, wird es
import pygame
import time
pygame.init()
pygame.mixer.music.load("test.wav")
pygame.mixer.music.play()
time.sleep(10)
Dies spielt auch MP3-Dateien arbeiten.
pygame verwendet nicht die korrekte Abtastrate für die Wave-Dateien, die ich verwende – Octopus
Ich habe gerade einen einfachen Python-Wrapper um Sox veröffentlicht, der einen Sound mit Python spielen wird. Es ist sehr einfach zu installieren, da Sie Python 2.6 oder höher, sox (leicht zu Binärdateien für die meisten Architekturen) und den Wrapper (https://github.com/standarddeviant/sound4python) benötigen.Wenn Sie nicht Sox haben, hier gehen: http://sourceforge.net/projects/sox/files/sox/
Sie Audio spielen würde mit ihm durch:
from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
a.append(random.randint(-16384,16384))
sound(a)
Denken Sie daran, tatsächlich die einzigen Teile, in die Wiedergabe von Audio beteiligt sind gerade diese:
from sound4python import sound
...
sound(a)
Für Linux Benutzer, wenn Low-Level-PCM Daten Manipulation benötigt wird, versuchen alsaaudio Modul. Es gibt auch ein playwav.py-Beispiel innerhalb des Pakets.
Link http://larsimmisch.github.io/pyalsaaudio/libalsaaudio.html#playwav-py –
Das scheint lächerlich und weit hergeholt, aber Sie könnten immer Windows (oder welches Betriebssystem Sie bevorzugen) verwenden, um den Sound für Sie zu verwalten!
import os
os.system("start C:/thepathyouwant/file")
Einfach, keine Erweiterungen, etwas langsam und junky, aber funktioniert.
Nett. Öffnen Sie eine ganze Menge von Möglichkeiten zu wissen, Python hatte diese Funktion – swdev
Dies ist keine Funktion von Python, es ist ein Aufruf an einen Prozess im Betriebssystem. es ist nicht plattformübergreifend, und es ist furchtbar teuer – erjoalgo
Cross-Plattform: 'Import sys'' aus Subprozess importieren Aufruf '' if sys.platform == 'linux2': '' call (["xdg-open", "Sound .mp3 "])' 'elif sys.platform == 'darwin':' 'call ([" afplay "," sound.mp3 "])' Was teuer ist, ist Zeitverschwendung bei all diesen fehlerhaften Sound-Bibliotheken tbh. Ersetzen von 'xdg- open 'für' mpg123' gibt 'afplay' Funktionalität unter Linux –
Sehr ähnliche Frage zu http://stackoverflow.com/questions/260738/play-audio-with-python. –
Oder das: http://stackoverflow.com/questions/276266/whats-a-cross-platform-way-to-play-a-sound-file-in-python – lpfavreau