Comment lire des fichiers musicaux (wav / mp3) sur Raspberry Pi python

Comment jouer de la musique avec python

Il existe cinq méthodes principales comme suit.

  1. pygame
  2. PyAudio
  3. vlc
  4. aplay
  5. mpg321

Dans ce post

J'écrirai principalement.

De plus, 3. ~ 5. sont souvent utilisés lorsque vous voulez simplement jouer de la musique sur Raspberry Pi, pas à partir de python. Un jeu de 4. est inclus par défaut, mais si vous installez vlc, vous pouvez jouer de la musique et éditer facilement en fonction de l'interface graphique, donc je pense que c'est pratique.

1.pygame

Il semble qu'un module appelé pygame soit installé par défaut dans le package python de Raspberry Pi. Le code ci-dessous.

audio_pygame.py


#!/usr/bin/env python
#-*- cording: utf-8 -*-

import pygame.mixer
import time

#Initialisation du module de mixage
pygame.mixer.init()
#Lire des fichiers musicaux
pygame.mixer.music.load("nom de fichier.mp3")
#Paramètres de lecture de musique et de comptage de lecture(-1 est la lecture en boucle)
pygame.mixer.music.play(-1)

time.sleep(60)
#Fin de la lecture
pygame.mixer.music.stop()

mixer.music est un module pour jouer de la musique. Vous pouvez lire des fichiers mp3 et des fichiers ogg. * Ajouté le 12 février 2017 </ font> pygame.mixer.music était lecture de fichier wav non prise en charge </ font>!

Utilisez le module mixer.Sound pour jouer des sons courts tels que des effets sonores. Le module Son peut lire les fichiers wav, mais il y a une limite de 500 Ko ou moins.

Pour plus de détails, veuillez vous référer à la référence japonaise suivante. Pygame.mixer en général pygame.mixer.music

2.PyAudio

Tout d'abord, comment installer. Apt-get install avec LXTerminal (ligne de commande).

$ sudo apt-get install python-pyaudio python3-pyaudio

Référence: PyAudio

Le code est comme suit.

audio_PyAudio.py


#-*- cording: utf-8 -*-

import wave
import pyaudio

#Spécifiez le nombre de morceaux
CHUNK = 1024
filename = "nom de fichier.wav"

#Créer une instance de PyAudio
p = pyaudio.PyAudio()

#Générer un flux
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

"""
 format:Type de données lors de la lecture et de l'écriture de flux
 channels:1 pour monophonique, 2 pour stéréo, pas d'autres nombres
 rate:Fréquence d'échantillonnage
 output:Mode de sortie
"""

#Lire 1024 données à la fois
data = wf.readframes(CHUNK)

#Courir
while data != '':
    #Écrire pour diffuser
    stream.write(data)
    #Lire à nouveau 1024
    data = wf.readframes(CHUNK)

#Terminer le traitement lorsque le fichier est terminé
stream.stop_stream()
stream.close()

p.terminate()

Référence: Mémorandum Takeshi

J'ai essayé diverses choses, mais il n'y avait aucun exemple de lecture d'un fichier mp3 avec PyAudio. Tous sont des fichiers wav.

Comme vous pouvez le voir dans le programme ci-dessus, la musique est lue tout en lisant constamment des données en streaming.

