파이썬으로 오디오 파일 재생


38

표준 오디오 출력을 사용하여 Raspberry Pi에서 오디오 파일을 재생할 수있는 잘 관리 된 Python 라이브러리를 찾고 있습니다.

지금까지 나는 여러 가지를 시도했지만 그중 아무것도 작동하지 않는 것 같습니다. 피그 릿이 일반 컴퓨터에서도 제대로 작동하지만 Raspberry Pi에서 오류가 발생합니다. 사용하기 쉬운 것으로 입증 된 Python 라이브러리가 있습니까?


사용하기 쉬운 것으로 입증되었지만 상대적으로 파이 게임의 대안을 StackOverflow 대한 비슷한 질문에 게시했습니다 . 기본적으로 그 대안은 vlc.py (libVLC Python 모듈이며 매우 잘 유지됩니다)입니다.
Ben

아래 질문에 따르면 피그 릿은 RPi에서 작동합니다. 오류로 업데이트 할 수 있습니까?
Brian Bulkowski

답변:


31

널리 사용되는 파이 게임을 추천합니다 . 내가 틀렸을 수도 있지만 Pi에 사전 설치되어 있다고 생각합니다. Pygame Mixer Music Module 을 사용하여 오디오 파일을 재생할 수 있습니다. 아래에 예제 코드가 포함되어 있습니다.

오디오 파일이 있다고 가정합니다 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

참고 : 이 작업이 실패하면 터미널로 이동하여 시스템을 업데이트하십시오.

apt-get update
apt-get upgrade

다시 시도하십시오.


2
연주 할 사운드가 두 개 이상인 경우 (각각의 경우) pygame.mixer.Sound 객체를 만드는 것이 좋습니다. 사운드 파일 이름의 정의를 한 곳에 보관할 수 있습니다.
프랜시스

이것이 내가 원하는 것이지만 메인 보드 사운드에는 드라이버가 없으므로 USB 사운드 카드를 사용합니다. 그것은 espeak잘 작동하지만 이것은 아닙니다.
SDsolar

10

다른 사용자 입력에 응답하면서 백그라운드에서 30 초 동안 노래를 재생하는 스크립트가 필요했습니다. 그런 다음 일부 이벤트에서 노래를 끝내기를 원했습니다.

특히 우아하다고는 생각하지 않지만 배경 MPlayer 프로세스에 파이프를 열었습니다.

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

그런 다음 MPlayer 프로세스를 종료하고 싶을 때 단순히 파이프에 종료하기 위해 "q"를 썼습니다.

player.stdin.write("q")

재생을 제어하기 위해 이러한 방식으로 전달할 수있는 모든 종류의 명령은 MPlayer 설명서를 참조하십시오.

희망적으로 그것은 다소 도움이됩니다!


1
이것은 실제로 깔끔합니다. 이 adafruit 튜토리얼 은 소리 재생에 대해 이야기하지만 중지하지는 않습니다.
기드온

6

다른 옵션은 mpg321명령 행에서 사용 하고 호출하는 것입니다.

apt-get install mpg321

그런 다음 파이썬에서 :

import os

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

파이 게임은 거의 확실하지만, 당신의 요구가 무엇인지에 달려 있다고 생각합니다.


1
나는 이것에 대해 스스로 생각했지만 일시 정지, 볼륨 조절 등을 훨씬 어렵게하기 때문에 매우 우아하지 않다고 생각했습니다.
Stein

이것은 엄청 느립니다.
Alex

3

그래픽이 필요하지 않은 경우 파이 게임 보다는 피그렛 을 권장 합니다. 내 견해로는 더 단순하고 우아하며 유지 관리가 더 쉽다. 그런 다음 다시 맛의 문제가 될 것으로 기대합니다.


1
어떻게 사용합니까?
SDsolar

피그 릿은 디스플레이를 사용할 수있을 때만 실행되는 것 같습니다. 사운드를 재생할 목적으로 만 원격으로 또는 데몬으로 실행하면 작동하지 않습니다.
oh7lzb

0

파이 게임은 다양한 채널에서 사운드를로드하고 재생할 수있는 훌륭하고 쉬운 방법을 제공합니다.


0

파이프를 통해 여러 외부 플레이어를 사용할 수 있습니다. 그러나 거의 항상 속도 손실이 발생합니다. 재생 제어에 문제가 있습니다.

pyaudio를 추천합니다. 잘 작동합니다.

압축 파일도 재생하려면 자유롭게 내 모듈 decoder.py를 지정하십시오. PyPI에서 찾을 수 있습니다.

또한 하위 프로세스를 사용하지만 플레이어 대신 디코더를 호출합니다. 그들은 많은 CPU를 사용하지 않으며, 일부는 하드웨어 가속을 사용하는 방법을 알고 있습니다. 그런 다음 pyaudio 또는 무언가를 사용하여 원시 오디오 데이터를 출력 할 수 있습니다. 원하는 경우 pygame.sndarray를 사용하여 pygame을 사용할 수도 있습니다. 이런 식으로 파이 게임이 지원하는 것보다 더 많은 형식을 재생할 수 있습니다.

PyQT GUI 환경에서 pyaudio와 함께 aplay를 외부 플레이어로 사용하여 decoder.py를 시도했습니다. 그것은 Raspberry Pi B에있었습니다.

두 경우 모두 결과가 매우 만족 스러웠습니다.

단순성에 의문을 제기 할 수 있습니다.

decoder.py 자체는 매우 간단하지만 다른 라이브러리와 결합해야하므로 코드 줄이 증가합니다.

decoder.py에 포함 된 파일을 재생하는 방법에 대한 예가 있습니다.


0

OSMC (Debian)를 실행 중이고 HDMI로 연결된 TV 스피커를 통해 사운드를 재생할 수 있습니다. https://youtu.be/p2ljmTE67gs

내 방법은 여기 뿐만 아니라 @xxmbabanexx에 의해 게시 된 위의 솔루션을 기반으로했습니다 . 기본적으로 추가 dtparam=audio=on해야했습니다/boot/config.txt


"표준 오디오 출력"을 언급 할 때 TS가 3.5mm 잭을 의미했다고 생각합니다. 3.5 잭에서도 작동합니까?
Bex

아 알 겠어요 흠, 아마 시도하지는 않았지만 아마 그렇지 않을 것입니다.
jjinking
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.