Hi,
ich habe mir im FPC-Unterverzeichnis /source/packages
das Beispiel im Ordner /sndfile herausgenommen
und möchte es unter Windows übersetzen.
Dazu habe ich mir die libsndfile.dll bereits heruntergeladen.
Dummerweise ist das Beispielprogramm "native Linux",
es verwendet u.a. "fpwrite" aus der unit "baseunix".
Kann man "fpwrite" in simpler Weise
durch einen cross-plattform-Befehl ersetzen ?
fpwrite, Windows und libsndfile.dll
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: fpwrite, Windows und libsndfile.dll
ich kenn mich damit nicht so gut aus, aber was macht fpwrite genau ? bzw ist das eine funtion oder unit ? welche funktion wird daraus benutzt / was macht die ?
Code: Alles auswählen
Signatur := nil;
Re: fpwrite, Windows und libsndfile.dll
Sieh hier:MAC hat geschrieben:ich kenn mich damit nicht so gut aus, aber was macht fpwrite genau ? bzw ist das eine funtion oder unit ? welche funktion wird daraus benutzt / was macht die ?
http://lazarus-ccr.sourceforge.net/docs ... dex-5.html" onclick="window.open(this.href);return false;
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: fpwrite, Windows und libsndfile.dll
So wie ich das sehe, macht das Beispiel den Filedescriptor der Soundkarte auf und schiebt das Soundfile drauf. Das geht so unter Windows nicht, da gibt es keine Filedescriptoren. Vielleicht hilft dir das hier: http://wiki.freepascal.org/Multimedia_ProgrammingNickNameX hat geschrieben:Kann man "fpwrite" in simpler Weise
durch einen cross-plattform-Befehl ersetzen ?
Viel Erfolg!
mfg Ingo
Re: fpwrite, Windows und libsndfile.dll
Hm .. nicht wirklich.shokwave hat geschrieben:So wie ich das sehe, macht das Beispiel den Filedescriptor der Soundkarte auf und schiebt das Soundfile drauf. Das geht so unter Windows nicht, da gibt es keine Filedescriptoren. Vielleicht hilft dir das hier: http://wiki.freepascal.org/Multimedia_ProgrammingNickNameX hat geschrieben:Kann man "fpwrite" in simpler Weise
durch einen cross-plattform-Befehl ersetzen ?
libsndfile.dll ( oder: sndfile-1.dll) ist dafür da,
(u.a.) Wave-Dateien zu öffnen und Raw Data
über die File Seek Functions zur Verfügung zu stellen.
Plattformübergreifend, d.h. ggf. also auch unter Linux wenn gewünscht ..
> At the moment, each new release is being tested on
> i386 Linux, PowerPC Linux, MacOS X on PowerPC and Win32.
> Libsndfile is a library designed to allow the reading and writing of
> many different sampled sound file formats (such as MS Windows WAV
> and the Apple/SGI AIFF format) through one standard library interface.
Das gehört also zum Thema "Low Level Access" und ist
kein Ersatz für einen Multimedia-Player -
obwohl man damit natürlich einen schreiben kann ..

Im Moment wüßte ich keinen Weg, das - genauso simpel
wie mit fpwrite - unter Windows zu realisieren.
Da müßte ich also über MMSystem mit Lowlevel API calls arbeiten.
Und das bläht den Beispiel-Code nur unnötig auf.
Was soll's, das Beispiel war sowieso nur für die Kommandozeile ..
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: fpwrite, Windows und libsndfile.dll
Logischerweise soll sndfile.dll dann auch eine Write() Funktion zur Verfügung setzen, genau so wie seek usw (oder sonst wurde man dafür auch baseunix.fpseek nutzen). Vielleicht hat sndfile die auch, und funktioniert baseunix.fpwrite nur zufällig?NickNameX hat geschrieben:Hm .. nicht wirklich.shokwave hat geschrieben:So wie ich das sehe, macht das Beispiel den Filedescriptor der Soundkarte auf und schiebt das Soundfile drauf. Das geht so unter Windows nicht, da gibt es keine Filedescriptoren. Vielleicht hilft dir das hier: http://wiki.freepascal.org/Multimedia_ProgrammingNickNameX hat geschrieben:Kann man "fpwrite" in simpler Weise
durch einen cross-plattform-Befehl ersetzen ?
libsndfile.dll ( oder: sndfile-1.dll) ist dafür da,
(u.a.) Wave-Dateien zu öffnen und Raw Data
über die File Seek Functions zur Verfügung zu stellen.
Anders hängt es davon ab wie weit sndlib nach Windows portiert worden ist. Wenn es nur mit einen POSIX/Unix Emulationbibliotheken gemacht ist (zb msvcrt, mingw oder cygwin), soll man die korrespondierende Funktionen von respektive Bibliotheken nutzen (also das Äquivalent von *nix write (2)).
Wenn sie wirklich völlig nach Winapi portiert würde, nutze writefile() aus unit Windows.
Re: fpwrite, Windows und libsndfile.dll
Hallo marcov,marcov hat geschrieben:Logischerweise soll sndfile.dll dann auch eine Write() Funktion zur Verfügung setzen, genau so wie seek usw (oder sonst wurde man dafür auch baseunix.fpseek nutzen). Vielleicht hat sndfile die auch, und funktioniert baseunix.fpwrite nur zufällig?
Anders hängt es davon ab wie weit sndlib nach Windows portiert worden ist. Wenn es nur mit einen POSIX/Unix Emulationbibliotheken gemacht ist (zb msvcrt, mingw oder cygwin), soll man die korrespondierende Funktionen von respektive Bibliotheken nutzen (also das Äquivalent von *nix write (2)).
Wenn sie wirklich völlig nach Winapi portiert würde, nutze writefile() aus unit Windows.
sorry aber ich habe jetzt erst wieder ins Forum geschaut.
Unter Linux kann man wohl direkt in das "DSP-Device" schreiben (Soundkarte),
sprich, Audio-Datenblöcke schreiben. Sowas könnte man emulieren
indem ich das MME-Interface nutze. Nur um das Beispiel-Programm
zum laufen zu bringen, ist mir das aber viel zu aufwendig.
Die DLL läuft jetzt bei mir auch unter Windows, an dem
Wrapper-File muß ich aber noch ein paar Änderungen vornehmen
damit es komfortabler zu benutzen ist, unter Windows.
Beste Grüße,
Peter