題:
使用Python播放音頻文件
Stein
2013-04-18 17:04:51 UTC
view on stackexchange narkive permalink

我正在尋找一個維護良好的Python庫,該庫允許我使用標準音頻輸出在Raspberry Pi上播放音頻文件。

到目前為止,我已經嘗試了好幾次,但似乎都沒有工作。儘管pyglet可以在我的常規計算機上正常工作,但會在Raspberry Pi上導致錯誤。是否有一個Python庫被證明易於使用?

Proven as easy to use is kind of relative, but I posted an alternative to pygame to similar question on StackOverflow [over here](http://stackoverflow.com/a/25899180/2801707). Basically that alternative is vlc.py (the libVLC Python module, which is very well maintained).
還有一個問題說Pyglet在RPi上工作。您可以更新您的錯誤嗎?
七 答案:
xxmbabanexx
2013-04-18 17:37:27 UTC
view on stackexchange narkive permalink

我推薦廣受歡迎的 Pygame。我可能是錯的,但我相信它已預先安裝在Pi上。您可以使用 Pygame混音器音樂模塊播放音頻文件。我在下面提供了一些示例代碼。

假設我們有一個名為 myFile.wav 的音頻文件。

  import pygamepygame.mixer.init ()pygame.mixer.music.load(“ myFile.wav”)pygame.mixer.music.play()而pygame.mixer.music.get_busy()==真:繼續 

注意::如果失敗,請轉到終端並使用

  apt-get updateapt-get upgrade  

然後重試。

如果您要播放一種以上的聲音(可能的話),那麼最好為每個聲音創建一個pygame.mixer.Sound對象,那麼可以將聲音文件名的定義放在一個位置。
這就是我想要的,但是我的主板聲音沒有驅動程序,所以我使用USB聲卡。它可以很好地播放“ espeak”,但不能這樣。
user1616681
2013-04-18 20:29:51 UTC
view on stackexchange narkive permalink

我需要一個腳本來在後台播放30秒內的歌曲,同時響應其他用戶輸入。然後,我希望它在某個事件中結束歌曲。

我認為它不是特別優雅,但是我打開了一個通往MPlayer後台進程的管道。

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

然後,當我想終止MPlayer進程時,我只是寫了“ q”以退出管道。

  player.stdin.write(“ q”) 

請參閱MPlayer文檔,以了解可以通過這種方式傳遞來控製播放的各種命令。

希望這會有所幫助!

實際上,這真的很整潔。 [此adafruit教程](http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi/overview)討論了播放聲音而不是停止聲音。
Brandorf
2013-04-18 20:06:11 UTC
view on stackexchange narkive permalink

另一種選擇是使用 mpg321 並從命令行調用它。

  apt-get install mpg321  

然後在Python中:

  import osos.system('mpg321 foo.mp3 &') 

Pygame幾乎肯定更健壯,但這取決於我假設您的需求是什麼。

我自己考慮了一下,但是我認為它不是很優雅,因為這會使暫停,音量控制等工作變得更加困難。
這太慢了。
Bex
2014-01-21 13:06:42 UTC
view on stackexchange narkive permalink

如果您不需要圖形,我建議使用 pyglet而不是 pygame。在我看來,它更簡單,更優雅並且維護得更好。再說一遍,我希望這可能是一個口味問題。

那麼您如何使用它呢?
pyglet僅在有顯示可用時才運行;僅出於播放聲音的目的而遠程運行或作為守護程序運行它不起作用。
mrpi64
2014-02-25 19:24:17 UTC
view on stackexchange narkive permalink

Pygame為您提供了一種在一系列頻道上輕鬆加載和播放聲音的好方法。

Dalen
2015-07-01 06:50:09 UTC
view on stackexchange narkive permalink

您可能會通過管道使用許多外部播放器。但是,您幾乎總是會遇到速度下降的問題。播放控制也存在問題。

我建議您使用pyaudio,它可以正常工作

如果您還想播放壓縮文件,請隨時將您指向我的模塊coder.py。您可以在PyPI上找到它。

它也使用子進程,但是調用解碼器而不是播放器。它們不佔用大量CPU,並且其中一些人知道如何使用硬件加速。然後,您可以使用pyaudio或其他東西來輸出原始音頻數據。如果需要,您甚至可以通過使用pygame.sndarray使用pygame。這樣,您可以播放比pygame支持更多的格式。

我在pyaudio的pyQT GUI環境中嘗試了coder.py,並同時使用pyaudio和aplay作為外部播放器。就是在Raspberry Pi B上。

在兩種情況下,結果都非常令人滿意。

簡單性值得質疑。

decoder.py本身非常簡單,但是您必須將其與其他庫結合使用,這會增加代碼行。

有一個示例說明如何播放decoder.py附帶的文件。

jjinking
2016-01-04 23:29:10 UTC
view on stackexchange narkive permalink

我正在運行OSMC(Debian),並且可以通過通過HDMI連接的電視揚聲器播放聲音。 https://youtu.be/p2ljmTE67gs

我的方法基於@xxmbabanexx和此處發布的上述解決方案。基本上,我有將 dtparam = audio = on 添加到 /boot/config.txt

我認為TS是指“標準音頻輸出”時的3.5毫米插孔。這對於3.5插孔也起作用嗎?
哦,我懂了。嗯,雖然我沒有嘗試過,但可能不會。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...