AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mergen von Audios

Ein Thema von markusagb · begonnen am 29. Jun 2018 · letzter Beitrag vom 7. Jul 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Mergen von Audios

  Alt 29. Jun 2018, 21:44
Das sieht mir nicht so aus als ob Du in die Anleitung von Bass geschaut hast. Wenn Du das machst klärt sich alles auf.
Fehlt vielleicht eine Uses Anweisung, könnte auch sein?!
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Jun 2018 um 21:50 Uhr)
  Mit Zitat antworten Zitat
markusagb

Registriert seit: 11. Jun 2018
46 Beiträge
 
#2

AW: Mergen von Audios

  Alt 29. Jun 2018, 22:39
Hi, fehler gefunden, danke für den Tipp mit der Doku. Die Bassenc und Bassmix pas + dll haben gefehlt, dachte die sind im Bass mit drin...

Läuft trotzdem nicht. Die Samples helfen auch nicht weiter .-(
  Mit Zitat antworten Zitat
markusagb

Registriert seit: 11. Jun 2018
46 Beiträge
 
#3

AW: Mergen von Audios

  Alt 5. Jul 2018, 00:47
Für alle die das Gleiche benötigen, hier der Code wie es funktioniert. Hat etwas gedauert, aber das läuft:


procedure TForm1.Audiomerge;
var Source1, Source2, Source3 : Cardinal;
Mixer : Cardinal;
duration1, duration2, duration3: double;
len:qword;
start: QWORD;
length: QWORD ;
begin
Source1 := BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source2:= BASS_StreamCreateFile(false, PChar('D:\Meldung1.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source3:= BASS_StreamCreateFile(false, PChar('D:\Meldung2.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});

Mixer:= BASS_Mixer_StreamCreate(48000, 2, 0);

len:=BASS_ChannelGetLength(Source1, BASS_POS_BYTE);
duration1:=BASS_ChannelBytes2Seconds(Source1, len);
start:=BASS_ChannelSeconds2Bytes(mixer, 0.2);
length:=BASS_ChannelSeconds2Bytes(mixer, duration1);
BASS_Mixer_StreamAddChannelEx(mixer, Source1, 0, start, length);

len:=BASS_ChannelGetLength(Source2, BASS_POS_BYTE);
duration2:=BASS_ChannelBytes2Seconds(Source2, len);
start:=BASS_ChannelSeconds2Bytes(mixer, duration1);
length:=BASS_ChannelSeconds2Bytes(mixer, duration2);
BASS_Mixer_StreamAddChannelEx(mixer, Source2, 0, start, length);

len:=BASS_ChannelGetLength(Source3, BASS_POS_BYTE);
duration3:=BASS_ChannelBytes2Seconds(Source3, len);
start:=BASS_ChannelSeconds2Bytes(mixer, duration1+duration2);
length:=BASS_ChannelSeconds2Bytes(mixer, duration3);
BASS_Mixer_StreamAddChannelEx(mixer, Source3, 0, start, length);

BASS_ChannelPlay(mixer, false);

BASS_Encode_Start(Mixer, PChar('D:\neu.wav'), 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_ENCODE_PCM {$ENDIF}, nil, nil);

Geändert von markusagb ( 5. Jul 2018 um 00:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Mergen von Audios

  Alt 5. Jul 2018, 08:17
Source1 := BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source2:= BASS_StreamCreateFile(false, PChar('D:\Meldung1.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Source3:= BASS_StreamCreateFile(false, PChar('D:\Meldung2.wav'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE or BASS_STREAM_DECODE {$ENDIF});
Was mir auf den Ersten Blick auffällt wäre das ich es so schreiben würde:
Delphi-Quellcode:
Source1:= BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, 0 or BASS_STREAM_DECODE {$IFDEF UNICODE}or BASS_UNICODE{$ENDIF});
Source2:= BASS_StreamCreateFile(false, PChar('D:\Meldung1.wav'), 0, 0, 0 or BASS_STREAM_DECODE {$IFDEF UNICODE}or BASS_UNICODE{$ENDIF});
Source3:= BASS_StreamCreateFile(false, PChar('D:\Meldung2.wav'), 0, 0, 0 or BASS_STREAM_DECODE {$IFDEF UNICODE}or BASS_UNICODE{$ENDIF});
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Mergen von Audios

  Alt 5. Jul 2018, 08:52
Zitat:
Für alle die das Gleiche benötigen, hier der Code wie es funktioniert. Hat etwas gedauert, aber das läuft:
Ich möchte bezweifeln das es richtig funktioniert bei den zusammengewürfelten Variablen die du übergibst.
Wundere dich also nicht wenn ein paar Samples fehlen.

Und ich würde es so schreiben..

Source1:= BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, 0 or BASS_STREAM_DECODE {$IFDEF UNICODE}or BASS_UNICODE{$ENDIF});
Source1:= BASS_StreamCreateFile(false, PChar('D:\Intro.wav'), 0, 0, BASS_STREAM_DECODE {$IFDEF UNICODE}or BASS_UNICODE{$ENDIF});

also was soll das mit der 0 vor dem Flag "BASS_STREAM_DECODE" (0 or BASS_STREAM_DECODE ) ist ein NOGO!
Zudem würde ich BASS_UNICODE vor dem Flag BASS_STREAM_DECODE setzen.

Dann würde ich deine Variablen prüfen.
start: QWORD..

Was denn nu QWORD, Integer, Bytes, Double ?
Du solltest dich schon für die richtige Variable entscheiden so wie in der Doku angegeben nicht einfach irgendwas.

QWord = UInt64\Int64 verlangt wird Byte oder warum denkst du heißt die Funktion BASS_ChannelSeconds2Bytes damit wir einfach mal Int64 verwenden?
Das ist aber nicht das einzige überprüfe auch mal die anderen.

gruss

Geändert von EWeiss ( 5. Jul 2018 um 09:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Mergen von Audios

  Alt 5. Jul 2018, 08:58
Spielt das bei Create() ne Rolle in welcher Reihenfolge man Dinge True setzt? Hab Bass.pas gerade nicht zur Hand.
Ja da hätte ich lieber 2x gucken müssen mit der 0, mir ist nur beim ersten Blick aufgefallen das DECODE im UNICODE block weggekapselt war.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Mergen von Audios

  Alt 5. Jul 2018, 09:05
Spielt das bei Create() ne Rolle in welcher Reihenfolge man Dinge True setzt? Hab Bass.pas gerade nicht zur Hand.
Ja da hätte ich lieber 2x gucken müssen mit der 0, mir ist nur beim ersten Blick aufgefallen das DECODE im UNICODE block weggekapselt war.
Ich meinte nicht dich sondern den TE!

Eigentlich nicht aber macht sinn denn ich übergebe einen String also den Pfad zu der Datei dafür sollte ich zuerst das Flag zum prüfen Unicode oder nicht setzen und erst dann
das Flag zur Bearbeitung schließlich lese ich zuerst den Pfad und bearbeite anschließend die Datei nicht umgekehrt.

gruss
  Mit Zitat antworten Zitat
markusagb

Registriert seit: 11. Jun 2018
46 Beiträge
 
#8

AW: Mergen von Audios

  Alt 5. Jul 2018, 20:31
Danke. Aus der Bass-Doku:

http://www.un4seen.com/doc/#bassmix/...ChannelEx.html

Example
Add a channel to a mixer, delaying the start by 1 second and limiting the duration to 2 seconds.

QWORD start=BASS_ChannelSeconds2Bytes(mixer, 1); // delay
QWORD length=BASS_ChannelSeconds2Bytes(mixer, 2); // duration
BASS_Mixer_StreamAddChannelEx(mixer, channel, 0, start, length); // add the channel

Variable start + length = QWORD

  Mit Zitat antworten Zitat
markusagb

Registriert seit: 11. Jun 2018
46 Beiträge
 
#9

AW: Mergen von Audios

  Alt 5. Jul 2018, 20:38
Vorschläge geändert, funktioniert genau gleich, danke dennoch!!

Ein Problem habe ich noch, das geschriebene WAV-File wird erst dann finalisiert wenn ich die Anwendung schließe. Das ist natürlich blöd. Muss ich die Streams alle freigeben bzw. gibts ne callback wenn der encoder fertig ist?

Lieber Gruß und nochmals danke an alle
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz