TextLevelMeter(): Amplitude in Textformat anzeigen...

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sicherlich etwas, was man ehr selten braucht... Es sei denn man versucht alte Daten-Kassetten zu digitalisieren und will das debuggen ;) (Siehe: http://www.python-forum.de/viewtopic.ph ... 00#p244600 )

Code: Alles auswählen

#!/usr/bin/env python
# coding: ISO-8859-1

import math


class TextLevelMeter(object):
    """
    >>> tl = TextLevelMeter(255, 9)
    >>> tl.feed(0)
    '|   *   |'
    >>> tl.feed(128)
    '|   | * |'
    >>> tl.feed(255)
    '|   |  *|'
    >>> tl.feed(-128)
    '| * |   |'
    >>> tl.feed(-255)
    '|*  |   |'

    >>> tl = TextLevelMeter(255, 74)
    >>> tl.feed(0)
    '|                                   *                                   |'
    >>> tl.feed(128)
    '|                                   |                 *                 |'
    >>> tl.feed(255)
    '|                                   |                                  *|'
    >>> tl.feed(-128)
    '|                 *                 |                                   |'
    >>> tl.feed(-255)
    '|*                                  |                                   |'
    """
    def __init__(self, max_value, width):
        self.max_value = max_value

        fill_len = int(round(((width - 3) / 2)))
        fill = " " * fill_len
        self.source_msg = "|" + fill + "|" + fill + "|"

        self.offset = fill_len + 1
        self.max_width = fill_len

    def feed(self, value):
        value = int(round(
            float(value) / self.max_value * self.max_width + self.offset
        ))
        return self.source_msg[:value] + "*" + self.source_msg[value + 1:]


if __name__ == "__main__":
    import doctest
    print doctest.testmod()

    count = 32
    max_value = 255
    width = 79

    tl = TextLevelMeter(max_value, width)
    for index in xrange(0, count + 1):
        angle = 360.0 / count * index
        y = math.sin(math.radians(angle)) * max_value
        y = round(y)
        print tl.feed(y)
        #~ print "%i - %.1f° %i" % (index, angle, y)
Ausgaben:

Code: Alles auswählen

TestResults(failed=0, attempted=12)
|                                      *                                      |
|                                      |      *                               |
|                                      |              *                       |
|                                      |                    *                 |
|                                      |                          *           |
|                                      |                               *      |
|                                      |                                  *   |
|                                      |                                    * |
|                                      |                                     *|
|                                      |                                    * |
|                                      |                                  *   |
|                                      |                               *      |
|                                      |                          *           |
|                                      |                    *                 |
|                                      |              *                       |
|                                      |      *                               |
|                                      *                                      |
|                               *      |                                      |
|                       *              |                                      |
|                 *                    |                                      |
|           *                          |                                      |
|      *                               |                                      |
|   *                                  |                                      |
| *                                    |                                      |
|*                                     |                                      |
| *                                    |                                      |
|   *                                  |                                      |
|      *                               |                                      |
|           *                          |                                      |
|                 *                    |                                      |
|                       *              |                                      |
|                               *      |                                      |
|                                      *                                      |




Verbesserungsvorschläge?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten