|
|
@@ -0,0 +1,36 @@ |
|
|
|
--- |
|
|
|
title: Python ctypes wrapper for FLAC |
|
|
|
description: > |
|
|
|
Python ctypes wrapper for FLAC |
|
|
|
created: !!timestamp '2014-03-15' |
|
|
|
tags: |
|
|
|
- Python |
|
|
|
- FLAC |
|
|
|
- audio |
|
|
|
--- |
|
|
|
|
|
|
|
As many people know, I've a fan of Python and I have been using it for |
|
|
|
over 15 years now. |
|
|
|
|
|
|
|
One of the recent improvements that Python has made is the inclusion of |
|
|
|
ctypes, which allows you to write a wrapper around shared libraries in |
|
|
|
Python making it much easier to integrate libraries. Previously you'd |
|
|
|
have to know the C Python API to get a module. There was SWIG, but if |
|
|
|
the library was complicated, it'd often not produce working code and even |
|
|
|
if it did, you'd have to hand tweak the output to get it to work the way |
|
|
|
you think it should. |
|
|
|
|
|
|
|
One of the projects I've worked on is a UPnP media server. One of the |
|
|
|
features it has is the ability to decode a flac file and support seeking |
|
|
|
with in the file. |
|
|
|
|
|
|
|
I have now released a package of the code: |
|
|
|
[ctflac-1.0.tar.gz](https://www.funkthat.com/~jmg/releases/ctflac-1.0.tar.gz). |
|
|
|
|
|
|
|
The one issue w/ ctypes is that some code can be very slow in Python. |
|
|
|
The FLAC library presents the sample data as arrays for each channel, |
|
|
|
though most libraries interleave the channel data. I have written a very |
|
|
|
small library (that is optional) interleave.c that does this interleaving |
|
|
|
in faster C code. In my tests, using the C code results in about a third of the CPU usage. |
|
|
|
|
|
|
|
Hope this is useful for others! |