Pythonスクリプトからオーディオ(1秒のサウンドのようなもの)を再生するにはどうすればよいですか?
プラットフォームに依存しないのが最適ですが、まずMacで動作する必要があります。
afplay file.mp3
Python内からコマンドを実行できることはわかっていますが、そのままのPythonで実行できますか?また、外部ライブラリに依存していなかった方がよいでしょう。
Pythonスクリプトからオーディオ(1秒のサウンドのようなもの)を再生するにはどうすればよいですか?
プラットフォームに依存しないのが最適ですが、まずMacで動作する必要があります。
afplay file.mp3
Python内からコマンドを実行できることはわかっていますが、そのままのPythonで実行できますか?また、外部ライブラリに依存していなかった方がよいでしょう。
回答:
ここでPythonオーディオに関する情報を見つけることができます:http : //wiki.python.org/moin/Audio/
外部ライブラリなしで.mp3ファイルを再生できるようには見えません。.mp3ファイルを.wavまたはその他の形式に変換するか、PyMediaなどのライブラリを使用できます。
.wav
ファイルを再生できますか?
あなたの最善の策は、おそらくpygame / SDLを使用することです。これは外部ライブラリですが、プラットフォーム間で優れたサポートがあります。
pygame.mixer.init()
pygame.mixer.music.load("file.mp3")
pygame.mixer.music.play()
オーディオミキサーのサポートに関するより具体的なドキュメントは、pygame.mixer.musicドキュメントにあります。
time.sleep(5)
は最後に追加し、それはうまくいきました。Windows 8.1上のPython 3.6
この目的のための比較的最近の軽量ライブラリである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ファイルを使用してください。
サウンドを再生するための依存関係のない、純粋なPython、クロスプラットフォーム、単一関数モジュールであるplaysoundを試してください。
ピップ経由でインストール:
$ pip install playsound
インストールしたら、次のように使用できます。
from playsound import playsound
playsound('/path/to/a/sound/file/you/want/to/play.mp3')
playsound
。ここでいくつかのソリューションをテストしましたが、これが最も簡単に機能しました。残念ながら、pygame
簡単なテストでは、このソリューションは機能しませんでした。
で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が 1つだけあります。残念ながら、これはLinuxとFreeBSDでのみ機能します。
更新:winsoundもありますが、これもプラットフォーム固有のものです。
プラットフォームに依存しないものについては、外部ライブラリを使用する必要があります。
私の推奨は、sounddeviceモジュールです(ただし、筆者は注意してください)。
このパッケージには、Mac OS XおよびWindows用のコンパイル済みPortAudioライブラリが含まれており、以下を使用して簡単にインストールできます。
pip install sounddevice --user
NumPy配列からサウンドを再生できますが、プレーンPythonバッファーを使用することもできます(NumPyが使用できない場合)。
NumPy配列を再生するには、これで十分です(オーディオデータのサンプリング周波数が44100 Hzであると想定)。
import sounddevice as sd
sd.play(myarray, 44100)
詳細については、ドキュメントをご覧ください。
サウンドファイルの読み書きはできません。そのためには別のライブラリが必要です。
あなたはこれを見ることができます:http : //www.speech.kth.se/snack/
s = Sound()
s.read('sound.wav')
s.play()
アーロンの答えは、必要以上に約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のバリアントと組み合わせました。その結果、playsoundと呼ばれる依存関係のない、純粋なPythonのクロスプラットフォームモジュールができます。pypiにアップロードしました。
pip install playsound
次に、次のように実行します。
from playsound import playsound
playsound('/path/to/file.wav', block = False)
MP3ファイルはOS Xでも動作します。WAVはすべてのプラットフォームで動作するはずです。他のプラットフォーム/ファイル形式の組み合わせで何が機能するのかわからない-まだ試していません。
playsound
私が書いたモジュールについて話していますか?私はそれをPython 2.7.11より新しいものでテストしていません...私は確かにこれを3.5で修正することを検討できます...
これは最も簡単で最高のiv'eです。Linux / pulseaudio、Mac / coreaudio、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)
その他の便利な機能については、https://github.com/bastibe/PySoundFileおよびhttps://github.com/bastibe/SoundCardをご覧ください。
次のコードの類似物を使用すると、サードパーティのライブラリなしでOS Xでオーディオを再生できます。rawオーディオデータは、wave_wave.writeframesで入力できます。このコードは、入力ファイルから4秒のオーディオを抽出します。
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()
多くのプラットフォームで利用可能な再生に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()
また、OSX- SOから、OSXのafplayコマンドを使用:
import subprocess
subprocess.call(["afplay", "path/to/audio/file"])
更新:これが行うことは、OPが最初に実行したくないことを実行する方法を指定することです。OPが避けたかったのは探していた情報だったので、ここに投稿したと思います。おっと。
Mac OSたくさんのコードを試しましたが、これでうまくいきます
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
Pythonを使用して通知音を再生するには、vlcなどの音楽プレーヤーを呼び出します。VLCから、代わりにコマンドラインバージョンのcvlcを使用するように求められました。
from subprocess import call
call(["cvlc", "--play-and-exit", "myNotificationTone.mp3"])
デバイスにvlcがプリインストールされている必要があります。Linux(Ubuntu 16.04 LTS)でテスト済み。Python 3.5を実行します。
サウンドデバイスを試す
モジュールがない場合pip install sounddevice
は、ターミナルに入力
してください。
次に、お好みのPythonスクリプトで(私はJuypterを使用)、次のように入力します。
import sounddevice as sd
sd.play(audio, sr)
Pythonを介して必要なものを再生します
必要なオーディオとサンプルレートを取得する最良の方法は、librosaモジュールを使用することです。librosaモジュールがない場合は、これをターミナルに入力します。
pip install librosa
audio, sr = librosa.load('wave_file.wav')
再生するwavファイルが何であれ、それがPythonスクリプトと同じディレクトリにあることを確認してください。これにより、Python経由で目的のwavファイルを再生できるようになります。
乾杯、チャーリー
PS
オーディオが「librosa」データオブジェクトになると、Pythonはそれをnumpy配列として認識します。実験として、ランダムなnumpy配列の長い(20,000データポイントを試す)ものを再生してみてください。Pythonはホワイトノイズとして再生する必要があります。sounddeviceモジュールは、数の多い配列とリストも再生します。
最近、ミュージックプレーヤーですべてのオーディオファイルをローカルでサポートするようにしました。これを行うには、vlc pythonモジュールとVLC dllファイルの使用方法を考え出しました。あなたはそれをチェックアウトすることができます:https: //github.com/elibroftw/music-caster/blob/master/audio_player.py
OSXを使用している場合は、「os」モジュールや「サブプロセス」などを使用して、OSXの「play」コマンドを呼び出すことができます。OSXシェルから、それは次のようになります
「bah.wav」を再生して
私のマシンでは約0.5秒で再生が始まります。