 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 27.12.2007, 22:01 Titel: zwei wav datei zusammensetzen |
|
|
hi,
ich wollte mal nachfragen, ob es irgendwie möglich ist, mit freebasic zwei
separat erstellte wav dateien zu einer wav datei zusammenzufügen.
danke im vorfeld+gruß
tom |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.12.2007, 22:11 Titel: |
|
|
1. Die ersten 44 bytes einer der beiden Dateien als Header nehmen
2. Die Länge beider Dateien auslesen und einen Puffer anfertigen
3. Header + beide Puffer in neue Datei schreiben
4. Längenbytes anpassen
Voraussetzung: Beide müssen das gleiche Format haben.
Code: |
dim header as string * 44
dim as integer filelen1, filelen2, totallen
dim as string buffer1, buffer2
OPEN file1 for binary as #1
OPEN file2 for binary as #2
get #1,1,header
get #1,41,filelen1
get #2,41,filelen2
totallen = filelen1 + filelen2 'gesamte neue länge
buffer1 = space(filelen1)
buffer2 = space(filelen2)
get #1,45,buffer1
get #2,45,buffer2
close #2
close #1
open file3 for output as #3 'evtl datei leeren
close #3
open file3 for binary as #3
put #3,1,header
put #3,41,totallen
put #3,45,buffer1
put #3,,buffer2
close #3
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 27.12.2007, 23:09 Titel: geht nicht |
|
|
Hi,
habe Deinen Code ausgeführt und bekomme nur fehler angezeigt ;-(
Zitat: | Command executed:
"C:\Programme\FreeBASIC\fbc.exe" "C:\Programme\FreeBASIC\merge.bas"
Compiler output:
C:/Programme/FreeBASIC/merge.bas(4) error 41: Variable not declared, file1 in 'OPEN file1 For BINARY As #1'
C:/Programme/FreeBASIC/merge.bas(4) warning 12(0): Implicit variable allocation, file1
C:/Programme/FreeBASIC/merge.bas(4) error 55: Type mismatch, at parameter 1 in 'OPEN file1 For BINARY As #1'
C:/Programme/FreeBASIC/merge.bas(5) error 41: Variable not declared, file2 in 'OPEN file2 For BINARY As #2'
C:/Programme/FreeBASIC/merge.bas(5) warning 12(0): Implicit variable allocation, file2
C:/Programme/FreeBASIC/merge.bas(6) error 159: Invalid assignment/conversion in 'file1="c:\abc.wav'
C:/Programme/FreeBASIC/merge.bas(7) error 159: Invalid assignment/conversion in 'file2="c:\def.wav"'
C:/Programme/FreeBASIC/merge.bas( error 41: Variable not declared, file3 in 'file3="c:\abcdef.wav"'
Results:
Compilation failed
System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 0.18.2 (10-12-2007) for win32 (target:win32)
OS: Windows XP (build 2600, Service Pack 2) |
was mache ich falsch???
gruß tom
Code: | Dim header As STRING * 44
Dim As INTEGER filelen1, filelen2, totallen
Dim As STRING buffer1, buffer2
OPEN file1 For BINARY As #1
OPEN file2 For BINARY As #2
file1="c:\abc.wav
file2="c:\def.wav"
file3="c:\abcdef.wav"
GET #1,1,header
GET #1,41,filelen1
GET #2,41,filelen2
totallen = filelen1 + filelen2 'gesamte neue länge
buffer1 = Space(filelen1)
buffer2 = Space(filelen2)
GET #1,45,buffer1
GET #2,45,buffer2
CLOSE #2
CLOSE #1
OPEN file3 For OUTPUT As #3 'evtl datei leeren
CLOSE #3
OPEN file3 For BINARY As #3
PUT #3,1,header
PUT #3,41,totallen
PUT #3,45,buffer1
PUT #3,,buffer2
CLOSE #3 | [/quote] |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 27.12.2007, 23:30 Titel: |
|
|
Definiere einfach die Variablen file1 usw.
Code: | dim as string file1, file2, file3
file1 = "..." ' hier halt dann die Namen |
edit: Die Festlegung von file1 usw. muss natürlich erfolgen, bevor du
Code: | OPEN file1 FOR BINARY AS #1 |
aufrufst. Da muss er file1 ja schon kennen. Also so:
Code: | DIM header AS STRING * 44
DIM AS INTEGER filelen1, filelen2, totallen
DIM AS STRING buffer1, buffer2
DIM AS STRING file1, file2, file3
file1="c:\abc.wav
file2="c:\def.wav"
file3="c:\abcdef.wav"
OPEN file1 FOR BINARY AS #1
OPEN file2 FOR BINARY AS #2 |
usw _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 27.12.2007, 23:54 Titel: ups klar, aber geht trotdem nicht ;-( |
|
|
hi nochmal und erstmal danke...
okay, der code läuft und die datei hat er mir jetzt zusammengesetzt
nur das problem ist nun, das mir; egal welchen wav player ich nehme, gesagt wird, die datei ist beschädigt...
kann die wav datei also nicht mehr ordnungsgemäß abspielen ;-(
habe diese übrigens testweise über den windows xp audiorecorder aufgenommen und beide dateien hatten die gleichen sample einstellungen...
????
tom |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.12.2007, 00:42 Titel: |
|
|
es funzt bei mir ohne probleme, es kann nur sein, dass dein audiorecorder den header nicht ganz so zusammensetzt, wie das bei einer standard-wavedatei sein sollte (hast du kompression aktiviert?). Ich kann nämlich zwei WAV-Dateien (wohlgemerkt vom selben format) problemlos mit dem Code zusammensetzen und abspielen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 28.12.2007, 10:54 Titel: ja lag an der kompression |
|
|
hi Jojo,
hast recht, der fehler lag an der kompression erstmal danke...
da habe ich doch glatt noch eine frage:
weiß jemand, wie ich ans compilerte exe programm parameter übergeben kann?
für das untere listing wäre es sinnvoll für mich, an die compilierte exe, drei parameter anzuhängen (damit ich flexibler arbeiten kann)
so in der art...
wavmerge.exe file1,file2,neues_wav_file
müßte doch eigentlich machbar sein oder ?
habe hier im forum schon gesucht, aber irgendwie nichts passendes gefunden...
gruß + danke im vorfeld
tom
p.s. SUPER FORUM hier, schnelle und kompetente Hilfe )) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.12.2007, 11:45 Titel: |
|
|
Oje, meine Windowszeit ist schon eine Weile vorbei - aber wenn ich etwas Falsches sage, wird mich schon jemand verbessern.
Öffne zu der .exe den Eigenschaften-Dialog, öffne den Reiter "Programm" und editiere die Befehlszeile. Den Pfad setzt du am besten komplett in Anführungszeichen (falls er das noch nicht ist) und schreibst dahinter ein Leerzeichen und ein Fragezeichen. Also so:
Code: | "C:/Programme/Mauereid.exe" ? |
Dann wirst du beim Doppelklick auf die .exe zur Parametereingabe aufgefordert.
Auslesen kannst du die Parameter ja dann mit COMMAND. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.12.2007, 12:52 Titel: |
|
|
ich glaub ihm ging's eher ums auslesen
Dazu gibt's Infos in der Referenz; musst nur eventuell aufpassen, wenn Leerzeichen im Pfad sind. Ich weiß jetzt ohne es auszuprobieren nicht, wie FreeBASIC die handhabt, wenn Parameter in Anführungszeichen sind. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 28.12.2007, 14:14 Titel: ja ums auslesen |
|
|
hi nochmal,
erstmal nochmals dank für die schnelle antwort...
ja es ging ums auslesen und komischerweise bekomme ich da den dritten parameter nicht hin???
bin ich heute zu blond?
unteren code habe ich compiliert und liegt auf festplatte c:\
heißt merge.exe
aufrufen über windows ausführen console mit
c:\merge.exe abc.wav /def.wav /xxxestabc.wav"
und das zusammengesetzte file heißt abcdef.wav
kapiere ich nicht???
muß doch parameter3 heißen??
blickt jemand durch??
danke im vorfeld
gruß tom
Code: | DIM header AS STRING * 44
DIM AS INTEGER filelen1, filelen2, totallen
DIM AS STRING buffer1, buffer2
DIM AS STRING file1, file2, file3
file1= COMMAND$(1)
file2= COMMAND$(2)
file3= COMMAND$(3)
OPEN file1 FOR BINARY AS #1
OPEN file2 FOR BINARY AS #2
GET #1,1,header
GET #1,41,filelen1
GET #2,41,filelen2
totallen = filelen1 + filelen2 'gesamte neue länge
buffer1 = SPACE(filelen1)
buffer2 = SPACE(filelen2)
GET #1,45,buffer1
GET #2,45,buffer2
CLOSE #2
CLOSE #1
OPEN file3 FOR OUTPUT AS #3 'evtl datei leeren
CLOSE #3
OPEN file3 FOR BINARY AS #3
PUT #3,1,header
PUT #3,41,totallen
PUT #3,45,buffer1
PUT #3,,buffer2
CLOSE #3
|
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.12.2007, 14:21 Titel: |
|
|
dein merge-aufruf erscheint mir ein wenig seltsam.
sollte eigentlich so heißen:
Code: |
merge abc.wav def.wav xxxestabc.wav
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 28.12.2007, 14:33 Titel: :-( |
|
|
c:\merge.exe abc.wav def.wav xxxestabc.wav
geht auch nicht ;-(
NEUE DATEI HEIßT abcdef.wav
DAS KANN DOCH GAR NICHT SEIN??!?!!??!? ist aber so ;-(((((
*null durchblick* |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 28.12.2007, 14:43 Titel: upsssssssssssssss SOOOOOOOOOORRRRYYY |
|
|
ups sorryyyyyyyyyy..........
ES GEHT
hab die welt irgendwie nicht mehr verstanden und konnte ja nur das gewesen sein->
man oh man der fehler war, das ich das compilierte FALSCHE Programm ständig nach c:\ geschoben habe
ALSO ES GEHT ...DANKE AN ALLE HIER  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 28.12.2007, 23:26 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Voraussetzung: Beide müssen das gleiche Format haben. |
Nur als Tipp für konzeptionell saubere Programmierung: Bei der zweiten Datei Header ebenfalls einlesen, die relevanten Parameter vergleichen und bei Differenz entsprechender Fehler ausgeben und abbrechen!
Natürlich kann man noch ein "REM TO DO: Format umrechnen" ergänzen => ein FreeBasic-Programmierer, dem es am verregneten Wochenende einmal langweilig ist, kann sich dann dieser Aufgabe noch annehmen... ;-) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|