WinampPlugIn für RealMedia-Dateien

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

WinampPlugIn für RealMedia-Dateien

Beitrag von Deeem2031 »

Da ich den RealPlayer blöd finde hab ich mir mal gedacht ich bastel einfach ein PlugIn für Winamp damit ich auch da RealMedia-Dateien abspielen kann. Das habe ich auch soweit hinbekommen bis ich die Daten in den Dateien entpacken muss... tja, und da liegt warscheinlich auch das Prob bei den Nullsoft-Leuten, Realnetworks hat nämlich nie eine Doku dafür rausgebracht, das wusste ich aber vorher nich, sonst hät ich ja nich angefangen ;)
Ich wollt aber bevor ich aufgebe euch fragen ob es doch irgentwo einen Code entpacken der Daten gibt, also für das audio/x-pn-realaudio-Format.
Wär total nett, dann bräucht ich nämlich den doofen Realplayer nichtmehr und andere Leute wären warscheinlich auch froh über das PlugIn :)

Für alle die auch mal ein WinampPlugin machen wollen:
Ist zwar wegen dem obrigen Prob nich fertig, aber Datei-Infos können schon ausgelesen werden.

Code: Alles auswählen

; Winamp-InputPlugin by Deeém2031

#IN_VER = $100
#OUT_VER = $10

Structure Out_Module
	Version.l ; module version (OUT_VER)
	Description.s ; description of module, with version string
	id.l ; module id. each input module gets its own. non-nullsoft modules should be >= 65536. 
  
	hMainWindow.l ; winamp's main window (filled in by winamp)
	hDllInstance.l ; DLL instance handle (filled in by winamp)
  
	Config.l ; configuration dialog 
	About.l ; about dialog
  
	init.l ; called when loaded
	quit.l ; called when unloaded
  
	Open.l ; returns >=0 on success, <0 on failure
  ; NOTENOTENOTE: bufferlenms And prebufferms are ignored in most If not all output plug-ins. 
  ; ... so don't expect the max latency returned to be what you asked for.
  ; returns max latency in ms (0 For diskwriters, etc)
  ; bufferlenms And prebufferms must be in ms. 0 To use defaults. 
  ; prebufferms must be <= bufferlenms
  
  Close.l ; close the ol' output device.
  
  Write.l ; 0 on success. len == bytes To write (<= 8192 always). buf is straight audio Data. 
  ; 1 returns not able To write (yet). Non-blocking, always.
  
  CanWrite.l ; returns number of bytes possible to write at a given time. 
  ; Never will decrease unless you call write (Or Close, heh)
  
  IsPlaying.l ; non0 if output is still going or if data in buffers waiting to be
  ; written (i.e. closing While IsPlaying() returns 1 would truncate the song
    
  pause.l ; returns previous pause state
    
  setvolume.l ; volume is 0-255
  setpan.l ; pan is -128 to 128
    
  Flush.l ; flushes buffers and restarts output at time t (in ms) 
  ; (used For seeking)
      
  getoutputtime.l ; returns played time in MS
  GetWrittenTime.l ; returns time written in MS (used for synching up vis stuff)
EndStructure

Structure In_Module
  Version.l ; #IN_VER
  Description.s
  
  hMainWindow.l
  hDllInstance.l
  
  FileExtensions.l
  
  is_seekable.l
  UseOutputPlug.l
  
  Config.l ;Pointer zur Config-Proc
  About.l
  
  init.l
  quit.l
  getinfofile.l
  infobox.l
  isourfile.l
  play.l
  pause.l
  unpause.l
  ispaused.l
  stop.l
  
  getlength.l
  getoutputtime.l
  setoutputtime.l
  
  setvolume.l
  setpan.l
  
  SAVSAInit.l
	SAVSADeInit.l
  
  SAAddPCMData.l
  SAGetMode.l
  SAAdd.l
    
  VSAAddPCMData.l
  VSAGetMode.l
  VSAAdd.l
      
  VSASetInfo.l
      
  dsp_isactive.l
  dsp_dosamples.l
            
  EQSet.l
            
  setinfo.l
            
  outMod.Out_Module; filled in by winamp, optionally used :)
  
