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:

load sample from memory - mit fmod

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



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 29.07.2007, 12:58    Titel: load sample from memory - mit fmod Antworten mit Zitat

Hi, ich versuche gerade ein mp3 file das ich vorher per allocate in den Speicher geladen habe per Fmod mit der function "fsound_sample_load" in fmod zu laden, um es dann mit "fsound_playsound" wieder abzuspielen.
Das sieht bis jetzt so aus (funktioniert allerdings nicht richtig - gibt keinen ton von sich...) :

Code:

option explicit
#include once "fmod.bi"

Dim i As ULongInt
Dim f As Integer
Dim As UByte Ptr memory
Dim As Integer Ptr buffer

f = Freefile
Open "C:\test.mp3" For Binary Access Read As #f

Dim value As ULongInt = Lof(f)
memory = allocate(value * Len(UByte))


For i = 0 To value - 1
    Get #f, , memory[i]
Next

Close #f

FSOUND_Init(44100, 32, 0)

buffer = FSOUND_Sample_Load(FSOUND_FREE, memory, FSOUND_LOADMEMORY, 0, 0)

FSOUND_PlaySound(FSOUND_FREE, buffer)
sleep
   
FSOUND_Close
End


Wenn sich jetzt vl. wer fragt warum ich das so kompliziert machen will, und warum ich das mp3 file nicht gleich von der HD mit Fmod lade, dann sei gesagt, dass ich eigentlich vor hab die mp3 datei aus einer einzigen Datei in der mehrere andere Dateien enthalten sind (also eine Art file-Archiv) direkt heraus in den Speicher zuladen und abzuspielen, .. natürlich wäre es auch möglich das mp3-Stück aus dem "file-archiv" rauszuladen, dann das Stück auf die Festplatte zu kopieren, abzuspielen und wieder zu löschen, allerdings soll das "file-archiv" den Sinn haben, dass keine Datei aus dem "Archiv" extra mit der Festplatte in berührung kommt (in dem Code oben wird der einfachheithalber allerdings eine einfache mp3 erstmal direkt alloziert).
Wenn mir jemand helfen, und zeigen könnte wie ich so eine mit FB allozierte mp3 direkt in Fmod abspielen kann wäre ich sehr dankbar.

mfg 0815

PS: Es ist auch gut möglich, dass der obige Code totaler Quatsch ist, da ich schon länger nicht mehr mit FB programmiert hab und sonst mit Zeigern auch nicht soviel zu tun hatte. durchgeknallt (Ein dezenter Hinweis darauf, wäre dann bitte angebracht. mit den Augen rollen lachen )

PPS: Wenn ich was brauchbares dazu in google gefunden hätte, hätte ich das hier nicht geschrieben happy


Zuletzt bearbeitet von Build0815 am 30.07.2007, 16:02, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.07.2007, 14:39    Titel: Antworten mit Zitat

interessanter Ansatz auf dessen loesung ich gespannt bin....

zunaechst aber...

FSOUND_Sample_Load gibt eine Long bzw Integer zurueck..
also buffer ist eine Integer keine integer ptr

was man oeffnet muss man auch wieder schliessen,
close #f

ansonsten konnte ich dem ganzen in der Form aber leider auch noch keinen Ton entlocken...

Edit:
option explicit ??
vielleicht mal den neuen Compiler 0.17 oder die 0.18 laden grinsen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 29.07.2007, 15:19    Titel: Antworten mit Zitat

ich vermute die Laderoutine als Ursache??
Code:
..
Get #f, i+1, memory[i]  '<---  i+1
..

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.07.2007, 15:33    Titel: Antworten mit Zitat

Ich habs zum versuch mal so gemacht...

Code:

#include once "fmod_x.bi"

Dim i As ULongInt
Dim f As Integer
Dim As UByte Ptr memory
Dim As Integer buffer

f = Freefile
Open "lithium.mp3" For Binary Access Read As #f

Dim value As ULongInt = Lof(f)
memory = allocate(value * Len(UByte))


