Je ne savais pas comment gérer le son en Python, je vais donc le résumer en gros.
Fondamentalement, j'ai fait référence à ce site Lecture et enregistrement du son en Python.
Un exemple de bibliothèque qui lit de l'audio
Seule la fonction de lecture sonore est implémentée et un fichier WAV ou MP3 est spécifié et lu.
install
pip install playsound
usage
from playsound import playsound
playsound("sample.wav")
Lisez un fichier WAV ou un tableau NumPy. Il est également possible de déterminer s'il joue.
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()
#Vérifiez s'il joue
if play_obj.is_playing():
print("still playing")
Pour Windows, Winsound est-il disponible par défaut? La lecture de fichier WAV et la lecture du bip sonore sont possibles.
usage
import winsound
winsound.PlaySound("sample.wav", winsound.SND_FILENAME)
#Jouer un bip
import winsound
winsound.Beep(1000, 100) #Émettre un bip de 1000 Hz pendant 100 ms
Fournit une liaison pour la bibliothèque PortAudio. Fournit des fonctionnalités pour lire / enregistrer des signaux audio et des tableaux NumPy.
install
Si vous utilisez Anaconda, vous pouvez l'installer avec le package conda
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()
Ce qui précède gère la chanson entière à la fois, mais lors du traitement en temps réel, il est nécessaire de gérer les signaux audio en unités courtes par traitement de rappel.
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
Lors de l'utilisation de fichiers autres que WAV tels que MP3, il est également nécessaire d'installer ffmpeg ou libav.
De plus, vous devez installer l'un des éléments suivants pour lire l'audio (simpleaudio est recommandé)
usage
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_file("sample.wav", format="wav")
play(sound)
Fournit une liaison pour la bibliothèque PortAudio. Lecture et enregistrement audio faciles sur une plateforme multiplateforme.
La lecture audio simple est plus compliquée que les autres méthodes, donc si vous souhaitez simplement lire un fichier, vous devez choisir une autre méthode.
Cependant, il est possible de régler les périphériques d'entrée / sortie et de vérifier la latence pour le contrôle à un niveau inférieur. De plus, comme il peut être décrit dans le rappel, il convient pour effectuer un traitement relativement compliqué.
install
pip install pyaudio
#Également possible avec conda
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()
Un exemple de bibliothèque capable d'enregistrer de l'audio
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()
Puisque vous souhaiterez peut-être spécifier le périphérique de lecture / d'enregistrement, vérifiez comment le changer dans chaque bibliothèque.
Afficher les appareils disponibles et les appareils sélectionnés
import sounddevice as sd
sd.query_devices()
Exemple d'exécution
Vous pouvez également utiliser la commande suivante sur le terminal.
python -m sounddevice
La sélection de périphérique est possible en définissant l'ID de périphérique sur default.device
ou en l'attribuant à play () ʻet
Stream () ʻ comme argument de périphérique.
import sounddevice as sd
sd.default.device = 1, 5
Recommended Posts