October 29, 2020, 01:07:43 AM

Author Topic: [bmx] Stream from Ram, File, or Net in FMod! by ninjarat [ 1+ years ago ]  (Read 1256 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Stream from Ram, File, or Net in FMod!
Author : ninjarat
Posted : 1+ years ago

Description : what teh title says!

Code :
Code: BlitzMax
  1. Import Pub.FMod
  2.  
  3. Const FMOD_SAMPLE=1
  4. Const FMOD_STREAM=2
  5.  
  6. Const TAS_PLAYMODE_ALL=True
  7. Const TAS_PLAYMODE_ONE=False
  8. Const TAS_LOOPMODE_ON =True
  9. Const TAS_LOOPMODE_OFF=False
  10.  
  11. Type TAudioRamStreamer
  12.         Field msp:Byte Ptr[]
  13.         Field msl[]
  14.         Field aChan,aStream,aTrack,aTrackCount
  15.         Field playMode,loopMode,isPlaying
  16.        
  17.         Function create:TAudioRamStreamer(sampleimgs:Byte Ptr[],samplelengths[])
  18.                 Local tracker:TAudioRamStreamer=New TAudioRamStreamer
  19.                 tracker.aChan=channel
  20.                 tracker.aTrack=0
  21.                
  22.                 tracker.playMode=TAS_PLAYMODE_ALL
  23.                 tracker.loopMode=TAS_LOOPMODE_ON
  24.                
  25.                 If Not tracker.Init(sampleimgs,samplelengths) Then
  26.                         Print "Failed to get audio samples for streaming!"
  27.                         tracker=Null
  28.                 End If
  29.                
  30.                 Return tracker
  31.         End Function
  32.        
  33.         Method Init(sampleimgs:Byte Ptr[],samplelengths[])
  34.                 If sampleimgs.length<>samplelengths.length Then
  35.                         If sampleimgs.length<samplelengths.length Then
  36.                                 Print "Audio sample image array smaller than sample length array!"
  37.                         Else
  38.                                 Print "Sample length array smaller than audio sample image array!"
  39.                         End If
  40.                         Return False
  41.                 End If
  42.                 aTrackCount=sampleimgs.length
  43.                
  44.                 msp=sampleimgs
  45.                 msl=samplelengths
  46.                
  47.                 Return True
  48.         End Method
  49.        
  50.         Method Play()
  51.                 If isPlaying Then Close
  52.                 isPlaying=True
  53.                 aStream=..
  54.                  fsound_stream_open(msp[aTrack],FSOUND_HW2D|FSOUND_LOADMEMORY,..
  55.                   0,msl[aTrack])
  56.                 aChan=fsound_stream_play(FSOUND_FREE,aStream)
  57.         End Method
  58.        
  59.         Method Update()
  60.                 If isPlaying Then
  61.                         Select loopMode
  62.                         Case TAS_LOOPMODE_ON
  63.                                 Select playMode
  64.                                 Case TAS_PLAYMODE_ALL
  65.                                         If Not fsound_isplaying(aChan) Then
  66.                                                 If aTrack=aTrackCount-1 Then SetTrack(0) Else SkipFwd()
  67.                                         End If
  68.                                 Case TAS_PLAYMODE_ONE
  69.                                         If Not fsound_isplaying(aChan) Then
  70.                                                 Play
  71.                                         End If
  72.                                 End Select
  73.                         Case TAS_LOOPMODE_OFF
  74.                                 Select playMode
  75.                                 Case TAS_PLAYMODE_ALL
  76.                                         If Not fsound_isplaying(aChan) Then
  77.                                                 If aTrack=aTrackCount-1 Then Close() Else SkipFwd()
  78.                                         End If
  79.                                 Case TAS_PLAYMODE_ONE
  80.                                         If Not fsound_isplaying(aChan) Then
  81.                                                 Close
  82.                                         End If
  83.                                 End Select
  84.                         End Select
  85.                 End If
  86.         End Method
  87.        
  88.         Method Stop()
  89.                 isPlaying=False
  90.                 Return fsound_stream_stop(aStream)
  91.         End Method
  92.        
  93.         Method Close()
  94.                 Stop
  95.                 Return fsound_stream_close(aStream)
  96.         End Method
  97.        
  98.         Method SkipFwd()
  99.                 aTrack:+1
  100.                 If aTrack>aTrackCount-1 Then aTrack=0
  101.                 If aTrack<0 Then aTrack=aTrackCount-1
  102.                 Play
  103.         End Method
  104.        
  105.         Method SkipBack()
  106.                 If aTrack>aTrackCount-1 Then aTrack=0
  107.                 If aTrack<0 Then aTrack=aTrackCount-1
  108.                 Play
  109.         End Method
  110.        
  111.         Method SetTrack(track)
  112.                 If aTrack<>track Then
  113.                         aTrack=track
  114.                         If aTrack>aTrackCount-1 Then aTrack=aTrackCount-1
  115.                         If aTrack<0 Then aTrack=0
  116.                         Play
  117.                 End If
  118.         End Method
  119.        
  120.         Method GetTrack()
  121.                 Return aTrack
  122.         End Method
  123.        
  124.         Method GetCurrTrackLengthInSize()
  125.                 Return fsound_stream_getlength(aStream)
  126.         End Method
  127.        
  128.         Method GetCurrTrackPosInSize()
  129.                 Return fsound_stream_getposition(aStream)
  130.         End Method
  131.        
  132.         Method GetCurrTrackLengthInTime()
  133.                 Return fsound_stream_getlengthms(aStream)
  134.         End Method
  135.        
  136.         Method GetCurrTrackPosInTime()
  137.                 Return fsound_stream_gettime(aStream)
  138.         End Method
  139.        
  140.         Method GetTrackID3Tag$()
  141.                 Return FModGetSongName(aStream,FMOD_STREAM)
  142.         End Method
  143.        
  144.         Method Free()
  145.                 Close
  146.                 msp=Null;msl=Null
  147.                 aChan=Null
  148.                 aStream=Null
  149.                 aTrack=Null
  150.                 aTrackCount=Null
  151.                 playMode=Null
  152.                 loopMode=Null
  153.         End Method
  154. End Type
  155.  
  156. Type TAudioFileStreamer
  157.         Field msp:Byte Ptr[]
  158.         Field aChan,aStream,aTrack,aTrackCount
  159.         Field playMode,loopMode,isPlaying
  160.        
  161.         Function create:TAudioFileStreamer(names$[])
  162.                 Local tracker:TAudioFileStreamer=New TAudioFileStreamer
  163.                 tracker.aChan=channel
  164.                 tracker.aTrack=0
  165.                
  166.                 tracker.playMode=TAS_PLAYMODE_ALL
  167.                 tracker.loopMode=TAS_LOOPMODE_ON
  168.                
  169.                 If Not tracker.Init(names) Then
  170.                         Print "Failed to get audio samples for streaming!"
  171.                         tracker=Null
  172.                 End If
  173.                
  174.                 Return tracker
  175.         End Function
  176.        
  177.         Method Init(names$[])
  178.                 aTrackCount=names.length
  179.                 For tk=0 To aTrackCount-1
  180.                         msp[tk]=names[tk].ToCString()
  181.                 Next
  182.                
  183.                 Return True
  184.         End Method
  185.        
  186.         Method Play()
  187.                 If isPlaying Then Close
  188.                 isPlaying=True
  189.                 aStream=..
  190.                  fsound_stream_open(msp[aTrack],FSOUND_HW2D,..
  191.                   0,0)
  192.                 aChan=fsound_stream_play(FSOUND_FREE,aStream)
  193.         End Method
  194.        
  195.         Method Update()
  196.                 If isPlaying Then
  197.                         Select loopMode
  198.                         Case TAS_LOOPMODE_ON
  199.                                 Select playMode
  200.                                 Case TAS_PLAYMODE_ALL
  201.                                         If Not fsound_isplaying(aChan) Then
  202.                                                 If aTrack=aTrackCount-1 Then SetTrack(0) Else SkipFwd()
  203.                                         End If
  204.                                 Case TAS_PLAYMODE_ONE
  205.                                         If Not fsound_isplaying(aChan) Then
  206.                                                 Play
  207.                                         End If
  208.                                 End Select
  209.                         Case TAS_LOOPMODE_OFF
  210.                                 Select playMode
  211.                                 Case TAS_PLAYMODE_ALL
  212.                                         If Not fsound_isplaying(aChan) Then
  213.                                                 If aTrack=aTrackCount-1 Then Close() Else SkipFwd()
  214.                                         End If
  215.                                 Case TAS_PLAYMODE_ONE
  216.                                         If Not fsound_isplaying(aChan) Then
  217.                                                 Close
  218.                                         End If
  219.                                 End Select
  220.                         End Select
  221.                 End If
  222.         End Method
  223.        
  224.         Method Stop()
  225.                 isPlaying=False
  226.                 Return fsound_stream_stop(aStream)
  227.         End Method
  228.        
  229.         Method Close()
  230.                 Stop
  231.                 Return fsound_stream_close(aStream)
  232.         End Method
  233.        
  234.         Method SkipFwd()
  235.                 aTrack:+1
  236.                 If aTrack>aTrackCount-1 Then aTrack=0
  237.                 If aTrack<0 Then aTrack=aTrackCount-1
  238.                 Play
  239.         End Method
  240.        
  241.         Method SkipBack()
  242.                 If aTrack>aTrackCount-1 Then aTrack=0
  243.                 If aTrack<0 Then aTrack=aTrackCount-1
  244.                 Play
  245.         End Method
  246.        
  247.         Method SetTrack(track)
  248.                 If aTrack<>track Then
  249.                         aTrack=track
  250.                         If aTrack>aTrackCount-1 Then aTrack=aTrackCount-1
  251.                         If aTrack<0 Then aTrack=0
  252.                         Play
  253.                 End If
  254.         End Method
  255.        
  256.         Method GetTrack()
  257.                 Return aTrack
  258.         End Method
  259.        
  260.         Method GetCurrTrackLengthInSize()
  261.                 Return fsound_stream_getlength(aStream)
  262.         End Method
  263.        
  264.         Method GetCurrTrackPosInSize()
  265.                 Return fsound_stream_getposition(aStream)
  266.         End Method
  267.        
  268.         Method GetCurrTrackLengthInTime()
  269.                 Return fsound_stream_getlengthms(aStream)
  270.         End Method
  271.        
  272.         Method GetCurrTrackPosInTime()
  273.                 Return fsound_stream_gettime(aStream)
  274.         End Method
  275.        
  276.         Method GetTrackID3Tag$()
  277.                 Return FModGetSongName(aStream,FMOD_STREAM)
  278.         End Method
  279.        
  280.         Method Free()
  281.                 Close
  282.                 msp=Null;msl=Null
  283.                 aChan=Null
  284.                 aStream=Null
  285.                 aTrack=Null
  286.                 aTrackCount=Null
  287.                 playMode=Null
  288.                 loopMode=Null
  289.         End Method
  290. End Type
  291.  
  292. Function FModGetSongName$(stream_or_sptr,mode=FMOD_SAMPLE)
  293.         If mode=FMOD_STREAM Then
  294.                 sptr=fsound_stream_getsample(stream_or_sptr)
  295.         Else If mode=FMOD_SAMPLE
  296.                 sptr=stream_or_sptr
  297.         Else
  298.                 Return ""
  299.         End If
  300.         Return FmCStr(fsound_sample_getname(sptr))
  301. End Function


Comments :


Dabhand(Posted 1+ years ago)

 Cool, would be bloody smashing... If it wasnt for the daft FMod license price!!! :(Dabz


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal