[python] Python으로 오디오 재생

Python 스크립트에서 오디오 (1 초 사운드)를 재생하려면 어떻게해야합니까?

플랫폼 독립적 인 것이 가장 좋지만 먼저 Mac에서 작동해야합니다.

afplay file.mp3Python 내 에서 명령을 실행할 수 있다는 것을 알고 있지만 원시 Python에서 수행 할 수 있습니까? 외부 라이브러리에 의존하지 않으면 더 좋을 것입니다.



답변

Python 오디오에 대한 정보는 http://wiki.python.org/moin/Audio/ 에서 찾을 수 있습니다 .

외부 라이브러리 없이는 .mp3 파일을 재생할 수없는 것 같습니다. .mp3 파일을 .wav 또는 다른 형식으로 변환하거나 PyMedia 와 같은 라이브러리를 사용할 수 있습니다 .


답변

가장 좋은 방법은 아마도 pygame / SDL 을 사용하는 것입니다 . 외부 라이브러리이지만 플랫폼 전반에 걸쳐 큰 지원을 제공합니다.

pygame.mixer.init()
pygame.mixer.music.load("file.mp3")
pygame.mixer.music.play()

pygame.mixer.music 문서 에서 오디오 믹서 지원에 대한보다 구체적인 문서를 찾을 수 있습니다.


답변

이를 위해 비교적 최근의 경량 라이브러리 인 Simpleaudio를 살펴보십시오 .

> pip install simpleaudio

그때:

import simpleaudio as sa

wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav")
play_obj = wave_obj.play()
play_obj.wait_done()

압축되지 않은 16 비트 PCM 파일을 사용해야합니다.


답변

Pure Python, 크로스 플랫폼, 사운드 재생에 대한 종속성이없는 단일 함수 모듈 인 playsound 를 사용해보십시오 .

pip를 통해 설치 :

$ pip install playsound

설치가 완료되면 다음과 같이 사용할 수 있습니다.

from playsound import playsound
playsound('/path/to/a/sound/file/you/want/to/play.mp3')


답변

에서 pydub 우리는 최근 한 (하위 프로세스를 통해) ffplay 사용하기로 선택 내부적으로 SDL을 사용하는 도구는 FFmpeg 스위트에서.

그것은 우리의 목적을 위해 작동합니다 – 주로 대화 형 모드에서 pydub 코드의 결과를 더 쉽게 테스트 할 수 있도록합니다 –하지만 새로운 프로그램이 Mac의 독에 나타나게하는 것과 같은 단점이 있습니다.

위의 구현을 연결했지만 단순화 된 버전은 다음과 같습니다.

import subprocess

def play(audio_file_path):
    subprocess.call(["ffplay", "-nodisp", "-autoexit", audio_file_path])

-nodisp플래그는 새로운 윈도우를 도시 ffplay에서 정지하고,-autoexit 플래그는 출구 ffplay의 원인 및 오디오 파일이 완료 재생이 때 상태 코드를 반환합니다.

편집 : pydub는 이제 설치 될 때 재생에 pyaudio를 사용하고 내가 언급 한 단점을 피하기 위해 ffplay로 돌아갑니다. 위의 링크는 해당 구현도 보여줍니다.


답변

늦게 답장을 드려 죄송 합니다만, 제 도서관을 광고하기에 좋은 곳이라고 생각합니다 …

표준 라이브러리 인 AFAIK에는 오디오 재생을위한 하나의 모듈 ( ossaudiodev) 만 있습니다. 슬프게도 이것은 Linux와 FreeBSD에서만 작동합니다.

업데이트 : winsound 도 있지만 분명히 이것은 플랫폼에 따라 다릅니다.

보다 플랫폼 독립적 인 경우 외부 라이브러리를 사용해야합니다.

내 추천은 sounddevice 모듈입니다 (하지만 제가 저자라는 점에 유의하세요).

이 패키지에는 Mac OS X 및 Windows 용으로 미리 컴파일 된 PortAudio 라이브러리가 포함 되어 있으며 다음을 사용하여 쉽게 설치할 수 있습니다.

pip install sounddevice --user

NumPy 배열에서 사운드를 재생할 수 있지만 일반 Python 버퍼를 사용할 수도 있습니다 (NumPy를 사용할 수없는 경우).

NumPy 배열을 재생하려면 그게 전부입니다 (오디오 데이터의 샘플링 주파수가 44100Hz라고 가정).

import sounddevice as sd
sd.play(myarray, 44100)

자세한 내용은 설명서 를 참조하십시오 .

사운드 파일을 읽거나 쓸 수 없으므로 별도의 라이브러리가 필요합니다.


답변

이것을 볼 수 있습니다 : http://www.speech.kth.se/snack/

s = Sound()
s.read('sound.wav')
s.play()