Monday, March 26, 2012

PyAudio with 24 bit under windows

Here are the results, proofing that with the WASAPI architecture I got true audio 24 bit samples under Windows 7:

Sunday, March 25, 2012

PyAudio: How to get 24 bit support under windows


PyAudio is a really useful and user-friendly python extension for accessing the soundcard from python.

Pyaudio uses the portaudio bindings between some windows sound architecture and python. Only the WASAPI and the ASIO APIs on windows 7 support real 24 bit resolution. The standard version that comes shipped with pyaudio is compiled for WMME which is old and emulates win xp sound. It converts the 24 bit data to 16 bit and calculates with this precission internally. It returns 24 bit numbers but this is zero-padded16 bit data (can be seen as there is no change in the quantizing noise floor)

So pyaudio and portaudio needs to be rebuilt from source to support WASAPI. (or ASIO but you have to register at steinberg as a developer to get the SDK from there)

This is how I managed to build it:

Wednesday, February 3, 2010

Monday, October 12, 2009

Das Ausmaß der Software nimmt langsam Katastrophale Zustände an.
Die Kommunikation über das Obd Protokoll wird komplett über Interrupts gehandhabt und läuft transparent im Hintergrund ab. Ein kleiner Scheduler sorgt dafür, dass Werte regelmäßig über Obd abgefragt werden. Er bestimmt welche PID an der Reihe ist und informiert das Hauptprogramm über neu empfangene Daten.
Das Hauptprogramm kümmert sich dann um die Darstellung der Werte auf dem Display. Im Moment geschieht dies noch als Text / Balkendiagramm. Der Strukturierte Aufbau ermöglicht es allerdings ohne viel Aufwand neue Zeichenfunktionen zu schreiben.
Um das alles zu realisieren waren einige Klimmzüge notwendig und in der Source sind jetzt ein paar dicke Dinger drin. Z.b. Eine Statemachine, die sich über 3 verschiedene Interrupt service routinen erstreckt oder eine 3 fach verschachtelte Switch Case Anweisung :p
Egal, das ding tut.
Aktuelle Bilder stell ich später noch rein.

Hiermit möchte ich nochmal bei allen bedanken, bei denen ich Code geklaut habe :p
das wären im einzelnen:

  • Hagen R. für die Grafikfunktionen fürs Display und das ausgefuchste eventbasierte Menüsystem
  • Christian K. für das reverse engineering des Siemens S65 Displays
  • Elm Chan für die SD Karten Ansteuerung und die Bibliotheken zum FAT32 Dateisystem (soon 2 come)
  • Objective Development für den Firmware only USB Treiber (wird im Bootloader verwendet)

Friday, September 25, 2009

Bilder

Die OBD Kommunikation läuft jetzt soweit. Es fehlt jetzt noch ein Menü und eine nebenläufige Kommunikation mit Interrupts und natürlich eine Tonne an Features :)

Wednesday, September 23, 2009

First light

Die Hardware funktioniert, mein Fiat Panda redet mit mir.

Für alle die es interessiert, die OBD Schnittstelle des Nuova Panda Baujahr 2008 arbeitet mit dem ISO 14230-2 Protokoll. Die Dokumentation zum Protokoll unter http://prj.perquin.com/obdii/ passt bitgenau!

Vielen Dank an den Autor, diese Doku hat mir echt viel weitergeholfen.

Monday, September 21, 2009

Das obdSucker Projekt

Zurzeit arbeite ich an einem Projekt, dass ich mit dem graziösen namen obdSucker getauft habe.

Es geht dabei um einen kleinen Boardcomputer für meinen Fiat Panda.
Das ganze entstand eigentlich mehr oder weniger aus Frust über den fehlenden Drehzahlmesser und die fehlende Verbrauchsanzeige.
Bedenkt man, dass die Daten alle in der Motorsteuerung verfügbar und die Mehrkosten für eine kleine Anzeige im Cockpit eigentlich nicht so groß sind, ist es schon ärgerlich das Fiat da alles eingespart hat.

Also habe ich selber Hand angelegt. Die Anforderungen sind dabei irgendwie jeden Tag höher geworden.

  • Anzeige von Drehzahl / Momentanverbrauch (pro 100km)
  • Durchschnittsverbrauch pro 100km bezogen auf die Tankfüllung / auf die aktuelle Fahrt
  • Realtimeclock: Anzeige von Datum / Uhrzeit (muss im Standby weiterlaufen)
  • SD Karten Slot zum speichern von Statistikdaten / zum ablegen von Bildern für eine Slideshow / zum ablegen von Zitaten für ein Begrüßungszitat
  • Standby Modus mit Stromverbrauch < 1 mA so dass das Gerät dauerhaft mit der Autobatterie verbunden bleiben kann
  • TFT Farbdisplay aus einem Siemens S65 Handy 16 bit Farben, 132 x 176 Pixel
  • Bedienung über Drehencoder
  • USB Bootloader zur Programmübertragung während der Entwicklung
  • ATMega 128 @ 16 MHz
  • Kommunikation mit der OBD Schnittstelle nach ISO14230 Standard