128

Python スクリプトからオーディオ (1 秒のサウンドのようなもの) を再生するにはどうすればよいですか?

プラットフォームに依存しないのが一番ですが、まずは Mac で動作する必要があります。

Python内からコマンドを実行できることは知ってafplay file.mp3いますが、生のPythonで実行することは可能ですか? また、外部ライブラリに依存しない方がよいでしょう。

4

25 に答える 25

48

あなたの最善の策は、おそらくpygame/SDLを使用することです。これは外部ライブラリですが、プラットフォーム間で優れたサポートを提供します。

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

pygame.mixer.music のドキュメントで、オーディオ ミキサーのサポートに関するより具体的なドキュメントを見つけることができます。

于 2008-11-04T04:40:50.157 に答える
21

この目的のための比較的最近の軽量ライブラリである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 ファイルを使用してください。

于 2016-03-29T12:17:17.980 に答える
18

Python オーディオに関する情報は、http ://wiki.python.org/moin/Audio/ にあります。

外部ライブラリなしで .mp3 ファイルを再生できるようには見えません。.mp3 ファイルを .wav または他の形式に変換するか、PyMediaなどのライブラリを使用できます。

于 2008-11-04T03:27:13.457 に答える
15

pydub では、最近、内部で SDL を使用する ffmpeg スイートのツールからffplay を (サブプロセス経由で) 使用することを選択しました。

これは私たちの目的のために機能します - 主に対話モードで pydub コードの結果をテストしやすくするだけです - しかし、新しいプログラムが Mac のドックに表示されるなどの欠点があります。

上記の実装をリンクしましたが、簡略化されたバージョンは次のとおりです。

import subprocess

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

この-nodispフラグは、ffplay が新しいウィンドウを表示するのを停止し、この-autoexitフラグは、オーディオ ファイルの再生が終了したときに ffplay を終了させ、ステータス コードを返します。

edit : pydub は、インストール時に再生に pyaudio を使用するようになり、ffplay にフォールバックして、前述の欠点を回避します。上記のリンクは、その実装も示しています。

于 2013-12-23T15:54:08.293 に答える
5

あなたはこれを見ることができます:http ://www.speech.kth.se/snack/

s = Sound() 
s.read('sound.wav') 
s.play()
于 2012-12-24T07:48:54.450 に答える
5

アーロンの答えは、必要以上に約 10 倍複雑なようです。OS X で動作する回答のみが必要な場合は、次のようにします。

from AppKit import NSSound

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

1 つ... これはすぐに返されます。したがって、サウンドの再生が終了するまで呼び出しをブロックする場合は、これも実行する必要があります。

from time import sleep

sleep(sound.duration())

編集:私はこの機能を採用し、Windows と Linux のバリアントと組み合わせました。その結果、依存関係のない純粋な Python のクロス プラットフォーム モジュール、Playsoundが作成されます。pypiにアップロードしました。

pip install playsound

次に、次のように実行します。

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

MP3 ファイルは OS X でも動作します。WAV はすべてのプラットフォームで動作するはずです。プラットフォーム/ファイル形式の他の組み合わせが機能するか機能しないかはわかりません。まだ試していません。

于 2016-01-25T02:24:09.093 に答える
3

OSXでも - SOから、OSXのafplayコマンドを使用して:

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

更新:これが行うことは、OPが最初にやりたくないことを行う方法を指定することだけです。OPが避けたかったのは私が探していた情報だったので、私はこれをここに投稿したと思います。おっと。

于 2015-01-31T05:45:03.183 に答える
2

多くのプラットフォームで利用可能な再生に PortAudio を使用するPySoundCardを試してください。さらに、多くのチャンネルを持つ「プロ向け」のサウンド デバイスを認識します。

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()
于 2016-05-28T17:30:18.083 に答える
1

このライブラリは、シンプルでクロスプラットフォームであり、多くの機能を備えていることを目指しています: https://github.com/libwinmedia/libwinmedia-py

[リリース] タブでダウンロードできるlibwinmedia共有ライブラリが必要です。

を使用してインストールできますpip install libwinmedia

例:

import libwinmedia

player = libwinmedia.Player(True)

player.set_position_callback(lambda position: print(f"{position} ms."))
media = libwinmedia.Media("test.mp3")

player.open(media)
于 2021-09-11T13:43:52.790 に答える
0

Linuxを使用していて、他のパッケージがMP3ファイルで機能していない人audioplayerにとっては、私にとってはうまくいきました:

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

from audioplayer import AudioPlayer
AudioPlayer("path/to/somemusic.mp3").play(block=True)
于 2020-12-26T23:34:36.157 に答える
0
これを、作成している python スクリプトの先頭に置きます。
import subprocess
wav ファイルが Python スクリプトのディレクトリにある場合:
f = './mySound.wav'
subprocess.Popen(['aplay','-q',f)
wav ファイルが Python スクリプトのディレクトリにない場合:
f = 'mySound.wav'
subprocess.Popen(['aplay','-q', 'wav/' + f)
aplay について詳しく知りたい場合:
man aplay
于 2016-11-11T22:16:02.483 に答える
-1

OSX を使用している場合は、「os」モジュールまたは「subprocess」などを使用して、OSX の「play」コマンドを呼び出すことができます。OSXシェルからは、次のようになります

「bah.wav」を再生

私のマシンでは約0.5秒で再生が始まります。

于 2014-03-27T13:33:35.500 に答える
-1

単に cvlc の助けを借りてそれを行うことができます-私はこの方法でそれを行いました:

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

/home/maulo/selfProject/task.mp3. これは私の mp3 ファイルの場所です。「--play-and-exit」を使用すると、vlc プロセスを終了せずにサウンドを再生できます。

于 2016-03-20T14:41:10.187 に答える