EndStructure

Structure eqData_struc
  c.b[10]
EndStructure

Global mod.In_Module, paused, ReadBuffer
Global FileID, MaxLatency
Global RMFHeaderSize,RMFHeaderObjectVersion,RMFHeaderFileVersion,RMFHeaderNumHeaders
Global MAXBitrate, AVGBitrate, duration, CurrentTitle.s

Procedure BSwap(a.l)
  !BSWAP Eax
  ProcedureReturn
EndProcedure

Procedure BSWAPw(a.l)
  !SHL Eax, 16
  !BSWAP Eax
  ProcedureReturn
EndProcedure

ProcedureCDLL config(hWndParent.l)
  MessageBox_(hWndParent, "No configuration.", "Configuration",#MB_OK)
EndProcedure

ProcedureCDLL about(hWndParent.l)
  MessageBox_(hWndParent,"RealMedia Player, by Deeém2031 (Dietmer Schölzel)","About RM Player",#MB_OK)
EndProcedure

ProcedureCDLL Init()
  ProcedureReturn 0
EndProcedure

ProcedureCDLL quit()
EndProcedure

ProcedureCDLL.l isourfile(fn.s)
  If LCase(GetExtensionPart(fn)) = "rm" Or LCase(GetExtensionPart(fn)) = "ra" Or LCase(GetExtensionPart(fn)) = "rma"
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

ProcedureCDLL.l play(fn.s)
  Protected rBuffer.l, HeaderObjVersion, HeaderBuff, HeaderBuffSize
  
  ProcedureReturn 1
  
  FileID = ReadFile(#PB_Any,fn)
  If FileID = 0
    ProcedureReturn 1
  EndIf
  
  
  ReadData(@rBuffer,4)
  If PeekS(@rBuffer,4) <> ".RMF"
    CloseFile(FileID)
    ProcedureReturn 1
  EndIf
  
  RMFHeaderSize = BSwap(ReadLong())
  RMFHeaderObjectVersion = BSWAPw(ReadWord())
  If RMFHeaderObjectVersion = 0
    RMFHeaderFileVersion = BSwap(ReadLong())
    RMFHeaderNumHeaders = BSwap(ReadLong())
  EndIf
  
  Repeat
    ReadData(@rBuffer,4)
    If PeekS(@rBuffer,4) = "PROP" ;{
      ReadLong()
      HeaderObjVersion = BSWAPw(ReadWord())
      If HeaderObjVersion = 0
        MAXBitrate = BSwap(ReadLong())
        AVGBitrate = BSwap(ReadLong())
        ReadLong();msg + "MAX_Packet_Size: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        ReadLong();msg + "AVG_Packet_Size: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        ReadLong();msg + "NUM_Packets: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        duration = BSwap(ReadLong())
        ReadLong();msg + "Preroll: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        ReadLong();msg + "Index_Offset: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        ReadLong();msg + "Data_Offset: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        ReadWord();msg + "Num_Streams: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
        ReadWord();msg + "Flags: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "CONT" ;{
      ReadLong();msg + "CONTHeaderSize: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
      HeaderObjVersion = BSWAPw(ReadWord())
      If HeaderObjVersion = 0
        HeaderBuffSize = ReadByte()
        If HeaderBuffSize
          HeaderBuff = AllocateMemory(HeaderBuffSize)
          ReadData(HeaderBuff,HeaderBuffSize)
          CurrentTitle = PeekS(HeaderBuff,HeaderBuffSize)
          FreeMemory(HeaderBuff)
        Else
          CurrentTitle = GetFilePart(fn)
        EndIf
        
        HeaderBuffSize = ReadByte()
        HeaderBuff = AllocateMemory(HeaderBuffSize)
        ReadData(HeaderBuff,HeaderBuffSize)
        ;msg + "Author: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(HeaderBuff)
        
        HeaderBuffSize = ReadByte()
        HeaderBuff = AllocateMemory(HeaderBuffSize)
        ReadData(HeaderBuff,HeaderBuffSize)
        ;msg + "Copyright: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(HeaderBuff)
        
        HeaderBuffSize = ReadByte()
        HeaderBuff = AllocateMemory(HeaderBuffSize)
        ReadData(HeaderBuff,HeaderBuffSize)
        ;msg + "Comment: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(HeaderBuff)
      EndIf ;}
    EndIf
  Until Eof(FileID)
  
  paused = 0
  If mod\outMod\Open
    ;CallCFunctionFast(mod\outMod\Open,)
  EndIf
  
  CloseFile(FileID); tmp
  ProcedureReturn 0
EndProcedure

ProcedureCDLL pause()
  paused = #True
  If mod\outMod\pause
    CallCFunctionFast(mod\outMod\pause,#True)
  EndIf
EndProcedure

ProcedureCDLL unpause()
  paused = #False
  If mod\outMod\pause
    CallCFunctionFast(mod\outMod\pause,#False)
  EndIf
EndProcedure

ProcedureCDLL.l ispaused()
  ProcedureReturn paused
EndProcedure

ProcedureCDLL stop()
  ;-
EndProcedure

ProcedureCDLL.l getlength()
  ProcedureReturn duration
EndProcedure

ProcedureCDLL.l getoutputtime()
  If mod\outMod\getoutputtime
    ProcedureReturn CallCFunctionFast(mod\outMod\getoutputtime)
  EndIf
EndProcedure

ProcedureCDLL setoutputtime(time_in_ms.l)
EndProcedure

ProcedureCDLL setvolume(volume.l)
  If mod\outMod\setvolume
    CallCFunctionFast(mod\outMod\setvolume,volume)
  EndIf
EndProcedure

ProcedureCDLL setpan(pan.l)
  If mod\outMod\setpan
    CallCFunctionFast(mod\outMod\setpan,pan)
  EndIf
EndProcedure

ProcedureCDLL infoDlg(fn.s, hwnd)
  Protected InfoFileID.l, rBuffer.l, msg.s
  Protected InfoHeaderObjVersion, InfoHeaderStreamNameSize.l, InfoHeaderStreamName, InfoHeaderMimeType, InfoHeaderMimeTypeSize, InfoHeaderType, InfoHeaderTypeSize
  Protected InfoHeaderBuff, InfoHeaderBuffSize, ChunkSize

  InfoFileID = ReadFile(#PB_Any,fn)
  If InfoFileID = 0
    ProcedureReturn
  EndIf
  
  ReadData(@rBuffer,4)
  If PeekS(@rBuffer,4) <> ".RMF"
    CloseFile(InfoFileID)
    MessageBox_(hwnd,"None RM-File!","Info "+Chr(34)+GetFilePart(fn)+Chr(34),#MB_OK)
    ProcedureReturn
  EndIf
  
  msg + "MAINHeaderSize: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
  InfoHeaderObjVersion = BSWAPw(ReadWord())
  msg + "MAINHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
  If InfoHeaderObjVersion = 0
    msg + "FileVersion: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
    msg + "NumHeaders: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
  EndIf
  
  Repeat
    ReadData(@rBuffer,4)
    If PeekS(@rBuffer,4) = "PROP" ;{
      msg + Chr(13)+Chr(10)
      msg + "PROPHeaderSize: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      msg + "PROPHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
      If InfoHeaderObjVersion = 0
        msg + "MAX_Bitrate: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "AVG_Bitrate: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "MAX_Packet_Size: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "AVG_Packet_Size: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "NUM_Packets: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Duration: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Preroll: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Index_Offset: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Data_Offset: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Num_Streams: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
        msg + "Flags: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "MDPR" ;{
      msg + Chr(13)+Chr(10)
      msg + "MDRPHeaderSize: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      msg + "MDRPHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
      If InfoHeaderObjVersion = 0
        msg + "Streamnumber: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
        msg + "MAX_Bitrate: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "AVG_Bitrate: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "MAX_Packet_Size: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "AVG_Packet_Size: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "StartTime: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "Preroll: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "Duration: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        InfoHeaderStreamNameSize = ReadByte()
        InfoHeaderStreamName = AllocateMemory(InfoHeaderStreamNameSize)
        ReadData(InfoHeaderStreamName,InfoHeaderStreamNameSize)
        msg + "StreamName: "+PeekS(InfoHeaderStreamName,InfoHeaderStreamNameSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderStreamName)
        InfoHeaderMimeTypeSize = ReadByte()
        InfoHeaderMimeType = AllocateMemory(InfoHeaderMimeTypeSize)
        ReadData(InfoHeaderMimeType,InfoHeaderMimeTypeSize)
        msg + "MimeType: "+PeekS(InfoHeaderMimeType,InfoHeaderMimeTypeSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderMimeType)
        InfoHeaderTypeSize = BSwap(ReadLong())
        If InfoHeaderTypeSize
          InfoHeaderType = AllocateMemory(InfoHeaderTypeSize)
          ReadData(InfoHeaderType,InfoHeaderTypeSize)
          msg + "TypeData: "+PeekS(InfoHeaderType,InfoHeaderTypeSize)+Chr(13)+Chr(10)
          FreeMemory(InfoHeaderType)
        EndIf
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "CONT" ;{
      msg + Chr(13)+Chr(10)
      msg + "CONTHeaderSize: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      msg + "CONTHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
      If InfoHeaderObjVersion = 0
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        msg + "Title: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderBuff)
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        msg + "Author: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderBuff)
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        msg + "Copyright: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderBuff)
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        msg + "Comment: "+PeekS(InfoHeaderBuff,InfoHeaderBuffSize)+Chr(13)+Chr(10)
        FreeMemory(InfoHeaderBuff)
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "DATA" ;{
      msg + Chr(13)+Chr(10)
      ChunkSize = BSwap(ReadLong())
      msg + "DATAChunkSize: "+Str(ChunkSize)+Chr(13)+Chr(10)
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      msg + "DATAHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
      If InfoHeaderObjVersion = 0
        msg + "Num_Packets: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
        msg + "Next_Data_Header: "+Str(BSwap(ReadLong()))+Chr(13)+Chr(10)
      EndIf
      FileSeek(Loc()+ChunkSize-(4+4+2+4+4));}
    ElseIf PeekS(@rBuffer,4) = "INDX" ;{
      msg + Chr(13)+Chr(10)
      msg + "INDXHeaderSize: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      msg + "INDXHeaderObjectVersion: "+Str(InfoHeaderObjVersion)+Chr(13)+Chr(10)
      If InfoHeaderObjVersion = 0
        msg + "Num_Records: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
        msg + "Streamnumber: "+Str(BSWAPw(ReadWord()))+Chr(13)+Chr(10)
        msg + "Next_INDX_Header: "+Str(BSWAP(ReadLong()))+Chr(13)+Chr(10)
      EndIf ;}
    EndIf
  Until Eof(InfoFileID)
  
  CloseFile(InfoFileID); tmp
  MessageBox_(hwnd,msg,"Info "+Chr(34)+GetFilePart(fn)+Chr(34),#MB_OK)
EndProcedure

ProcedureCDLL getfileinfo(filename.s, *title.STRING, *length_in_ms.LONG)
  Protected InfoFileID, rBuffer, wlength, wtitle, InfoHeaderBuff, InfoHeaderBuffSize, InfoHeaderObjVersion, ChunkSize
  InfoFileID = ReadFile(#PB_Any,filename)
  If InfoFileID = 0
    ProcedureReturn
  EndIf
  
  ReadData(@rBuffer,4)
  If PeekS(@rBuffer,4) <> ".RMF"
    CloseFile(InfoFileID)
    *title\s = "None RMF-File!"
    *length_in_ms\l = 0
    ProcedureReturn
  EndIf
  
  ReadLong()
  ReadWord()
  ReadLong()
  ReadLong()
  
  If *title = 0
    wtitle = 1
  Else
    tmp.s = GetFilePart(filename)
    CopyMemory(@tmp,*title,Len(tmp))
    wtitle = 0
  EndIf
  If *length_in_ms = 0
    wlength = 1
  Else
    wlength = 0
  EndIf
  
  Repeat
    ReadData(@rBuffer,4)
    If PeekS(@rBuffer,4) = "PROP" ;{
      ReadLong()
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      If InfoHeaderObjVersion = 0
        ReadLong()
        ReadLong()
        ReadLong()
        ReadLong()
        ReadLong()
        If *length_in_ms
          *length_in_ms\l = BSwap(ReadLong())
        Else
          ReadLong()
        EndIf
        ReadLong()
        ReadLong()
        ReadLong()
        ReadLong()
        ReadLong()
        wlength = 1
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "MDPR"
      FileSeek(Loc()+BSwap(ReadLong())-8)
    ElseIf PeekS(@rBuffer,4) = "CONT" ;{
      ReadLong()
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      If InfoHeaderObjVersion = 0
        InfoHeaderBuffSize = ReadByte()
        If InfoHeaderBuffSize
          InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
          ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
          If *title
            tmp.s = PeekS(InfoHeaderBuff,InfoHeaderBuffSize)
            CopyMemory(@tmp,*title,Len(tmp))
          EndIf
          FreeMemory(InfoHeaderBuff)
        Else
          If *title
            tmp.s = GetFilePart(filename)
            CopyMemory(@tmp,*title,Len(tmp))
          EndIf
        EndIf
        wtitle = 1
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        FreeMemory(InfoHeaderBuff)
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        FreeMemory(InfoHeaderBuff)
        
        InfoHeaderBuffSize = ReadByte()
        InfoHeaderBuff = AllocateMemory(InfoHeaderBuffSize)
        ReadData(InfoHeaderBuff,InfoHeaderBuffSize)
        FreeMemory(InfoHeaderBuff)
      EndIf ;}
    ElseIf PeekS(@rBuffer,4) = "DATA" ;{
      ChunkSize = BSwap(ReadLong())
      InfoHeaderObjVersion = BSWAPw(ReadWord())
      If InfoHeaderObjVersion = 0
        ReadLong()
        ReadLong()
      EndIf
      FileSeek(Loc()+ChunkSize-(4+4+2+4+4));}
    ElseIf PeekS(@rBuffer,4) = "INDX"
      FileSeek(Loc()+BSwap(ReadLong())-8)
    EndIf
  Until Eof(InfoFileID) Or (wtitle And wlength)
  
  CloseFile(InfoFileID)
EndProcedure

ProcedureCDLL eq_set(on.l, *eqData.eqData_struc, preamp.l)
EndProcedure

ProcedureDLL.l winampGetInModule2()
  mod\Version = #IN_VER
  mod\Description = "RM Player v0.0 (x86)"
  mod\hMainWindow = 0
  mod\hDllInstance = 0
  mod\FileExtensions = ?FileExtensions
  mod\is_seekable = 1
  mod\UseOutputPlug = 1
  mod\Config = @config()
  mod\About = @about()
  mod\init = @Init()
  mod\quit = @quit()
  mod\getinfofile = @getfileinfo()
  mod\infobox = @infoDlg()
  mod\isourfile = @isourfile()
  mod\play = @play()
  mod\pause = @pause()
  mod\unpause = @unpause()
  mod\ispaused = @ispaused()
  mod\stop = @stop()
  mod\getlength = @getlength()
  mod\getoutputtime = @getoutputtime()
  mod\setoutputtime = @setoutputtime()
  mod\setvolume = @setvolume()
  mod\setpan = @setpan()
  mod\SAVSAInit = 0
	mod\SAVSADeInit = 0
  mod\SAAddPCMData = 0
  mod\SAGetMode = 0
  mod\SAAdd = 0
  mod\VSAAddPCMData = 0
  mod\VSAGetMode = 0
  mod\VSAAdd = 0
  mod\VSASetInfo = 0
  mod\dsp_isactive = 0
  mod\dsp_dosamples = 0
  mod\EQSet = @eq_set()
  mod\setinfo = #Null
  
  ProcedureReturn @mod
EndProcedure

DataSection
FileExtensions:
Data.s "RM"
Data.s "RM Audio File (*.rm)"
Data.b 0
EndDataSection
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Tut jetzt nicht zwingend was zu sache, aber wer QuickTime und RealPlayer-Dateien in Windows-Media-Player (vorzugsweise Media Player Classic) abspielen will, sollte nach QuickTime Alternate und Real Alternate suchen.

Die beiden Player (quicktime und real) sind wohl das letzte....
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten