Hướng dẫn thư viện playsound python

answer

17

Hướng dẫn thư viện playsound python

Bạn có thể tìm thông tin về âm thanh Python tại đây: http://wiki.python.org/moin/Audio/

Có vẻ như nó không thể phát tệp .mp3 mà không có thư viện bên ngoài. Bạn có thể chuyển đổi tệp .mp3 của mình sang định dạng .wav hoặc định dạng khác hoặc sử dụng thư viện như PyMedia .

17 hữu ích 3 bình luận chia sẻ

answer

45

Hướng dẫn thư viện playsound python

Đặt cược tốt nhất của bạn có lẽ là sử dụng pygame / SDL . Đó là một thư viện bên ngoài, nhưng nó có sự hỗ trợ tuyệt vời trên các nền tảng.

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

Bạn có thể tìm thêm tài liệu cụ thể về hỗ trợ bộ trộn âm thanh trong tài liệu pygame.mixer.music

45 hữu ích 5 bình luận chia sẻ

answer

27

Hướng dẫn thư viện playsound python

Hãy thử playound là một mô-đun thuần túy Python, nền tảng đa chức năng, không có phụ thuộc để phát âm thanh.

Cài đặt qua pip:

$ pip install playsound

Sau khi cài đặt xong, bạn có thể sử dụng nó như sau:

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

27 hữu ích 4 bình luận chia sẻ

answer

19

Hướng dẫn thư viện playsound python

Hãy xem Simpleaudio , đây là một thư viện tương đối gần đây và nhẹ cho mục đích này:

> pip install simpleaudio

Sau đó:

import simpleaudio as sa

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

Đảm bảo sử dụng tệp PCM 16 bit không nén.

19 hữu ích 1 bình luận chia sẻ

answer

14

Hướng dẫn thư viện playsound python

Trong pydub gần đây, chúng tôi đã chọn sử dụng ffplay (thông qua quy trình phụ) từ bộ công cụ ffmpeg, sử dụng nội bộ SDL.

Nó hoạt động cho các mục đích của chúng tôi - chủ yếu chỉ giúp kiểm tra kết quả của mã pydub ở chế độ tương tác dễ dàng hơn - nhưng nó có những mặt trái của nó, chẳng hạn như khiến một chương trình mới xuất hiện trong thanh dock trên mac.

Tôi đã liên kết việc triển khai ở trên, nhưng một phiên bản đơn giản sau:

import subprocess

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

Các -nodispcờ dừng ffplay hiển thị một cửa sổ mới, và các -autoexitlá cờ gây ffplay để thoát và trả về một mã trạng thái khi tập tin âm thanh được thực hiện chơi.

chỉnh sửa : pydub hiện sử dụng pyaudio để phát lại khi nó được cài đặt và quay trở lại ffplay để tránh những nhược điểm mà tôi đã đề cập. Liên kết ở trên cũng cho thấy việc triển khai đó.

14 hữu ích 2 bình luận chia sẻ

answer

14

Hướng dẫn thư viện playsound python

Xin lỗi vì đã trả lời muộn, nhưng tôi nghĩ đây là một nơi tốt để quảng cáo thư viện của tôi ...

AFAIK, thư viện tiêu chuẩn chỉ có một mô-đun để phát âm thanh: ossaudiodev . Đáng buồn thay, điều này chỉ hoạt động trên Linux và FreeBSD.

CẬP NHẬT: Cũng có lợi thế , nhưng rõ ràng đây cũng là nền tảng cụ thể.

Đối với một cái gì đó độc lập với nền tảng hơn, bạn sẽ cần sử dụng một thư viện bên ngoài.

Đề xuất của tôi là mô-đun sounddevice (nhưng hãy cẩn thận, tôi là tác giả).

Gói này bao gồm thư viện PortAudio được biên dịch trước cho Mac OS X và Windows, và có thể dễ dàng cài đặt với:

pip install sounddevice --user

Nó có thể phát lại âm thanh từ các mảng NumPy, nhưng nó cũng có thể sử dụng bộ đệm Python thuần túy (nếu NumPy không có sẵn).

Để phát lại mảng NumPy, đó là tất cả những gì bạn cần (giả sử rằng dữ liệu âm thanh có tần số lấy mẫu là 44100 Hz):

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

Để biết thêm chi tiết, hãy xem tài liệu .

Nó không thể đọc / ghi các tệp âm thanh, bạn sẽ cần một thư viện riêng cho việc đó.

14 hữu ích 1 bình luận chia sẻ

answer

5

Hướng dẫn thư viện playsound python

Bạn có thể xem điều này: http://www.speech.kth.se/snack/

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

5 hữu ích 1 bình luận chia sẻ

answer

4

Hướng dẫn thư viện playsound python

Câu trả lời của Aaron dường như phức tạp hơn khoảng 10 lần so với mức cần thiết. Chỉ cần làm điều này nếu bạn chỉ cần câu trả lời hoạt động trên OS X:

from AppKit import NSSound

sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_('/path/to/file.wav', True)
sound.play()

