Entwickler-Ecke
Multimedia / Grafik - Audiodaten bearbeiten
MarkusBauer - Sa 31.07.10 23:06
Titel: Audiodaten bearbeiten
Hallo
ich muss für mein Programm Audiodateien in verschiedenen Formaten laden, bearbeiten und speichern können.
Ich habe es jetzt mithilfe diverser Tutorials geschafft die wichtigsten Formate zum Abspielen mit der bass.dll zu laden. Außerdem habe ich bei den Beispielen zu dieser Dll eine Routine zum Speichern in eine Wav-Datei gefunden. Zum Bearbeiten benötige ich jetzt eine Möglichkeit auf die Rohdaten der Musik zuzugreifen.
Wie kann ich über die Bass.dll die Musikdaten in einfachen Zahlen (z.B. in einem Array) bekommen, den ich verändern kann?
Mögliche Operationen wären z.B. lauter/leiser und Pausen einfügen, daher müsste ich die Daten auch in der Länge verändern können.
Danke schonmal
Markus
ALF - So 01.08.10 00:14
Hi, das machst Du mit Bass_ChannelGetData.
kleines abgewandeltes Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| procedure Readdata; var PeakBuf: array[0..176400] of integer; Data: ^smallint; BufLen,i: Integer; counter: integer; peaksL: array of smallint; peaksR: array of smallint; begin setlength(peaksL, 2600); setlength(peaksR, 2600); counter:= 0; BufLen:= Bass_ChannelGetData(HStream, @PeakBuf, 176400); Data:= @PeakBuf; while (buflen > 0) do begin if (Data^) > pl then pl := (Data^)else if (Data^) < pl then pl := (Data^); Inc(Data); if (Data^) > pr then pr := (Data^)else if (Data^) < pr then pr := (Data^); Inc(Data); BufLen:= BufLen -4 ;
if counter > 2600 then break; peaksL[counter]:= pl; peaksR[counter]:= pr;
inc(counter); pL:= 0; pR:= 0; end;
if peaksL[i]>=32768 then newwavpeak[i]:= peaksL[i]-100;
newwavpeak[i]:= 0;
end; |
Ist erst mal nur so als Vorschlag für den Anfang!
Gruss Alf
MarkusBauer - So 01.08.10 15:33
Danke erstmal, funktioniert soweit. Jetzt zwei Fragen: wie setze ich die Position, ab der ChannelGetData auslesen soll?
Und wie bekomme ich die bearbeiteten Daten wieder in die Bass.dll um sie von dort aus speichern zu können?
ALF - So 01.08.10 16:13
Die Pos setzt Du mit:
Delphi-Quelltext
1:
| BASS_ChannelSetPosition(DeinStream, neupos, BASS_POS_BYTE); |
In die DLL bekommst Du gar nichts :wink: .
Sie stellt Dir nur die ganzen Funktionen zu verfügung! Wie Du die bearbeiteten Daten speicherst, steht glaube ich auch in den Demos drin. Ist im Prinzip nichts anderes als wenn Du ne mp3, wma oder Cdtitel in eine Wave packst bzw. eine neue wav erstellst. Muss man mal schauen auf Un4seen.com bzw die Bass Hilfe.
Gruss Alf
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!