For i = 0 To value - 1
    Get #f,i+1,memory[i]
Next

Close #1

FSOUND_Init(44100, 32, 0)

buffer=FSOUND_Sample_Load(@memory,"test",FSOUND_NORMAL, 0, 0)

FSOUND_PlaySound(FSOUND_FREE, buffer)
sleep
   
FSOUND_Close
End

keine grossartige veraenderungen...
mein Problem faengt aber eigentlich schon damit an;
FSound_Sample (Index as Integer???,Name as String???,mode,offset,length)

Ich nehme mal an das Name nicht nur einer besseren Uebersicht dient
index hatte ich vermutet ist die adresse des Pointers....

leider habe ich mit FMod noch nicht viel mehr gemacht als einen Stream abgespielt...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Build0815



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 29.07.2007, 15:39    Titel: Antworten mit Zitat

@Eternal_Pain: Die Funktion lautet folgendermaßen:

Zitat:

FSOUND_Sample_Load
Loads and decodes a static soundfile into memory.
This includes such files as .WAV, .MP2, .MP3, .OGG, .RAW and others.

FSOUND_SAMPLE * F_API FSOUND_Sample_Load(
int index,
const char *name_or_data,
unsigned int inputmode,
int offset,
int length
);


Parameters
index Sample pool index. See remarks for more on the sample pool.
0 or above - The absolute index into the sample pool. The pool will grow as the index gets larger. If a slot is already used it will be replaced.
FSOUND_FREE - Let FSOUND select an arbitrary sample slot.
FSOUND_UNMANAGED - Dont have this sample managed within fsounds sample management system

name_or_data Name of sound file or pointer to memory image to load.

mode Description of the data format, OR in the bits defined in FSOUND_MODES to describe the data being loaded.

offset Optional. 0 by default. If > 0, this value is used to specify an offset in a file, so fmod will seek before opening. length must also be specified if this value is used.

length Optional. 0 by default. If > 0, this value is used to specify the length of a memory block when using FSOUND_LOADMEMORY, or it is the length of a file or file segment if the offset parameter is used. On PlayStation 2 this must be 16 byte aligned for memory loading.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 29.07.2007, 16:24    Titel: Antworten mit Zitat

evtl hilft euch das weiter:
http://www.askos.de/tutorial/kap314.htm#kap5
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Build0815



Anmeldungsdatum: 30.09.2006
Beiträge: 51

BeitragVerfasst am: 30.07.2007, 15:58    Titel: Antworten mit Zitat

Jetzt hab ichs doch geschafft ein mp3 file direkt aus dem Speicher abzuspielen, der Fahler war vorhin nur der, dass man im letzten Argument der Ladefunktion die Länge des allozierten Speicherbereichs angeben muss, in diesem Fall im Code die Variable "i".
(Also die Zeile << buffer = FSOUND_Sample_Load(FSOUND_FREE, memory, FSOUND_LOADMEMORY, 0, i)" >>)

Bei mir funktioniert der folgende Code (FB0.17):

Code:

#include once "fmod.bi"

Dim i As ULongInt
Dim f As Integer
Dim As UByte Ptr memory
Dim As Integer Ptr buffer

f = Freefile
Open "C:\test.mp3" For Binary Access Read As #f

Dim value As ULongInt = Lof(f)
memory = allocate(value * Len(UByte))


For i = 0 To value - 1
    Get #f, , memory[i]
Next

Close #f

Print(Str(memory))
Sleep


FSOUND_Init(44100, 32, 0)

buffer = FSOUND_Sample_Load(FSOUND_FREE, memory, FSOUND_LOADMEMORY, 0, i)

FSOUND_PlaySound(FSOUND_FREE, buffer)
sleep
   
FSOUND_Close
End
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 30.07.2007, 16:15    Titel: Antworten mit Zitat

funktioniert super zwinkern
auch wenn ich glaubte das gestern auch schon versucht zu haben... verlegen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken 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