FMOD

Audio library supporting just about any format.

Website: https://www.fmod.com/core
Platforms supported: Win32, Linux
Headers to include: fmod.bi
Header version: 3.75
Examples: in examples/sound/FMOD/

Example
	#include Once "fmod.bi"

	Const SOUND_FILE = "test.mod"

	If (FSOUND_GetVersion() < FMOD_VERSION) Then
	   Print "FMOD version mismatch"
	   End 1
	End If

	If (FSOUND_Init(44100, 32, 0) = 0) Then
	   Print "Could not initialize FMOD"
	   End 1
	End If

	Dim As FMUSIC_MODULE Ptr song = FMUSIC_LoadSong(SOUND_FILE)
	If (song = 0) Then
	   Print "FMOD could not load '" & SOUND_FILE & "'"
	   FSOUND_Close()
	   End 1
	End If

	FMUSIC_PlaySong(song)

	Print "Sound playing; waiting for keypress to stop and exit..."
	Sleep

	FMUSIC_FreeSong(song)
	FSOUND_Close()

	'' mp3 player based on FMOD

	#include Once "fmod.bi"

	Const SOUND_FILE = "test.mp3"

	Sub print_all_tags(ByVal stream As FSOUND_STREAM Ptr)
	   Dim As Integer count = 0
	   FSOUND_Stream_GetNumTagFields(stream, @count)

	   For i As Integer = 0 To (count - 1)
	      Dim As Integer tagtype, taglen
	      Dim As ZString Ptr tagname, tagvalue
	      FSOUND_Stream_GetTagField(stream, i, @tagtype, @tagname, @tagvalue, @taglen)
	      Print Left(*tagname, taglen)
	   Next
	End Sub

	Function get_tag _
	   ( _
	      ByVal stream As FSOUND_STREAM Ptr, _
	      ByVal tagv1 As ZString Ptr, _
	      ByVal tagv2 As ZString Ptr _
	   ) As String

	   Dim tagname As ZString Ptr, taglen As Integer

	   FSOUND_Stream_FindTagField(stream, FSOUND_TAGFIELD_ID3V1, tagv1, @tagname, @taglen)
	   If (taglen = 0) Then 
	      FSOUND_Stream_FindTagField(stream, FSOUND_TAGFIELD_ID3V2, tagv2, @tagname, @taglen)
	   End If

	   Return Left(*tagname, taglen)
	End Function

	   If (FSOUND_GetVersion < FMOD_VERSION) Then
	      Print "FMOD version " + Str(FMOD_VERSION) + " or greater required!"
	      End 1
	   End If 

	   If (FSOUND_Init(44100, 4, 0) = 0) Then
	      Print "Could not initialize FMOD"
	      End 1
	   End If

	   FSOUND_Stream_SetBufferSize(50)

	   Dim As FSOUND_STREAM Ptr stream = FSOUND_Stream_Open(SOUND_FILE, FSOUND_MPEGACCURATE, 0, 0)
	   If (stream = 0) Then 
	      Print "FMOD could not load '" & SOUND_FILE & "'"
	      FSOUND_Close()
	      End 1
	   End If

	   '' Read out mp3 tags to show some meta information
	   Print "Title:", get_tag(stream, "TITLE", "TIT2")
	   Print "Album:", get_tag(stream, "ALBUM", "TALB")
	   Print "Artist:", get_tag(stream, "ARTIST", "TPE1")
	   ''print_all_tags(stream)

	   Print "Playing mp3, press a key to exit..."
	   FSOUND_Stream_Play(FSOUND_FREE, stream)

	   While (Inkey() = "")
	      If (FSOUND_Stream_GetPosition(stream) >= FSOUND_Stream_GetLength(stream)) Then
	         Exit While
	      End If
	      Sleep 50, 1
	   Wend
	   
	   FSOUND_Stream_Stop(stream)
	   FSOUND_Stream_Close(stream)
	   FSOUND_Close()

