Skip to main content

Python Multi-Media API (PMMA) is a multi-purpose API designed to make working on multi-media projects easier and faster!

Project description

PMMA logo

PMMA (Python Multi-Media API)

PMMA is a Python library aimed at improving application development in Python. Typically, developing applications in Python necessitates familiarity with a variety of different libraries such as Pygame, ModernGL, PIL and Numpy. PMMA aims to simplify the application development process by creating a single interface that provides easy access to simple and advanced pre-written and highly optimised application development utilities, whilst still also allowing these utilities to be expanded upon by exposing their underlying APIs.

Contents

History

I, (PycraftDev), joined GitHub to make the video game Pycraft in public using the programming language Python. Initially, my progress wasn't very methodical. I started with the basic game loop and worked out how different Python libraries interacted with each other. When I found that my design was slow, I went back and optimized it.

After many years of development and optimization, I gained extensive knowledge of making certain aspects of application development in Python really fast and performant. With that in mind, I started writing utility programs for Pycraft, which handled all of this behind the scenes, leaving the main programs much cleaner for their aggregation into my project - a video game.

As I worked on other projects, I found myself copying over these utility programs, revising them and gradually evolving my implementation of specific functions or classes. Eventually, this set of utility programs grew to be longer typically than the applications using them, and I decided it was time to separate my applications into two: the application itself, and PMMA.

Features

  • Object-Oriented Programming—Most of PMMA exists as specific objects, making it super easy to customize what you want.
  • Cython acceleration - Where native Python is "too slow" we switch it out for this alternative whenever possible.
  • GPU accelerated - PMMA can use GPU acceleration for 2D and 3D rendering.
  • Advanced mathematics - PMMA includes highly optimised commonly used mathematical functions.
  • Advanced threading - PMMA includes an advanced form of the Threading library, which extends its existing functionality to include the ability to kill threads on the fly.
  • Advanced Tkinter - PMMA includes some advanced Tkinter functions, like getting window size and default operating system fonts.
  • Simple shared memory - PMMA allows you to have a shared memory space for variables as a replacement for global variables, which can be accessed easily through threads.
  • Dynamic colour, coordinate, time, angle, and scalars—PMMA easily converts between different formats, so you can work with whatever is easiest for you!
  • Easy display management - PMMA allows you to easily manage your application window, including size, captions, display modes and v-sync.
  • Efficient shape rendering—PMMA supports a wide range of shapes and can render them using GPU acceleration.
  • Advanced memory management - PMMA will automatically manage large objects stored in memory.
  • Fast noise generation - PMMA can very efficiently create noise patterns in 1D, 2D or 3D.
  • Application customization—PMMA can be told details about your application and dynamically change its behaviour or how it appears to the operating system!
  • Video playback - PMMA can play back videos from a file, in your application. This is done by streaming the data from the disk, so wave goodbye to long video loading times and high memory usage.
  • Simplified Audio playback - PMMA includes support for very efficient audio playback, including steaming music directly from a file instead of reading the whole file at once. This is additionally supplemented with a range of additional controls like the ability to loop or pan audio and change its volume back.
  • Realtime Effects - PMMA can be used to apply effects to audio in real-time.
  • Transitions—PMMA can automatically manage the animation of values and coordinates for you in a variety of different styles. This is useful for moving objects about onscreen.
  • Advanced GPU information collection - PMMA can gather extremely detailed information about all installed GPUs.
  • Easy multi-device input—PMMA will automatically handle any additional controllers connected to your system, allowing you to interface easily with these devices. It even includes support for effects like Rumble!
  • Event management—PMMA will automatically update event objects in the background, allowing you to easily choose which events you need in your application. This idea has also been extended to detect when some events have been triggered in quick succession, like a double-tapped key (with per-key timings if needed).
  • Simple file systems – PMMA will automatically resolve file paths for you and can even scan project directories and produce unique user-friendly names for your files, which you can use instead!
  • Advanced data structures – PMMA includes access to fast implementations for advanced data structures like stacks, queues, circular queues, priority queues, priority stacks, inverted priority queues, inverted priority stacks, priority lists and inverted priority lists.
  • Command Execution—PMMA includes a super simple way for you to run command-line-level commands for your application, including the ability to get the result from the command in real time!
  • Projections—PMMA can automatically create and easily create projections that match your PMMA display for use in your 3D scenes.
  • OpenGL objects—PMMA includes its own wrapper for OpenGL through ModernGL, with a much simpler interface and the usual performance improvements thrown in.
  • Dynamic GPU allocation - PMMA can automatically try to distribute some graphics tasks to multiple installed GPUs to spread the load across all the available hardware.
  • Pipelines—PMMA combines complex 2D and 3D objects and renders them simultaneously, significantly improving performance.

Note: PMMA is still undergoing active development, and some features will be changed, added or extended in the near future - we will attempt to include backwards compatibility where possible.

Optional Dependencies

Cython

PMMA can take advantage of Cython compilation. This converts PYX files into C or C++. To do this, we would recommend GCC or MSVC, as they have written support in PMMA - you can use another compiler, or potentially even use pre-compiled binaries, but note you might get very slightly reduced performance in some applications.

To install GCC:

To install MSVC:

Note: I am working on supporting additional compilers directly, however they should already work - they just haven't been tested yet

Final Notes

PMMA is still in active development. PLease bear with us as we continue to make changes, and consult the documentation for advise on what features are 'safe to use'!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pmma-4.2.2.tar.gz (164.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pmma-4.2.2-py3-none-any.whl (191.3 kB view details)

Uploaded Python 3

File details

Details for the file pmma-4.2.2.tar.gz.

File metadata

  • Download URL: pmma-4.2.2.tar.gz
  • Upload date:
  • Size: 164.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pmma-4.2.2.tar.gz
Algorithm Hash digest
SHA256 93a1443c358c932456fca588a4c9a72bb45af7c5b50625fa6500843c3cb9ecc8
MD5 df5647f90d6dc3a6d259f2cb4d7fca55
BLAKE2b-256 0e1323dee5d8b72aca2b73208aab18c60593b70721c3d1734c99f0d7329f81d2

See more details on using hashes here.

File details

Details for the file pmma-4.2.2-py3-none-any.whl.

File metadata

  • Download URL: pmma-4.2.2-py3-none-any.whl
  • Upload date:
  • Size: 191.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pmma-4.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3ee1136b779d646f31013ef9178ff6ca5398576be9cdae8ae4c5843e38bc94c4
MD5 1ed162802f8d49f49b28a5bb4c455d4a
BLAKE2b-256 37e4ea733334cf3adf0ff8b39b5ee8d82f0edba5bb2d30589cb2d4804ebfc3c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page