Một điều ... điều này trở lại ngay lập tức. Vì vậy, bạn cũng có thể muốn làm điều này, nếu bạn muốn cuộc gọi bị chặn cho đến khi âm thanh phát xong.

from time import sleep

sleep(sound.duration())

Chỉnh sửa: Tôi đã lấy chức năng này và kết hợp nó với các biến thể dành cho Windows và Linux. Kết quả là một mô-đun nền tảng chéo, python thuần túy không có phụ thuộc nào được gọi là Playingound . Tôi đã tải nó lên pypi.

pip install playsound

Sau đó chạy nó như thế này:

from playsound import playsound
playsound('/path/to/file.wav', block = False)

Các tệp MP3 cũng hoạt động trên OS X. WAV sẽ hoạt động trên tất cả các nền tảng. Tôi không biết các kết hợp nền tảng / định dạng tệp khác hoạt động hoặc không hoạt động - tôi chưa thử chúng.

4 hữu ích 5 bình luận chia sẻ

answer

4

Hướng dẫn thư viện playsound python

Đây là cách dễ nhất và tốt nhất mà chúng tôi tìm thấy. Nó hỗ trợ Linux / pulseaudio, Mac / coreaudio và Windows / WASAPI.

import soundfile as sf
import soundcard as sc

default_speaker = sc.default_speaker()
samples, samplerate = sf.read('bell.wav')

default_speaker.play(samples, samplerate=samplerate)

Xem https://github.com/bastibe/PySoundFile và https://github.com/bastibe/SoundCard để biết rất nhiều tính năng siêu hữu ích khác.

4 hữu ích 5 bình luận chia sẻ

answer

3

Hướng dẫn thư viện playsound python

Có thể phát âm thanh trong OS X mà không cần bất kỳ thư viện bên thứ 3 nào bằng cách sử dụng một mã tương tự của mã sau. Dữ liệu âm thanh thô có thể được nhập bằng wave_wave.writeframes. Mã này trích xuất 4 giây âm thanh từ tệp đầu vào.

import wave
import io
from AppKit import NSSound


wave_output = io.BytesIO()
wave_shell = wave.open(wave_output, mode="wb")
file_path = 'SINE.WAV'
input_audio = wave.open(file_path)
input_audio_frames = input_audio.readframes(input_audio.getnframes())

wave_shell.setnchannels(input_audio.getnchannels())
wave_shell.setsampwidth(input_audio.getsampwidth())
wave_shell.setframerate(input_audio.getframerate())

seconds_multiplier = input_audio.getnchannels() * input_audio.getsampwidth() * input_audio.getframerate()

wave_shell.writeframes(input_audio_frames[second_multiplier:second_multiplier*5])

wave_shell.close()

wave_output.seek(0)
wave_data = wave_output.read()
audio_stream = NSSound.alloc()
audio_stream.initWithData_(wave_data)
audio_stream.play()

3 hữu ích 1 bình luận chia sẻ

answer

2

Hướng dẫn thư viện playsound python

Hãy thử PySoundCard sử dụng PortAudio để phát lại có sẵn trên nhiều nền tảng. Ngoài ra, nó còn nhận diện các thiết bị âm thanh "chuyên nghiệp" với rất nhiều kênh.

Dưới đây là một ví dụ nhỏ từ Readme:

from pysoundcard import Stream

"""Loop back five seconds of audio data."""

fs = 44100
blocksize = 16
s = Stream(samplerate=fs, blocksize=blocksize)
s.start()
for n in range(int(fs*5/blocksize)):
    s.write(s.read(blocksize))
s.stop()

2 hữu ích 1 bình luận chia sẻ

answer

2

Hướng dẫn thư viện playsound python

Cũng trên OSX - từ SO , sử dụng lệnh afplay của OSX :

import subprocess
subprocess.call(["afplay", "path/to/audio/file"])

CẬP NHẬT: Tất cả điều này là chỉ định cách thực hiện những gì OP muốn tránh làm ngay từ đầu. Tôi đoán tôi đã đăng điều này ở đây vì những gì OP muốn tránh là thông tin tôi đang tìm kiếm. Rất tiếc.

2 hữu ích 5 bình luận chia sẻ

answer

2

Hướng dẫn thư viện playsound python

Mac OS Tôi đã thử rất nhiều mã nhưng chỉ mã này hoạt động với tôi

import pygame
import time
pygame.mixer.init()
pygame.init()
pygame.mixer.music.load('fire alarm sound.mp3') *On my project folder*
i = 0
while i<10:
    pygame.mixer.music.play(loops=10, start=0.0)
    time.sleep(10)*to protect from closing*
    pygame.mixer.music.set_volume(10)
    i = i + 1

2 hữu ích 0 bình luận chia sẻ

answer

2

Hướng dẫn thư viện playsound python

Cài đặt playsoundgói bằng cách sử dụng:

pip install playsound

Sử dụng:

from playsound import playsound
playsound("file location\audio.p3")

2 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn thư viện playsound python

