1. 程式人生 > >python-pcm音訊播放器

python-pcm音訊播放器

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())

簡介

  1. 網上有基於c語言版的pcm播放器,但是沒有基於python版本,因此有此念頭用python實現
  2. 程式碼力求python之美,優雅、簡潔、高效
  3. 原始碼和樣例音訊請於以下github地址下載測試,一首優美的鋼琴曲,正如python一樣