Gérer les sons en Python

Gérer les sons en Python

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.

Régénération

Un exemple de bibliothèque qui lit de l'audio

playsound

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")

simpleaudio

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")

winsound

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

python-sounddevice

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))

pydub

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)

pyaudio

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()

enregistrement

Un exemple de bibliothèque capable d'enregistrer de l'audio

python-sounddevice

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)

pyaudio

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()

dispositif

Puisque vous souhaiterez peut-être spécifier le périphérique de lecture / d'enregistrement, vérifiez comment le changer dans chaque bibliothèque.

python-sounddevice

Afficher les appareils disponibles et les appareils sélectionnés

import sounddevice as sd
sd.query_devices()

Exemple d'exécution b985e173.png

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

Gérer les sons en Python
Exploitez LibreOffice avec Python
Travailler avec LibreOffice en Python: import
Travailler avec des images DICOM en Python
Essayez de travailler avec des données binaires en Python
Essayez de travailler avec Mongo en Python sur Mac
[Introduction pour les débutants] Manipuler MySQL avec Python
Grattage au sélénium en Python
Grattage avec chromedriver en python
Débogage avec pdb en Python
Python: travailler avec Firefox avec du sélénium
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Expliquez en détail comment créer un son avec python
Reconnaissance des nombres dans les images avec Python
GOTO en Python avec Sublime Text 3
Scraping avec Selenium en Python (Basic)
Analyse CSS avec cssutils en Python
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
Utiliser rospy avec virtualenv dans Python3
Utiliser Python mis en pyenv avec NeoVim
Heatmap avec dendrogramme en Python + matplotlib
Lire des fichiers en parallèle avec Python
Générer un mot de passe pour le manuel avec python
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
Démarrez avec Python avec Blender
Écrire de la documentation dans Sphinx avec Python Livereload
Obtenez des données supplémentaires vers LDAP avec python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Essayez de vous connecter à qiita avec Python
Test de stress avec Locust écrit en Python
Contrôle exclusif avec fichier de verrouillage en Python
Statistiques avec python
Surveillance des appareils effectuée par Python On-box de IOS-XE
Méta-analyse en Python
Unittest en Python
Python avec Go
Dessinez Nozomi Sasaki dans Excel avec python
Conseils pour gérer les binaires en Python
Afficher Python 3 dans le navigateur avec MAMP
Twilio avec Python
Époque en Python
Discord en Python
Intégrer avec Python
Comment utiliser BigQuery en Python
Classe Trump en Python (avec comparaison)
Allemand en Python
DCI en Python