Ich habe nicht verstanden, wie man mit Sound in Python umgeht, also habe ich es grob zusammengefasst.
Grundsätzlich habe ich auf diese Site Abspielen und Aufnehmen von Sound in Python verwiesen.
Ein Beispiel für eine Bibliothek, die Audio wiedergibt
Es wird nur die Wiedergabesound-Funktion implementiert und eine WAV-Datei oder MP3-Datei angegeben und abgespielt.
install
pip install playsound
usage
from playsound import playsound
playsound("sample.wav")
Spielen Sie eine WAV-Datei oder ein NumPy-Array ab. Es ist auch möglich festzustellen, ob es abgespielt wird.
install
pip install simpleaudio
usage
import simpleaudio
wav_obj = simpleaudio.WaveObject.from_wave_file("sample.wav")
play_obj = wav_obj.play()
play_obj.wait_done()
#Überprüfen Sie, ob es abgespielt wird
if play_obj.is_playing():
print("still playing")
Ist Winsound für Windows standardmäßig verfügbar? Die Wiedergabe von WAV-Dateien und die Wiedergabe von Signaltönen sind möglich.
usage
import winsound
winsound.PlaySound("sample.wav", winsound.SND_FILENAME)
#Piepton abspielen
import winsound
winsound.Beep(1000, 100) #Spielen Sie 100 ms lang einen 1000-Hz-Piepton
Bietet Bindung für die PortAudio-Bibliothek. Bietet Funktionen zum Abspielen / Aufzeichnen von Audiosignalen und NumPy-Arrays.
install
Wenn Sie Anaconda verwenden, können Sie es mit dem Conda-Paket installieren
conda install -c conda-forge python-sounddevice
usage
import sounddevice as sd
import wave
import numpy as np
wf = wave.open("sample.wav")
fs = wf.getframerate()
data = wf.readframes(wf.getnframes())
data = np.frombuffer(data, dtype='int16')
sd.play(data, fs)
status = sd.wait()
Das Obige behandelt den gesamten Song auf einmal, aber wenn eine Echtzeitverarbeitung durchgeführt wird, ist es notwendig, Audiosignale in kurzen Einheiten durch Rückrufverarbeitung zu verarbeiten.
import sounddevice as sd
duration = 5.5
def callback(indata, outdata, frames, time, status):
if status:
print(status)
outdata[:] = indata
with sd.Stream(channels=2, callback=callback):
sd.sleep(int(duration * 1000))
install
pip install pydub
Wenn Sie andere Dateien als WAV wie MP3 verwenden, müssen Sie auch ffmpeg oder libav installieren.
Darüber hinaus müssen Sie eine der folgenden Optionen installieren, um Audio abzuspielen (simpleaudio wird empfohlen).
usage
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_file("sample.wav", format="wav")
play(sound)
Bietet Bindung für die PortAudio-Bibliothek. Einfache Audiowiedergabe und Aufnahme plattformübergreifend.
Das Abspielen von einfachem Audio ist komplizierter als andere Methoden. Wenn Sie also nur eine Datei abspielen möchten, sollten Sie eine andere Methode wählen.
Es ist jedoch möglich, Eingabe- / Ausgabegeräte einzustellen und die Latenz für die Steuerung auf einer niedrigeren Ebene zu überprüfen. Da es im Rückruf beschrieben werden kann, eignet es sich auch zur Durchführung einer relativ komplizierten Verarbeitung.
install
pip install pyaudio
#Auch mit conda möglich
conda install pyaudio
usage
import pyaudio
import wave
import sys
chunk = 1024
wf = wave.open("sample.wav", "rb")
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True)
data = wf.readframes(chunk)
while data != '':
stream.write(data)
data = wf.readframes(chunk)
stream.stop_stream()
stream.close()
p.terminate()
Ein Beispiel für eine Bibliothek, die Audio aufnehmen kann
usage
import sounddevice as sd
from scipy.io.wavfile import write
record_second = 3
fs = 44100
myrecording = sd.rec(int(record_second * fs), samplerate=fs, channels=2)
write('output.wav', fs, myrecording)
usage
import pyaudio
import wave
chunk = 1024
format = pyaudio.paInt16
channels = 2
fs = 44100
record_second = 3
p = pyaudio.PyAudio()
stream = p.open(format=format, channels=channels, rate=fs, input=True, frames_per_buffer=chunk)
print("* recording")
frames = []
for i in range(int(fs / chunk * record_second)):
data = stream.read(chunk)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open("output.wav", "wb")
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(format))
wf.setframerate(fs)
wf.writeframes(b''.join(frames))
wf.close()
Da Sie möglicherweise das Wiedergabe- / Aufnahmegerät angeben möchten, überprüfen Sie, wie Sie es in jeder Bibliothek ändern können.
Verfügbare Geräte und ausgewählte Geräte anzeigen
import sounddevice as sd
sd.query_devices()
Ausführungsbeispiel
Sie können auch den folgenden Befehl auf dem Terminal verwenden.
python -m sounddevice
Die Geräteauswahl ist möglich, indem Sie die Geräte-ID auf "default.device" setzen oder sie als Geräteargument "play ()" und "Stream ()" zuweisen.
import sounddevice as sd
sd.default.device = 1, 5
Recommended Posts