psychopy.sound

(訳注:原文のsoundの解説は「心理学実験プログラミング:Python/PsychoPyによる実験作成・データ処理」で述べた内容以上のことはほとんど書かれていないので、ここでは1.85.0のpsychopy/sound/__init__.pyの冒頭に書かれているコメントの抄訳を掲載する)

音楽データを読み込み演奏するモジュールである。

デフォルトではPsychoPyはsounddevice, pygame, pyoの順にライブラリを読み込もうとする。この順序は「設定」の「一般」の「オーディオライブラリ」で変更できる。

portaudioベースのバックエンド(すなわちpygame以外)ではサウンドドライバの選択(ASIO, CoreAudioなど)も可能である。

soundモジュールをimportした後、サウンドライブラリとサウンドドライバは以下の変数に保持される。

  • psychopy.sound.audioLib
  • psychopy.sound.audioDriver

ビットレートやバッファサイズを制御するには最初にSoundオブジェクトを作成する前にpsychopy.sound.initを呼び出す。

from psychopy import sound
sound.init(rate=44100, stereo=True, buffer=128)
s1 = sound.Sound('ding.wav')

PsychoPyのサウンドライブラリは最初、pygameが選ばれたがレイテンシが常に大きかった。 そこでレイテンシがより短いpyoへ切り替えたが、pyoは非常にシステム依存であった。 pyoの問題はインストール時にコンパイルする必要があることで、コンパイルはいつも大変苦痛で修正が大変であった。 また、2016年の時点でpyoはpython3をサポートしておらず、pipによるインストールもサポートしていなかった。

pysoundcardとsounddeviceは新しいpure pythonなportaudioライブラリで、いずれもpipによるインストールとpython3をサポートしていた。また、オリジナルのpysoundcardのコードと共通部分が多かった。これのライブラリをテストした結果、レイテンシが非常に短いことがわかった。

PsychoPy 1.85の時点では、 sounddeviceが最もよい選択であるように思われる。 しかし、新たな問題が生じているかも知れない。私たちはsounddeviceのコードを記述する際に音楽の再生開始方法を変更した。pyoもこの新しい方法をサポートしている。なので、公平を期せば、pyoもまたsounddeviceと同様の短いレイテンシを達成できる可能性があると言える。しかし、レイテンシ以外のアドバンテージを考慮するとpyoよりもsounddeviceの方がより優れている。