Beiträge von lesnoj

    Danke für Plugin Edgar
    Also irgendein Muster ist schon vorhanden.
    So viele Dateien mit krassen flattern habe ich auch nicht. Sieht man erst im fortgeschrittenen Stadium der Erkrankung und der meisten Patienten ging es zum Glück noch halbwegs gut.


    Hier sind ein Paar Beispiele:


    Beispiel_1


    [Blockierte Grafik: http://www.lesnoj.de/Bilder/Tonhaltedauer_Plugin/Bild_1.jpg]


    Beispiel_2


    [Blockierte Grafik: http://www.lesnoj.de/Bilder/Tonhaltedauer_Plugin/Bild_2.jpg]


    Beispiel_3


    [Blockierte Grafik: http://www.lesnoj.de/Bilder/Tonhaltedauer_Plugin/Bild_3.jpg]


    Beispiel_4


    [Blockierte Grafik: http://www.lesnoj.de/Bilder/Tonhaltedauer_Plugin/Bild_4.jpg]


    Beispiel_5


    [Blockierte Grafik: http://www.lesnoj.de/Bilder/Tonhaltedauer_Plugin/Bild_5.jpg]

    Zitat von edgar-rft

    Wenn ich das richtig verstanden habe ist das Problem, dass Lautstärke-Einbrüche z.B. in Beispiel_1 und in der in der zweiten Hälfte von Beispiel_3 als 'ein Ton' und nicht als 'mehrere Segmente' erkannt werden sollen.


    Lautstärke ist gut aber... Na ja, weiss nicht richtig, ich habe mir mehrere Beispiele angeschaut und da sieht man dass dieses "Zittern" der Stimme auf unterschiedliche Weise "konstruiert" wird. Sieht man in Praat sehr deutlich!
    Männer machen das tatsächlich mit Lautstärke (grüne dB-Linie springt hoch) während die Frauen sich meistens mit blauer Linie (Hz) "beschäftigen". Es wäre sehr interessant für mich das ganze in möglichst viele Parameter zu splitten weil der Patienten-Kollektiv wird nicht nur in männlich und weiblich aufgeteilt sondern auch nach Erkrankungsgrad (Stadium).


    Zitat von edgar-rft


    Frage: gibt es eine Möglichkeit, das eventuell mit der Tonhöhe in Zusammenhang zu bringen? (wahrscheinlich eher nicht und wenn ja, dann nicht bei *allen* Patienten)


    Genau das waren auch meine Überlegungen.
    Aber ganz gleich ob ich dB oder Hz messe, relative Anstieg und Abfall scheint mir wenig aussagekräftig zu sein weil diese Differenz wird es auch bei gesunden geben. Hier ist es interessant das grob motorisches "Zittern" irgendwie zu beschreiben (in manchen anderen Beispielen ist das ausgeprägter als hier). Sprich Anstieg/Abfall auf unterschiedlichen Zeitabschnitten. Mit Halbwertszeit-Prinzip kam ich auch nicht weiter.


    Aber wie gesagt, ich musste ursprünglich nur Zeit messen um glottale Effizienz und Effizienz der Atemmuskulatur zu prüfen. Aber dann ist mir dieses Muster aufgefallen. Das hatten meine Vorgänger nicht gehabt weil bei Parkinson Patienten wird man das höchstwahrscheinlich nicht sehen. Egal welche Muster sie haben (Parkinson Pat.), er wird wohl kontinuierlich sein müssen.

    Sorry, ich habe mich vertan!
    Ich wollte diesen Beitrag in der Thema "Sprechanalyse" erstellen (habe mich anscheinend vertippt).
    Eine Bitte an Admin:
    Diesen Beitrag bitte in "Sprechanalyse" verschieben oder wenn es nicht anders geht , löschen!


    Es tut mir leid für Umstände!

    Hallo nochmals!
    Hier ist eine Aufgabe zur Tonhaltedauer (Mass für glottale Effizienz):


    Der Patient wird aufgefordert, den Vokal „a“ möglichst lange zu halten, nach einem natürlichen, unforcierten Atemzug mit selbstgewählter Tonhöhe, ohne diesen zu Variieren.
    aaaaaaaaaaaaaaa.....


    Zunächst ging es wie gesagt nur um Haltedauer. Zeit habe ich gemessen aber das scheint mir zu wenig zu sein! Wenn man sich Spurmuster anschaut:


    Ataxie Patienten:


    Beispiel_1
    [Blockierte Grafik: http://lesnoj.de/Bilder/Bild_1.jpg]
    Beispiel_2
    [Blockierte Grafik: http://lesnoj.de/Bilder/Bild_2.jpg]
    Beispiel_3
    [Blockierte Grafik: http://lesnoj.de/Bilder/Bild_3.jpg]


    Gesund (bzw. ich hoffe, da Aufnahme von mir):


    [Blockierte Grafik: http://lesnoj.de/Bilder/Bild_4.jpg]


    Dann sieht man schon rein Optisch ein Unterschied!
    Doch wie kann ich diesen Unterschied mit Zahlen erfassen?!


    Meine Überlegungen waren Frequenzvariation bzw. pro Halbwertszeit o.ä. aber das scheint mir nicht besonders aussagekräftig zu sein!


    Hat jemand vielleicht eine gute Idee was ich hier Messen kann und vor allem wie?

    Sorry dass ich mich so lange nicht melde aber ich bin immer noch am auswerten. Wenn ich fertig bin dann sage ich dir Bescheid wie es aussah. Habe vorher diese "automatisierte " Auswertung mit Praat durchgeführt und mache jetzt dass gleiche mit Audacity. Möchte dann die beiden Ergebnisse vergleichen.
    Ich lasse dich auf jedem Fall wissen wie es ausgegangen ist.


    Bis bald!

    H-A-M-M-E-R!
    Ich weiß nicht wie du das rausgezaubert hast aber das Ding sieht super aus. Ausführlich habe ich noch nicht getestet aber erste Eindrück ist unglaublich. Ich bin ein paar Dateien durchgegangen und es ist fast immer so wie ich es manuell machen würde (Das ganze unter Standarteinstelungen von 5 ms und 45 dB).
    Ich werde das noch ausführlicher Testen und dann Berichten. Schade dass man die Ausgabe-Datei nicht nach der "rummanipulieren" ausgeben konnte. Wirklich Schade! Obwohl ich glaube in den meisten Fällen wird das auch nicht mehr nötig sein!


    Übrigens welche Trashold würdest du mir empfehlen? Bin in Sachen Akustik absolute Laie und habe immer noch nicht gerafft was (-dB) bedeuten! In Physiologie hatten wir nur "normale" (dB), also so etwas: http://upload.wikimedia.org/wi…/a/a2/Akustik_db2phon.jpg
    Habe im Net damals auch keine vernünftige Erklärung gefunden und habe Aufnahme bei Audacity bis (-1 oder -3 dB) eingestellt. Weiß aber bis heute nicht warum :huh: .

    Habe gerade mit Praat verglichen:
    Gleiche Einstellungen (unter Praat zusätzlich noch <75 Hz):
    Praat --> 32 Perioden erkannt (16 Sprechperioden)
    Audacity --> 45 Perioden (23 Sprechperioden)
    Manuell --> 26 Sprechperioden (Audacity hat 3 nicht erkannt)


    Mit Periodenerkennung bin ich zufrieden! Die Genauigkeit konnte allerdings noch besser sein.

    Zitat von edgar-rft

    Das war mir sowieso fast schon klar. Hier die Beschreibung der 'control' Parameter am Anfang der '.ny' Plugin Datei:


    Code
    ;control <VariableName> "Text_links" <VariableTyp> "Text_rechts" <AnfangsWert> <Minimum> <Maximum>


    AnfangsWert = Einstellung des Reglers beim ersten Start des Plugins
    Minimum = Linksanschlag des Reglers
    Maximum = Rechtsanschlag des Reglers


    Genau das habe ich vorher probiert.
    Beim Anklicken der "Speech Segment Analysis" wird nur "Treshold" Wert übernommen, Zeitangabe bleibt immer bei "10". Und das ganze gibt dann ein Fehler der ich beschrieben habe.

    Wow, danke für die Erklärung!
    Hier ist der Protokol:

    --- DETECTOR SETTINGS ---
    threshold speech : 0.316228 (-10 dB)
    threshold silence : 0.223924 (-12.998 dB)
    minimum speech/pause duration: 5 milliseconds
    error: bad argument type - NIL
    Function: #<Subr--: #2391e24>
    Arguments:
    3.32546
    NIL
    Function: #<FSubr-SETF: #23931c8>
    Arguments:
    LAST-LABEL
    (/ LEN *SOUND-SRATE*)
    SPEECH-TIME
    (+ (- LAST-LABEL START-LABEL) SPEECH-TIME)
    SPEECH-SEGMENTS
    (1+ SPEECH-SEGMENTS)
    Function: #<FSubr-COND: #23923dc>
    Arguments:
    ((NOT LAST-LABEL) (SETF LAST-LABEL (/ LEN *SOUND-SRATE*) SPEECH-TIME (+ (- LAST-LABEL START-LABEL) SPEECH-TIME) SPEECH-SEGMENTS (1+ SPEECH-SEGMENTS)) (ADD-LABEL LAST-LABEL "End"))
    Function: #<FSubr-LET: #239231c>
    Arguments:
    ((VOWEL-SOUND (MAKE-VOWEL-SOUND S)) (CONSONANT-SOUND (MAKE-CONSONANT-SOUND S)))
    (SETQ S NIL)
    (SETQ NEW-SOUND-LENGTH (DO ((N 1 (1+ N)) (CURRENT-SAMPLE (SND-FETCH VOWEL-SOUND) (SETQ VOWEL-SAMPLE (SND-FETCH VOWEL-SOUND))) (CONSONANT-SAMPLE (SND-FETCH CONSONANT-SOUND) (SETQ CONSONANT-SAMPLE (SND-FETCH CONSONANT-SOUND)))) ((OR (NOT CURRENT-SAMPLE) (NOT CONSONANT-SAMPLE)) N) (COND ((>= CURRENT-SAMPLE CONSONANT-SAMPLE) (SETF VOWEL-COUNTER (1+ VOWEL-COUNTER))) (T (SETF CURRENT-SAMPLE CONSONANT-SAMPLE) (SETF CONSONANT-COUNTER (1+ CONSONANT-COUNTER)))) (COND ((< CURRENT-SAMPLE THRESHOLD-SILENCE) (SETF SILENCE-COUNTER (1+ SILENCE-COUNTER)) (COND ((= 1 SILENCE-COUNTER) (SETF INDEX (/ (1- N) (FLOAT *NEW-SOUND-SRATE*)))) ((AND (= 1 *SPEECH-DETECTOR-STATE*) (> SILENCE-COUNTER MINIMUM-LENGTH)) (ADD-LABEL INDEX "End") (COND ((NOT LAST-LABEL) (SETF LAST-LABEL INDEX))) (SETF SPEECH-TIME (+ (- INDEX START-LABEL) SPEECH-TIME) SPEECH-SEGMENTS (1+ SPEECH-SEGMENTS) END-LABEL INDEX *SPEECH-DETECTOR-STATE* 0))) (SETF SPEECH-COUNTER 0)) ((> CURRENT-SAMPLE THRESHOLD-SPEECH) (SETF SPEECH-COUNTER (1+ SPEECH-COUNTER)) (COND ((= 1 SPEECH-COUNTER) (SETF INDEX (/ (1- N) (FLOAT *NEW-SOUND-SRATE*)))) ((AND (= 0 *SPEECH-DETECTOR-STATE*) (> SPEECH-COUNTER MINIMUM-LENGTH)) (ADD-LABEL INDEX "Start") (FORMAT T "first-label : ~A~%" FIRST-LABEL) (COND ((NOT FIRST-LABEL) (SETF FIRST-LABEL INDEX)) (T (SETF PAUSE-TIME (+ (- INDEX END-LABEL) PAUSE-TIME) PAUSE-SEGMENTS (1+ PAUSE-SEGMENTS)))) (SETF START-LABEL INDEX LAST-LABEL NIL *SPEECH-DETECTOR-STATE* 1))) (SETF SILENCE-COUNTER 0)))))
    (COND ((NOT LAST-LABEL) (SETF LAST-LABEL (/ LEN *SOUND-SRATE*) SPEECH-TIME (+ (- LAST-LABEL START-LABEL) SPEECH-TIME) SPEECH-SEGMENTS (1+ SPEECH-SEGMENTS)) (ADD-LABEL LAST-LABEL "End")))
    (FORMAT T "--- DETECTOR INTERNALS ---~%")
    (FORMAT T "number of audio blocks used : ~A~%" (1- NEW-SOUND-LENGTH))
    (FORMAT T "vowel blocks used : ~A~%" VOWEL-COUNTER)
    (FORMAT T "consonant blocks used : ~A~%" CONSONANT-COUNTER)
    (FORMAT T "--- VOICE SEGMENT ANALYSIS ---~%")
    (FORMAT T "Audacity selection : ~A seconds~%" (/ LEN *SOUND-SRATE*))
    (FORMAT T "time from first Start to last End : ~A seconds~%" (- LAST-LABEL FIRST-LABEL))
    (FORMAT T "speech segments found : ~A~%" SPEECH-SEGMENTS)
    (FORMAT T "sum of all speech times : ~A seconds~%" SPEECH-TIME)
    (FORMAT T "pause segments found : ~A~%" PAUSE-SEGMENTS)
    (FORMAT T "sum of all pause times : ~A seconds~%" PAUSE-TIME)
    1> "No Segments found."
    1>



    Das hört sich ja spannend an!
    ;)

    Zitat von edgar-rft


    Ich schlage der Einfachheit aber vor, dass ich Dir eine Anleitung schreibe, wie Du die Textausgaben des Plugins selbst anpassen kannst (das kann in 5 Minuten verstanden werden). Den Rest könntest Du dann mit Deinen PHP Skripten weiter verarbeiten. Nur für automatische Textspeicherung aus Audacity heraus habe ich leider noch keine Lösung auf Lager.


    Ich werde versuchen, dass das im Laufe dieses Tages noch fertig wird...


    Das wäre gute Idee!


    Zitat von edgar-rft


    Nur für automatische Textspeicherung aus Audacity heraus habe ich leider noch keine Lösung auf Lager.


    Ich werde versuchen, dass das im Laufe dieses Tages noch fertig wird...


    Mach dir nicht so viele Umstände! Es ist mir schon fast peinlich. Ich komme mit manuellen Auswertung auch ganz gut zu recht. Habe eh schon die Hälfte durch!

    Zitat von edgar-rft

    'Min. Duration = 0 msec' bedeutet, dass überhaupt keine Samples da sind, die analysiert werden könnten. Wenn es trotzdem funktioniert (und das tut es ja scheinbar) bedeutet das leider nichts weiter, als dass irgendwo ein Fehler im Plugin Code ist. Trotzdem natürlich danke für den Hinweis, weil ich weiss jetzt wo ich suchen muss.


    Sorry war mein Tipp-Fehler!
    Min Duration auf 0 hatte ich natürlich nicht gehabt. War 0.05 sec.

    Noch eine Überlegung!


    Ich schätzte dass "silence" wird man mit dB alleine nie richtig abfangen können. Sprich 10 sec lang und lass dir die Aufnahme in Praat anzeigen. Aktiviere dabei nur Pitch und Intensity Anzeige.
    Von der Kurven wird schnell klar dass die dB-Kurve (Intensity) schon fast auf Null ist aber Hz-Kurve (Pitch) noch Werte über 150 Hz aufweist. Dem entsprechend sieht man noch die Ausschläge in dem Oszilloskop (obwohl das ganze schon unter 26 dB liegt und als "silence" erkannt wird).


    Du muss in deinem Plugin ein zweites Parameter einbauen (Frequenz-Regler) dann wird man wahrscheinlich fast mit chirurgischer Präzision arbeiten können :) .
    Ich weiss natürlich nicht ob das technisch überhaupt machbar ist.


    Praat bietet zwar diese Einstellungen aber als ich am Ende die Sprech- und Pausenperioden von Praat und Audacity (deine Plugin) verglichen habe, musste ich fest stellen dass Audacity (auch mit diesen groben Einstellungen) mehr Perioden erkannt hat als Praat und sie waren bei Audacity so wie ich es manuell eingestellt hätte. Allerdings war wie ich schon geschrieben habe die Periodengenauigkeit etwas falsch. Bei Praat konnte ich die Periodengenauigkeit gar nicht prüfen.


    Also wenn es irgendwie möglich ist dann Frequenz-Regler einbauen und so machen dass sich das ganze noch verändern/einstellen lässt.

    Danke für deine Mühe Edgar!
    Also ich habe dein Plugin ausprobiert und mit der Funktionen in Praat verglichen:


    Meine Aufgabe:
    Patienten lesen vorgegebene Text ab. Augewertet wird jeweils der 1. Satzt (36 Silben) und der letzte (47 Silben). Gesucht wird nach der Pausen zwischen den Wörten und den Silben (msec-Bereich).
    Verglichen wird dann Unterschied zwischen dem ersten und dem letzten Satz.


    Audacity
    Standart Einstellung:
    Treshold 26 dB
    Hysteresis 3.0 dB
    Min. Duration 10


    Müsste in meinem Fall umgestellt werden. Min. Duration = 0 msec. Dann funktioniert das ganze schon mal nicht schlecht.


    Genauigkeit der START / END Punkte.

    Also in meinem Fall (1 Sprechsatz ca. 11 sec) war die Abweichung:
    - meist unter 0,05 sec -> (würde ich akzeptieren)
    - oft 1,5 / 1,6 msec (0,15 / 0,16 sec) -> es ist viel zu viel für einen Satz der nur 11 sec dauert. Meine Auswertung wird dadurch verfälscht.


    Diese Abweichung konnte man vielleicht verringern wenn man Treshold um einiges runter dreht. Doch wenn ich da kleinere Wert eingebe in Verbindung mit 5 msec. dann kommt der Meldung:
    "Nyqist gab keine Audiodateien zurück"


    Ich habe versucht die Werte in deinem Skript zu verändern:
    ;control silence-level "Treshold" real "dB" 10 0 40
    ;control hysteresis "Hysteresis" real "dB" 3 1 10
    ;control minimum-duration "Min. Duration" real "ms" 5 10 500


    Doch der Fehlermeldung blieb der gleiche.


    Ablauf
    Das ganze ließe sich ertragen wenn ich manuell die START / END Punkte genauer stellen konnte aber dann kann ich nicht mehr Protokol Datei anzeigen (mit geänderten manuellen Einstellungen der S/E Punkten). Also Protokol-Datei-Ausgabe wäre ganz am Schluss besser als vorher. Aber lässt sich wohl nicht mehr ändern.


    Und automatische Speicherung der Protokoll Datei wäre auch gut (oder zumindest ein SPEICHERN-Button ähnlich wie in Praat).


    Anzeige in der Protokolldatei (=Ausgabedatei):


    Du wolltest Vorschläge für die Ausgabe Datei? Hier sind Paar Sachen die ich z.B. brauchen würde:
    Anzahl der Sprechperioden --> XXX
    Anzahl der Pausenperioden --> XXX
    Brutto Sprechzeit = Gesamtlänge der Audiodatei wenn vor dem 1. Sprechen und nach dem letztem Sprechen keine Pause vorliegt. --> XXX
    Reine Sprechzeit (Netto Sprechzeit) --> XXX (Als Zeitangabe)
    Reine Sprechzeit (Netto Sprechzeit) --> XXX (Als Prozentangabe)
    Gesamtpausenlänge --> XXX (Als Zeitangabe)
    Gesamtpausenlänge --> XXX (als Prozentangabe) (ohne Pausen vor dem 1. und nach dem letzten Sprechen).


    So gibt z.B Praat seine Info aus:


    intervals: size = 2


    intervals [1]:
    xmin = 0
    xmax = 0.6107324263038549
    text = "sounding"
    intervals [2]:
    xmin = 0.6107324263038549
    xmax = 0.7387324263038548
    text = "silent"


    Solche Angaben können auch nicht stören!


    Cool wäre wenn du jede Zeile Nummerierst. Ich lege immer sehr viele von solchen Dateien an (von verschiedenen Patienten) und lasse dann einen PHP-Skript drüber laufen damit er mir die Werte abliest und in MySQL speichert.
    Wäre gut wenn man wusste dass z.B. Angaben über "Anzahl der Pausenperioden" unter der Zeile #12# sich verstecken.


    #11# Anzahl der Sprechperioden --> XXX
    #12# Anzahl der Pausenperioden --> XXX
    #13# Brutto Sprechzeit = Gesamtlänge der Audiodatei wenn vor dem 1. Sprechen und nach dem letztem Sprechen keine Pause vorliegt. --> XXX
    #14# Reine Sprechzeit (Netto Sprechzeit) --> XXX (Als Zeitangabe)
    #15# Reine Sprechzeit (Netto Sprechzeit) --> XXX (Als Prozentangabe)
    #16# Gesamtpausenlänge --> XXX (Als Zeitangabe)
    #17# Gesamtpausenlänge --> XXX (als Prozentangabe) (ohne Pausen vor dem 1. und nach dem letzten Sprechen).



    Praat
    In Praat "Praat objekts"-Fenster links auf "Anotate" gehen.
    "To TextGrid (silences)..." klicken
    Im nächsten Fenster Werte einstellen ind "OK" klicken
    In "Praat objekts"-Fenster erscheint jetzt ein neues objekt "TextGrid 1"
    Auf "Edit" klicken und es kommt ein Fenster mit Übersicht.


    Was mich bei der Sache stört, dass man hier die gefundene Segmente (Pausen- und Sprechperioden) weder hören noch sehen kann (keine oszilloskopische Darstellung). Da ist Audacity schon um einiges besser.
    Hier muss ich mich drauf verlassen dass das Programm alles richtig gemacht hat. Oder ich habe hier noch nicht alle Funktionen entdeckt.


    Deshalb würde ich schon lieber mit deinem Plugin arbeiten wenn man die Möglichkeit findet die Einstellungen zu ändern "Treshold" zu verringern.


    P.S.
    Habe versucht dein Script zu verstehen um automatische Speicherung einzubauen, aber.... trotz Referezen (http://www.cs.cmu.edu/~rbd/doc/nyquist/root.html)... die Sprache sieht für mich leider nach nichts aus :-/

    Zitat von edgar-rft

    Gesamtlänge einer Tonspur mit Audacity


    Ganz unten im Fenster, unter den Tonspuren gibt es einen Bereich mit der 'Projektrate' (Audacity Samplefrequenz), und mehreren Feldern mit Positions- und Längenangaben. Das mittlere Feld zeigt das Ende bzw. die Länge der aktuellen Auswahl in einstellbaren Einheiten an (z.B. auch Sekunden und Millisekunden). Wenn das mittlere Feld auf 'Länge' steht und Du die gesamte Spur markierst (Ctrl-A oder mit der Maus irgendwo in den Spurkopf klicken, wo keine Knöpfe und Regler sind) wird im mittleren Feld die Gesamtlänge der Spur angezeigt.


    Kann man die Angaben dann in einen z.B. .txt File o.ä exportieren?

    Hi Edgar,
    Wollte dich wieder was fragen :)


    Versuche jetzt ein weiterer Parameter der Prosodie auszuwerten: "Sprechtempo".
    Hier werden 3 Parameter von mir untersucht:


    --> TSR (Total Speech Rate) = Gesamt Silbenzahl pro Gesamtzeit
    --> NSR (Netto Speech Rate) = Gesamt Silbenzahl pro Netto Zeit (reine Sprechzeit ohne Pausen zwischen der Silben)
    --> Pausen (Anzahl)
    --------> Pausen am Ende eines Wortes (Anzahl)
    --------> Pausen innerhalb von mehrsilbigen Worten (Anzahl)
    --------> evtl. die Länge


    Silbenzahl ist bei der Aufgabe vorgegeben somit ist die Zahl schon mal bekannt.
    Gesamtlänge der Audiodatei gibt der Praat in "Voice Report" preis (In Audacity habe ich diese Funktion nicht gefunden).


    Jetzt brauche ich noch eine Funktion die mir Pausen anzeigt, so dass ich sie in einem klick alle ausschneiden kann. Dann konnte ich die verblibene Netto-Sprache messen und die Pausen in andere Spur einfügen und da die Länge messen.


    In Praat kann man "Show Pulses" anklicken und die Sprachabschnitte werden blau markiert. Ist aber viel zu ungenau wie ich sehe. Obwohl in "Voice Report"-Datei werden sogar ganze 4 Zeilen angezeigt. Muss noch rauskriegen was hier mit Pulses gemeint ist!


    In Audacity unter "Analyse" --> "Silence Finder" bin ich auch nicht weiter gekommen. Es werden komische Zeichen unter dem Spur angezeigt.


    Kannst du mir ein Paar Tipps geben wie ich hier technisch weiter vorgehen soll?