python-pcm音訊播放器
阿新 • • 發佈:2019-01-08
50行pcm音訊播放器
基於python、pysdl2的音訊播放器:
- 開發環境是ubuntu mate 16.04
- 程式碼相容python2、python3
- 請安裝pysdl2支援包
- sudo apt install python-sdl2
- 程式碼總共不到50行
- 為在最短的程式碼下播放音訊,目前僅支援pcm音訊
- 後續將支援更多格式
原始碼
import sys
import ctypes
from sdl2 import *
class audio_ctx: # Context
def __init__(self, fid, flag):
self.f = open(fid, 'rb' )
self.runflag = flag
def __del__(self):
self.f.close
def audio_cb(udata, stream, len):
c = ctypes.cast(udata, ctypes.py_object).value
buf = c.f.read(2048)
if not buf:
SDL_PauseAudio(1)
c.runflag = 0
return
SDL_memset(stream, 0, len)
SDL_MixAudio(
stream, ctypes.cast(
buf, POINTER(ctypes.c_ubyte)), len, SDL_MIX_MAXVOLUME)
def main():
print ("begin ...")
SDL_Init(0)
ctx = audio_ctx('piano.pcm', 1)
audiocallback = audio.SDL_AudioCallback(audio_cb)
reqspec = audio.SDL_AudioSpec(
44100, audio.AUDIO_U16SYS, 2, 1024, audiocallback, id(ctx))
spec = audio.SDL_AudioSpec(0, 0, 0, 0) # nonsence
audio.SDL_OpenAudio(reqspec, ctypes.byref(spec))
SDL_PauseAudio(0 )
while ctx.runflag:
SDL_Delay(1)
SDL_Quit()
print ("exit ...")
return 0
if __name__ == "__main__":
sys.exit(main())
簡介
- 網上有基於c語言版的pcm播放器,但是沒有基於python版本,因此有此念頭用python實現
- 程式碼力求python之美,優雅、簡潔、高效
- 原始碼和樣例音訊請於以下github地址下載測試,一首優美的鋼琴曲,正如python一樣