En outre, le son peut être joué par intermittence. Le débordement de pile avait également un [exemple de rapport](http://ja.stackoverflow.com/questions/23655/raspberry-pi ne sonne pas correctement les fichiers wav en utilisant pyaudio), mais une solution fondamentale a été apportée. Cela ne semble pas être le cas. * Ajouté le 12 février 2017 </ font> Nous avons constaté que la cause de la lecture saccadée était la taille de l'échantillon, la fréquence d'échantillonnage et le nombre de canaux du fichier musical. J'ai confirmé la lecture du fichier wav suivant. Surtout si la taille de l'échantillon est plus grande que cela, il ne peut pas être lu correctement.

  • Taille de l'échantillon: 16 bits
  • Taux d'échantillonnage: 44100Hz
  • Nombre de canaux: 2

3.vlc À partir de ce qui suit, la commande sera exécutée à l'aide d'un sous-processus.

* Ajouté le 12 février 2017 </ font> En configurant le multithreading avec multiprocessing etc., vous pouvez effectuer d'autres traitements sur python tout en jouant de la musique en utilisant un sous-processus. J'ai fait.

Tout d'abord, installez vlc.

$ sudo apt-get install vlc

Ensuite, le lecteur multimédia VLC sera ajouté au menu comme indiqué ci-dessous.

スクリーンショット 2016-12-02 02.12.02.png

Une fois ouvert, il ressemble à ceci.

スクリーンショット 2016-12-02 02.12.22.png

Vous pouvez maintenant lire et éditer de la musique / vidéo sur une base graphique. (vlc peut également convertir des fichiers wav en fichiers mp3. Référence: Notes plutôt que blogs)

Maintenant, il existe deux façons d'utiliser vlc sur la ligne de commande.

  1. Utilisez la commande cvlc
  2. Utilisez la commande vlc -I rc

Cette fois, nous allons procéder avec la méthode 2.

audio_vlc.py


#-*- cording: utf-8 -*-

import subprocess

subprocess.call("vlc -I rc --play-and-arrêter le nom du fichier.wav", shell=True)

Sur la ligne de commande pour terminer la lecture

> stop

Vous devez taper. Bien sûr, Ctrl + C convient également.

vlc ne peut pas être lu avec les privilèges root. Par conséquent, vlc ne peut pas être utilisé lorsque sudo doit être exécuté par rapport à d'autres bibliothèques du programme.

La commande vlc est écrite en Norian Diary. Vous pouvez également vérifier avec la commande help. Il y a un Wiki officiel dans vlc, c'est donc une bonne idée d'y chercher.

Et vlc peut lire à la fois wav et mp3. Il ne semble pas y avoir de limite supérieure sur la taille du fichier.

Cette fois, j'ai introduit l'exécution sur la ligne de commande, mais il semble qu'il existe également une bibliothèque appelée python-vlc. Il y a très peu d'informations sur ce python-vlc sur le net, il semble donc que la seule façon de l'utiliser est de lire le fichier py d'exemples.

De plus, puisque le sous-processus est la première apparition, cette histoire est un peu. Il semble que les modules os tels que os.system sont anciens et pas officiellement recommandés pour l'utilisation. Donc, utiliser subprocess.call au lieu de os.system semble être le moyen le plus récent.

4.aplay aplay est une commande de lecture de musique typique sous Linux. Ceci est également appelé à partir d'un sous-processus comme vlc.

audio_aplay.py


#-*- cording: utf-8 -*-

import subprocess

subprocess.call("nom du fichier aplay.wav", shell=True)

En fonction de la taille de la taille de l'échantillon, l'erreur suivante apparaîtra.

aplay: set_params:1233:Format d'échantillon non disponible
Available formats:
- U8
- S16_LE

La taille de l'échantillon a été mentionnée pour pyAudio, mais la taille de l'échantillon doit également être de 16 bits pour aplay.

Contrairement à vlc, aplay peut être joué avec les privilèges root. Donc, si vous devez traiter avec sudo, vous devez l'utiliser.

De plus, aplay ne peut pas lire les fichiers mp3. wav uniquement. Lorsque j'ai essayé de lire le fichier mp3, le bruit a continué à couler. Référence: IT Girls 'Raspberry Pie Introductory Struggle

5.mpg321 Il semble qu'il existe un module appelé mpg321 pour lire les fichiers mp3. (Honnêtement, si vous installez vlc, vous pouvez tout faire ...)

Première installation.

$ sudo apt-get install mpg321

Celles-ci sont également exécutées par sous-processus comme en 3. et 4.

audio_mpg321.py


#-*- cording: utf-8 -*-

import subprocess

subprocess.call("nom de fichier mpg321.mp3", shell=True)

Les détails de la lecture vidéo sur mpg321 sont décrits dans le IT Women's Raspy Struggle.

Bonus 1: Spécification de la destination de sortie de la musique

Comme moyen de spécifier si la musique doit sortir de la prise HDMI ou de la prise d'écouteur

  1. Spécifiez sur la ligne de commande
  2. Fonctionnement avec raspi-config

Il existe deux types.

1. Fonctionnement en ligne de commande

$ amixer cset numid=3 <1>

La partie <> est 1 pour la prise des écouteurs et 2 pour la sortie HDMI. S'il vaut 0, il est automatiquement déterminé. Référence: Nos Diary Traduction japonaise du document officiel Raspberry Pi

2. Fonctionnement avec raspi-config

Tout d'abord, ouvrez l'outil de configuration.

$ sudo raspi-config

Ensuite, sélectionnez la destination de sortie dans 7. Options avancées → A9 Audio.

スクリーンショット 2016-12-02 03.02.20.png スクリーンショット 2016-12-02 03.02.42.png スクリーンショット 2016-12-02 03.03.17.png

Terminé.

Bonus 2: qualité sonore

Quelle que soit la méthode que vous utilisez, si vous sortez de la prise des écouteurs telle quelle, du bruit se produira. La solution est

  1. Utilisez DAC
  2. Utilisez des haut-parleurs et des écouteurs USB
  3. Extrayez la musique de la prise HDMI d'une manière ou d'une autre

Il y en aura probablement trois. (Peut-être qu'il y en a d'autres ...) Essayez de sortir de la musique depuis USB à l'aide du convertisseur de prise pour écouteurs USB Cependant, le bruit s'est arrêté.

Une préparation comme celle-ci est nécessaire pour la sortie de musique depuis USB.

Résumé

Quand j'ai essayé de jouer de la musique avec python, je suis devenu fou avec seulement ERROR, alors j'ai écrit un article de synthèse. J'espère que tu trouves cela utile.

Recommended Posts