Python ile ses dosyalarını çalma


38

Standart ses çıkışını kullanarak Raspberry Pi'mde ses dosyalarını çalmama izin veren bakımlı bir Python kütüphanesi arıyorum.

Şimdiye kadar birkaç denedim ama hiçbiri işe yaramadı. Pyglet normal bilgisayarımda iyi çalışıyor olsa da, Raspberry Pi'de hataya neden oluyor. Kullanımı kolay olduğu kanıtlanmış bir Python kütüphanesi var mı?


Kullanımı kolay olduğu kanıtlanmış bir akraba olsa da, burada StackOverflow'taki benzer soruya pygame'e bir alternatif gönderdim . Temel olarak bu alternatif vlc.py (çok iyi korunan libVLC Python modülü).
Ben

Aşağı doğru bir soru Pyglet'in RPI'de çalıştığını söylüyor. Hatanızla güncelleme yapabilir misiniz?
Brian Bulkowski

Yanıtlar:


31

En popüler Pygame'i tavsiye ederim . Yanılıyor olabilirim, ancak Pi'ye önceden yüklendiğine inanıyorum. Ses dosyalarını oynatmak için Pygame Mixer Müzik Modülü'nü kullanabilirsiniz. Aşağıda bazı örnek kodları ekledim.

Bir ses dosyası olduğunu varsayalım myFile.wav.

import pygame
pygame.mixer.init()
pygame.mixer.music.load("myFile.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
    continue

NOT: Bu başarısız olursa, lütfen terminale gidin ve sisteminizi güncelleyin.

apt-get update
apt-get upgrade

ve yeniden dene.


2
Çalınacak birden fazla sesiniz varsa (muhtemelen), o zaman her biri için bir pygame.mixer.Sound nesnesi oluşturmak daha iyidir, o zaman ses dosyalarının tanımlarını bir yerde tutabilirsiniz.
francis

İstediğim şey bu ama anakart sesimin sürücüsü yok, bu yüzden USB ses kartı kullanıyorum. espeakSadece iyi oynuyor , ama bu değil.
SDsolar

10

Diğer kullanıcı girişlerine cevap verirken arka planda otuz saniyelik bir şarkıyı çalmak için bir senaryoya ihtiyacım vardı. Daha sonra bazı olaylarda şarkıyı bitmesini istedim.

Sanırım çok zarif değil, ama arka plan MPlayer sürecine bir boru açtım.

import subprocess
player = subprocess.Popen(["mplayer", "song.mp3", "-ss", "30"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Sonra, MPlayer işlemini sonlandırmak istediğimde, borudan çıkmak için sadece "q" yazdım.

player.stdin.write("q")

Oynatmayı kontrol etmek için bu şekilde geçirebileceğiniz her türlü komut için MPlayer belgelerine bakın.

Umarım bu biraz yardımcı olur!


1
Bu gerçekten çok temiz. Bu adafruit öğreticisi, ses çalma hakkında konuşur ancak durdurmaz.
gideon

6

Diğer bir seçenek ise mpg321onu komut satırından kullanmak ve çağırmaktır.

apt-get install mpg321

Sonra Python'da:

import os

os.system('mpg321 foo.mp3 &')

Pygame neredeyse kesinlikle daha sağlam, ama sanırım ihtiyaçlarınızın neler olduğuna bağlı.


1
Bunu kendim düşündüm, ama çok şık olmadığını düşündüm, çünkü duraklama, ses kontrolü vb. Çok daha zor.
Stein,

Bu çok yavaş.
Alex

3

Grafik gerekmiyorsa pygame yerine pyglet'i tavsiye ederim . Benim görüşüme göre, daha basit, daha zarif ve daha iyi korunur. Sonra tekrar, bunun bir zevk meselesi olacağını bekliyorum.


1
Peki onu nasıl kullanıyorsun?
SDsolar

pyglet yalnızca bir ekran kullanılabilir olduğunda çalışıyor gibi görünüyor; uzaktan çalmak veya sadece ses çıkarmak amacıyla çalışmak için kullanılamaz.
207

0

Pygame, çeşitli kanallara ses yüklemek ve çalmak için güzel ve kolay bir yol sunar.


0

Borular aracılığıyla çok sayıda harici oyuncu kullanabilirsiniz. Ancak, neredeyse her zaman bir hız kaybı yaşayacaksınız. Oynatma kontrolünde de bir sorun var.

Size pyaudio'yu tavsiye ediyorum, iyi çalışıyor.

Sıkıştırılmış dosyaları da oynatmak istiyorsanız, sizi modül decoder.py 'e yönlendirmekte özgürüm. PyPI'de bulabilirsiniz.

Ayrıca alt işlemi kullanır, ancak oynatıcılar yerine kod çözücüleri çağırır. Çok fazla CPU kullanmıyorlar ve bir kısmı donanım ivmesini nasıl kullanacağını biliyor. Ham ses verisini çıkarmak için pyaudio veya başka bir şey kullanabilirsiniz. İsterseniz, pygame.sndarray kullanarak pygame'i bile kullanabilirsiniz. Bu şekilde pygame'in desteklediğinden daha fazla format oynayabilirsiniz.

Decoder.py'yi PyQT GUI ortamında, pyaudio ile ve aynı zamanda harici bir oynatıcı olarak kullanmaya çalıştım. Ahududu Pi B'deydi.

Sonuçlar her iki durumda da oldukça tatmin ediciydi.

Sadelik sorgulanabilir.

decoder.py'nin kendisi çok basittir, ancak diğer lib'ler ile birleştirmeniz gerekir ve bu kod satırlarını arttırır.

Decoder.py içindeki dosyaların nasıl oynatılacağına bir örnek var.


0

OSMC (Debian) kullanıyorum ve HDMI ile bağlı olan TV hoparlörlerimde çalmak için ses aldım. https://youtu.be/p2ljmTE67gs

Benim yöntemim, @xxmbabanexx tarafından ve burada yayınlanan yukarıdaki çözüme dayanıyordu . Temelde, eklemek zorunda dtparam=audio=oniçin/boot/config.txt


Bence "standart ses çıkışı" nı ifade ederken TS 3.5 mm jakı kastetti. Bu 3.5 jak için de işe yarıyor mu?
Bex,

Ah anlıyorum. Hmm muhtemelen denememiş olsa da, olmaz.
16'da
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.