ひこぽんのーと

覚書と雑記です。

pythonで音声を再生するのこと その4

おまけ。

pysdl2のsdl2.sdlmixer.Mix_LoadMUSを使った場合、
一度に鳴らせる音声はひとつだけ。

つまり、BGMを背景にセリフを再生する、といった事は、
この関数ではできない。

そんな場合は、チャネル再生を使う。
チャネル再生には、チャンクとチャネルを取得すればよく、
関数も用意されている。

パッケージ 関数 備考
sdl2.sdlmixer Mix_LoadWAV 音声を読み込み、チャンクを取得する。
WAVE, AIFF, RIFF, OGG, VOCが利用可能。
sdl2.sdlmixer Mix_PlayChannel チャネルを取得して再生を行う。
sdl2.sdlmixer Mix_Pause 再生の停止
sdl2.sdlmixer Mix_FreeChunk チャンクの開放

以下にソース。

# -*- coding: utf-8 -*-

from ctypes import *
from sdl2 import *
from sdl2.sdlmixer import *
from time import sleep


if __name__ == u"__main__":
	SDL_Init(SDL_INIT_AUDIO)
	Mix_Init(MIX_INIT_OGG)
	Mix_OpenAudio(22050, AUDIO_S16, 2, 4096)

	path = c_char_p(b"OGGファイルのパス")
	chunk = Mix_LoadWAV(path)
	Mix_VolumeMusic(64)
	channel = Mix_PlayChannel(-1, chunk, 1)
	sleep(100)
	Mix_Pause(channel)
	Mix_FreeChunk(chunk)
	SDL_Quit()

前回のソースと今回のソースを組み合わせれば、
複数の音声を同時に再生できるようになる。
チャネル再生にはMP3が使えないっと言うのが玉にキズだけど。。。