Pypi có một danh sách các mô-đun cho python trong âm nhạc. Tôi thích nhất là jython vì nó có nhiều tài nguyên và thư viện hơn cho âm nhạc. Ví dụ về mã để chơi một nốt nhạc trong sách giáo khoa :

# playNote.py 
# Demonstrates how to play a single note.

from music import *   # import music library
note = Note(C4, HN)   # create a middle C half note 
Play.midi(note)       # and play it!

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Đặt cái này ở đầu tập lệnh python mà bạn đang viết:

import subprocess

Nếu tệp wav nằm trong thư mục của tập lệnh python:

f = './mySound.wav'
subprocess.Popen(['aplay','-q',f)

Nếu tệp wav KHÔNG có trong thư mục của tập lệnh python:

f = 'mySound.wav'
subprocess.Popen(['aplay','-q', 'wav/' + f)

Nếu bạn muốn tìm hiểu thêm về aplay:

man aplay

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Để phát âm thanh thông báo bằng python, hãy gọi một trình phát nhạc, chẳng hạn như vlc. VLC đã nhắc tôi sử dụng phiên bản dòng lệnh của nó, cvlc, thay thế.

from subprocess import call
call(["cvlc", "--play-and-exit", "myNotificationTone.mp3"])

Nó yêu cầu vlc được cài đặt sẵn trên thiết bị. Đã thử nghiệm trên Linux (Ubuntu 16.04 LTS); Chạy Python 3.5.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Thử thiết bị âm thanh

Nếu bạn không có mô-đun nhập pip install sounddevicetrong thiết bị đầu cuối của bạn.

Sau đó, trong tập lệnh Python ưa thích của bạn (tôi sử dụng Juypter), hãy nhập

import sounddevice as sd

sd.play(audio, sr) sẽ chơi những gì bạn muốn thông qua Python

Cách tốt nhất để có được âm thanh và tốc độ lấy mẫu bạn muốn là sử dụng mô-đun librosa. Nhập mã này vào terminal nếu bạn không có mô-đun librosa.

pip install librosa

audio, sr = librosa.load('wave_file.wav')

Bất kỳ tệp wav nào bạn muốn phát, chỉ cần đảm bảo rằng tệp đó nằm trong cùng thư mục với tập lệnh Python của bạn. Điều này sẽ cho phép bạn phát tệp wav mong muốn của mình thông qua Python

Chúc mừng, Charlie

PS

Khi âm thanh là một đối tượng dữ liệu "librosa", Python sẽ coi nó như một mảng không rõ ràng. Như một thử nghiệm, hãy thử chơi một thứ dài (thử 20.000 điểm dữ liệu) của một mảng ngẫu nhiên. Python nên chơi nó dưới dạng tiếng ồn trắng. Mô-đun sounddevice cũng đóng các mảng và danh sách phức tạp.

0 hữu ích 1 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Trong sổ ghi chép Colab, bạn có thể làm:

from IPython.display import Audio
Audio(waveform, Rate=16000)

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Gần đây, tôi đã làm cho Trình phát nhạc của mình hỗ trợ cục bộ tất cả các tệp âm thanh. Tôi đã làm điều này bằng cách tìm ra cách sử dụng mô-đun python vlc và cả các tệp dll VLC. Bạn có thể kiểm tra: https://github.com/elibroftw/music-caster/blob/master/audio_player.py

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Nó đơn giản. Tôi đã làm theo cách này.

Đối với tệp wav

from IPython.display import Audio
from scipy.io.wavfile import read

fs, data = read('StarWars60.wav', mmap=True)  # fs - sampling frequency
data = data.reshape(-1, 1)
Audio(data = data[:, 0], rate = fs)

Đối với tệp mp3

import IPython.display import Audio

Audio('audio_file_name.mp3')

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn thư viện playsound python

Đối với những người sử dụng Linux và các gói khác không hoạt động trên các tệp MP3, audioplayerhoạt động tốt đối với tôi:

https://pypi.org/project/audioplayer/

from audioplayer import AudioPlayer
AudioPlayer("path/to/somemusic.mp3").play(block=True)

0 hữu ích 0 bình luận chia sẻ

answer

-1

Hướng dẫn thư viện playsound python

Nếu bạn đang sử dụng OSX, bạn có thể sử dụng mô-đun "os" hoặc "quy trình con", v.v. để gọi lệnh "play" OSX. Từ giao diện OSX, có vẻ như

chơi "bah.wav"

Nó bắt đầu phát sau khoảng nửa giây trên máy của tôi.

-1 hữu ích 1 bình luận chia sẻ

answer

-1

Hướng dẫn thư viện playsound python

Đơn giản là bạn có thể làm điều đó với sự trợ giúp của cvlc- Tôi đã làm theo cách này:

import os
os.popen2("cvlc /home/maulo/selfProject/task.mp3 --play-and-exit")

/home/maulo/selfProject/task.mp3. Đây là vị trí của tệp mp3 của tôi. với sự trợ giúp của "--play-and-exit", bạn sẽ có thể phát lại âm thanh mà không cần kết thúc quá trình vlc.

-1 hữu ích 0 bình luận chia sẻ