Python でサウンド ファイル (.wav) を再生する最も簡単な方法は何ですか? 最も簡単とは、ほとんどのプラットフォームに依存せず、必要な依存関係が最も少ないことの両方を意味します。pygame は確かにオプションですが、サウンドだけではやり過ぎのようです。
10 に答える
Windows の場合は、winsound を使用できます。内蔵されています
import winsound
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
Linux では ossaudiodev を使用できるはずです。
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
from sys import byteorder
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
(ossaudiodev のクレジット: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html )
Snack Sound Toolkitは、wav、au、およびmp3ファイルを再生できます。
s = Sound()
s.read('sound.wav')
s.play()
これはばかげているように思えますが、いつでも Windows (または好みの OS) を使用してサウンドを管理できます。
import os
os.system("start C:/thepathyouwant/file")
シンプルで拡張機能はなく、やや遅くてジャンキーですが、機能しています。
これには間違いなくPygletを使用してください。これは一種の大きなパッケージですが、拡張モジュールのない純粋な python です。これは間違いなく展開が最も簡単です。また、優れたフォーマットとコーデックのサポートも備えています。
import pyglet
music = pyglet.resource.media('music.mp3')
music.play()
pyglet.app.run()
play() コマンドが 10 秒程度の遅延を追加した後、動作します。
import pygame
import time
pygame.init()
pygame.mixer.music.load("test.wav")
pygame.mixer.music.play()
time.sleep(10)
これは .mp3 ファイルも再生します。
pyMedia の音の例はまさにそれを行います。必要なのはこれだけです。
import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )
私は pygame が好きで、以下のコマンドが動作するはずです:
pygame.init()
pygame.mixer.Sound('sound.wav').play()
しかし、それは私のコンピューターのどちらにもありません。また、この件に関するヘルプは限られています。編集: pygame サウンドが機能しない理由がわかりました。ほとんどのサウンドが正しくロードされていません。ロード時の「長さ」属性は ~0.0002 です。おそらく、mygame 以外のものを使用してそれらをロードすると、より一般的にモーキングされます。
上記の例を使用して、ファイルへの相対パスと完全パスの両方を使用します。
pyglet.media.load()
の代わりに使用pyglet.resource.media()
すると、ファイルをロードできます。
しかし、他のすべてをブロックするsound.play()
実行しない限り、ファイルの最初の数分の1しか再生しません...pyglet.app.run()
wxPython は、Windows と Unix での wav ファイルの再生をサポートしています。これに Mac が含まれているかどうかはわかりません。ただし、私が知る限り、wav ファイルのみをサポートしています。mp3 や ogg などの他の一般的な形式はサポートしていません。
Python でサウンドを再生する sox のシンプルな Python ラッパーをリリースしました。Python 2.6 以降、sox (ほとんどのアーキテクチャのバイナリを簡単に入手できます)、およびラッパー ( https://github.com/standarddeviant/sound4python )が必要なため、インストールは非常に簡単です。sox を持っていない場合は、ここにアクセスしてください: http://sourceforge.net/projects/sox/files/sox/
次の方法でオーディオを再生します。
from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
a.append(random.randint(-16384,16384))
sound(a)
オーディオの再生に実際に関係する部分は次のとおりです。
from sound4python import sound
...
sound(a)
Linux ユーザーの場合、低レベルの pcm データ操作が必要な場合は、alsaaudioモジュールを試してください。パッケージ内にも playwav.py の例があります。