Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

zwei wav datei zusammensetzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 27.12.2007, 22:01    Titel: zwei wav datei zusammensetzen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.12.2007, 22:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 27.12.2007, 23:09    Titel: geht nicht Antworten mit Zitat

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(cool 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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 27.12.2007, 23:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 27.12.2007, 23:54    Titel: ups klar, aber geht trotdem nicht ;-( Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.12.2007, 00:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 28.12.2007, 10:54    Titel: ja lag an der kompression Antworten mit Zitat

hi Jojo,

hast recht, der fehler lag an der kompression zwinkern 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 zwinkern))
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 28.12.2007, 11:45    Titel: Antworten mit Zitat

Oje, meine Windowszeit ist schon eine Weile vorbei - aber wenn ich etwas Falsches sage, wird mich schon jemand verbessern. grinsen

Ö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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.12.2007, 12:52    Titel: Antworten mit Zitat

ich glaub ihm ging's eher ums auslesen grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 28.12.2007, 14:14    Titel: ja ums auslesen Antworten mit Zitat

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 mit dem Kopf durch die Mauer wollen
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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.12.2007, 14:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 28.12.2007, 14:33    Titel: :-( Antworten mit Zitat

c:\merge.exe abc.wav def.wav xxxestabc.wav

geht auch nicht ;-(

NEUE DATEI HEIßT abcdef.wav mit dem Kopf durch die Mauer wollen

DAS KANN DOCH GAR NICHT SEIN??!?!!??!? ist aber so ;-(((((

*null durchblick*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tom_verbatim



Anmeldungsdatum: 03.02.2007
Beiträge: 53

BeitragVerfasst am: 28.12.2007, 14:43    Titel: upsssssssssssssss SOOOOOOOOOORRRRYYY Antworten mit Zitat

ups sorryyyyyyyyyy..........


ES GEHT zwinkern


hab die welt irgendwie nicht mehr verstanden zwinkern 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 mit den Augen rollen


ALSO ES GEHT ...DANKE AN ALLE HIER zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 28.12.2007, 23:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz