Suche Silent Trimmer

  • Hallo Jungs, ich suche DRINGENDs einen Commandline Silent Trimmer.

    der in WAVs die Stille vollständig am Anfang und Ende löscht.

    * GoldWave kann es, geht aber nicht per Commandline
    * Adobe Audition kann es fast, geht aber nicht per Commandline
    * WAVTrim meckert bei zu kleinen Dateien (<2-3sec)
    * SilenceTrim.exe kann es fast (unsauber) und geht aber nicht per Commandline
    * SOX mit silence und im 2pass (reverse) funktioniert höchst unsauber.

    habt Ihr noch ein paar Programme oder baut einer mal schnell eins?

    DANKE für die Aufmerksamkeit.

  • Zitat von LigH

    :motz:

    "S" liegt auf der Tastatur neben "D" - ich meinte ja "dein Projekt".

    Zitat von LigH

    ...ich's nut vorwärts ....


    und jetzt wissen wir auch, das "T" neben "R" auf der Tastatur liegt.....:ani_lol::ani_lol::ani_lol:

  • für meinen 99*99*99 Test, hab ich mir halt nen AutoIt Helper gebastelt. Leider dauert es schon lange, weil er jedesmal, Goldwave initalisieren muß :(

    Trotzdem brauche ich einen sauberen Trimmer, es kann doch nicht sein, das es so was nicht gibt. Sowas braucht doch jeder, der MusikCD/DVDs macht.

    Ach LigH, wenn Du gerade dabei bist, kannst Du auch nen WAV Joiner bauen, genauso wie der letzte FILE Joiner mit Liste und so?

    DAAAAANKE :kuss:

  • Hmmm .... also die Wavedata jeden Kanals ist bei 16bit signed word aligned.

    Code
    typedef struct WaveHdr {            int format;            int numOfChan;            int samplesPerSec;            int bytesPerSec;            int blockAlign;            int bitsPerSample;            int dataLen;            unsigned char *extra;            int extralen;        } WaveHdr;


    Imho fangen die Daten hinter der char. folge 'DATA' im WeaveHeader an.

    Somit einen Parser bauen der die 2*Words (stereo) von vorne in ihrem threshold ausliest. Diesen Threshold kann man via CLI bestimmen.

    Mal in Basic Annäherung ...


    Die Rangehensweise ist, dass du nich mehr als einen Word-Ram buffer brauchst um vorab die Datei in ihren Thresholds zu erkennen. Kannst natürlich auch vor buffern indem du größere Packete einliest und abarbeitest, müsste fixer gehen, denn word weises Dateien aus-peek'en kostet Zeit.

    Nachher einfach die ermittelten start und end -Werte in einer separaten File Kopierroutine verwenden.
    Kannst natürlich auch alles direkt in einem Pass nutzen ....

    Da oben kann zudem auch noch ein max gain detector eingebaut werden, der sodann im 2ten pass die Lautstärke anpasst.

  • Bittesehr ...

    gebe lediglich KillSilence.exe im CMD Fenster ein und es erscheint das HowTo.

    D:\KillSilence.exe -i D:\Full.wav -o D:\Trimmed.wav

    Der Threshold liegt bei 0 bis 32768 da 16bit PCM's 'signed word' aligned sind.
    Das Source Wav wird erst von vorne nach hinten und dann von hinten nach vorne in seinen Werten auf Schwellenwert geprüft. Danach werden nur die Daten innerhalb des Schwellenwerts in eine neue Wave Datei kopiert.
    Da via 1MB Puffer gespeichert wird muss das 'getrimmte' source Wave mindestens 1024 Bytes groß sein. Puffer kann ich auch auf 512, 256 oder 128 Bytes setzen, nur geht das auf kosten der Performance beim abspeichern.

    Habe es jetzt nur mit 48000hz und 16bit stereo ausprobiert. 44100hz müssten ebenso gehen, aber (noch) NICHT 8bit oder mono.
    Probiers erst mal wie es jetzt ist.


    EDIT:

    Zitat

    RAM im Moment schon sind halt nur 99*99*99 WAV Teile mit je 1-2sec.

    Bitte??? Ist dir deine HD in den Sand gefallen???
    Na wunderbar. Funktionieren wird das mit simplen Änderungen (würde einen 64kb Puffer benötigen). Aber wenn du größere Dateien darauf sodann loslässt, kannst du deiner HD Leuchte beim Flimmern zusehen. Demnach müsste da eine Abfrage bei der Buffererstellung eingebaut werden.

  • Lieber incredible
    :kuss: :kuss: :kuss:
    Du bist ein echter Schatz!

    erste schnelltests.....
    * große Dateien 16Bit44.1Khz funktioniert
    * große Dateien 16Bit48.Khz funktioniert
    * kleine 1-2sec. <800kbyte geht net, ist aber nicht sooo schlimm, weil das eigentlich keiner hat, ich brauchte es nur um Muxman einen Maximaltest zu unterziehen (9801 Kapitel pro VTS; 970299 Kapitel all VTS)

    Das mit dem Threshold ist echt klasse. Sehr gute Idee!
    Kannst Du auch die Verarbeitung von 20;24Bit waves einbaun?

    werde weiter testen...........

  • Doch, Audition kann (sofern es in der Hinsicht immer noch mit CoolEdit voll kompatibel ist).

    - 32-bit-Float-Projekt erzeugen
    - Speichern als: MS Wave; Format-Optionen...

    20-Bit-WAV ist normalerweise auf 3 Bytes ausgerichtet und hat nur 20 von 24 gültige Bits, die 4 niederwertigsten sind 0; auf DVD sieht das ganz anders aus (deshalb hab ich auch das Tool "Twen" programmieren müssen).

  • Somit müsste ich die Wave Daten als 4byte long auslesen, dann je 1 byte zurückgehen (bei 24bit) und den nächsten long wert auslesen. Den jeweiligen 4byte Long Wert sodann 8bits nach links shiften (<<) um den 24bit wert zu erhalten ?

    PS: Habe mal die Source vom letzten Stand angehangen.

  • Das ist mir schon klar, aber 24bit also 3 byte sind eben sozusagen 'odd' aligned. Demanch muss man diese über umwege parsen UND sodann einlesen und korrekt an die target-Wave zurückschreiben.

    Müsste also bei einem ReadLong() der Source-Wav die ersten 8bit rausmaskieren um den 24bit Wert zu erhalten, der mir sagt, ob da der Threshold erreicht ist oder nicht. Müste also einen Buffer erstellen, der sowohl durch 3 als auch dur 4 Teilbar wäre, z.B. 1200kb, damit via 32bit-Longs einlesen und via 24bit parsen kann.

    Code
    11111111   11111111   11111111   11111111  = 32bit 
    
     '& $00FFFFFF' anwenden ergäbe (Intel): 
     00000000   11111111   11111111   11111111  = 24bit wert in einem long 
    
     '& $000FFFFF' anwenden ergäbe (Intel): 
     00000000   00001111   11111111   11111111  = 20bit wert in einem long


    Sind 20/24 bit Wavs ebenso signed ?

  • 20 Bit wäre falsch: In Motorola-Order wäre es FF-FF-F0-00; in intel-Order also 00-F0-FF-FF, wenn du es auf 32-bit aufblasen willst.

    Es werden ja immer komplette Bytes gruppiert, nicht die Bits unabhängig.

    Musst du's eigentlich überhaupt so genau wissen? ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!