Hallo an Programmierer,
ich nutze Audacity 1.3.4 unter Windows XP SP 2.
Ich hätte gerne einen Effekt "Locate Peak Value" / "Finde Spitzenpegel", z.B. als VST-Plugin-dll oder so.
Ich habe mir selbst eine Utility geschrieben (in einer Programmiersprache, die ich lieber nicht nenne, um Hohn und Spott zu vermeiden), die nach Wahl einer WAV-Datei ermittelt, wo der Spitzenpegel liegt.
Es ist ein Stand-Alone-Utility, arbeitet nur mit 16-Bit Stereo-WAV-Dateien mit einer Samplefrequenz von 44 100 Hz, gibt den Spitzenwert an (absolute und prozentuale Amplitude) und die Stelle in der Datei (Sample-Nummer und Zeit), wo dieser Spitzenwert zu finden ist.
Ich weiß auch nicht, ob ich alles richtig gemacht habe, da ich mich im Hau-Ruck-Verfahren erst mal mit dem Aufbau von WAV-Dateien befassen mußte.
Was ich möchte, ist ein Plug-In-Effekt, der auf eine gerade in Audacity geladene Datei wirkt, den Spitzenwert entweder prozentual oder als dB-Wert ermittelt und den Cursor an die Stelle setzt, wo dieser Wert zu finden ist.
Mein Programmtext lautet im wesentlichen so:
function FINDPEAK_onClick
audiofile = new file ()
audiofile.open ("&wav_datei", "R")
* finde Beginn des Datenblocks, alle Formatdetails werden wie oben angegeben unterstellt
do
four_bytes = audiofile.read (4)
until four_bytes = "data"
* ermittle Anzahl der Samples
anzahl_data = asc (audiofile.read (1)) + 256 * asc (audiofile.read (1)) + 65536 * asc (audiofile.read (1)) + 16777216 * asc (audiofile.read (1))
* für 16-Bit (= 2 Byte) Stereo (= 2 Byte), also 4 Byte je Sample
anzahl_samples = anzahl_data / 4
* führe eine einfache Maximum-Suche durch
peak_val = 0
for sample_nr = 1 to anzahl_samples
* lese Amplitude des linken und rechten Kanals, update ggf. peak-value und merke Stelle
left = asc (audiofile.read (1)) + 256 * asc (audiofile.read (1))
if left > 32767 // negativ
left = 65536 - left
endif
if left > peak_val
peak_val = left
peak_sample_nr = sample_nr
kanal = 1
endif
right = asc (audiofile.read (1)) + 256 * asc (audiofile.read (1))
if right > 32767 // negativ
right = 65536 - right
endif
if right > peak_val
peak_val = right
peak_sample_nr = sample_nr
kanal = 2
endif
next
sekunden = peak_sample_nr / 44100
* Spitzenpegel (peak_val) ausgeben, entweder Position (peak_sample_nr oder Zeit) angeben oder Cursor auf Spitzenpegel setzen
audiofile.close ()
return
Alles anzeigen
Gibt es jemand, der mir daraus ein Plugin basteln kann?
Oder kann mir jemand sagen, wo es ein solches Plugin schon gibt?
Ich möchte allerdings kein Riesenpaket mit zig Funktionen.