| 
				
					|  | 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 |  
		| Build0815 
 
  
 Anmeldungsdatum: 30.09.2006
 Beiträge: 51
 
 
 | 
			
				|  Verfasst am: 29.07.2007, 12:58    Titel: load sample from memory - mit fmod |   |  
				| 
 |  
				| 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.
  (Ein dezenter Hinweis darauf, wäre dann bitte angebracht.    ) 
 PPS: Wenn ich was brauchbares dazu in google gefunden hätte, hätte ich das hier nicht geschrieben
  
 Zuletzt bearbeitet von Build0815 am 30.07.2007, 16:02, insgesamt einmal bearbeitet
 |  |  
		| Nach oben |  |  
		|  |  
		| Eternal_pain 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1783
 Wohnort: BW/KA
 
 | 
			
				|  Verfasst am: 29.07.2007, 14:39    Titel: |   |  
				| 
 |  
				| 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
  _________________
 
  |  |  
		| Nach oben |  |  
		|  |  
		| volta 
 
 
 Anmeldungsdatum: 04.05.2005
 Beiträge: 1876
 Wohnort: D59192
 
 | 
			
				|  Verfasst am: 29.07.2007, 15:19    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Eternal_pain 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1783
 Wohnort: BW/KA
 
 | 
			
				|  Verfasst am: 29.07.2007, 15:33    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Build0815 
 
  
 Anmeldungsdatum: 30.09.2006
 Beiträge: 51
 
 
 | 
			
				|  Verfasst am: 29.07.2007, 15:39    Titel: |   |  
				| 
 |  
				| @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 |  |  
		|  |  
		| volta 
 
 
 Anmeldungsdatum: 04.05.2005
 Beiträge: 1876
 Wohnort: D59192
 
 | 
			
				|  Verfasst am: 29.07.2007, 16:24    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Build0815 
 
  
 Anmeldungsdatum: 30.09.2006
 Beiträge: 51
 
 
 | 
			
				|  Verfasst am: 30.07.2007, 15:58    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Eternal_pain 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1783
 Wohnort: BW/KA
 
 | 
			
				|  Verfasst am: 30.07.2007, 16:15    Titel: |   |  
				| 
 |  
				| funktioniert super   auch wenn ich glaubte das gestern auch schon versucht zu haben...
  _________________
 
  |  |  
		| 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.
 
 |  |