LOOPSTART・LOOPLENGTHタグを取得し、実際にループ再生させるサンプルを作ってみたのでどうぞ。
ループ再生にovplayを使っているので、下記ページからダウンロードし、展開して中にあるovplay.asとovplay.dllをサンプルと一緒に置いて実行してください。
https://web.archive.org/web/20181105130509/http://www.geocities.jp/anachronism128/plugin.html
// oggファイルからLOOPSTART・LOOPLENGTHタグを取得するモジュール
#module get_ogg_loop_tag
#deffunc GetOggLoopTag str ogg_file_path, var loop_start_var, var loop_length_var
// oggファイルを読み込む
exist ogg_file_path
if strsize==-1 : return
sdim file, strsize
bload ogg_file_path, file, strsize
buf_tag = ""
buf_num = ""
loop_start = ""
loop_length = ""
// とりあえず先頭32KBまでを探す
find_length = strsize
if find_length > 32000 : find_length = 32000
repeat find_length
if peek(file,cnt) == 76 { // まずタグの先頭文字である、Lを探す
// Lがあった場合、それがタグかを判定
memcpy buf_tag, file, 10, , cnt
if buf_tag == "LOOPSTART=" {
if loop_start == "" {
// タグの後にある数値を抽出
index = cnt+10
repeat
buf_num = peek(file,index)
if buf_num >= 48 && buf_num <= 57 { // 0〜9の文字コード
loop_start += str(buf_num - 48)
}else{
break
}
index ++
loop
if loop_start!="" && loop_length!="" : break // 両方のタグを取得できれば中断
}
}
memcpy buf_tag, file, 11, , cnt
if buf_tag == "LOOPLENGTH=" {
if loop_length == "" {
index = cnt+11
repeat
buf_num = peek(file,index)
if buf_num >= 48 && buf_num <= 57 {
loop_length += str(buf_num - 48)
}else{
break
}
index ++
loop
if loop_start!="" && loop_length!="" : break
}
}
}
loop
loop_start_var = int(loop_start)
loop_length_var = int(loop_length)
return
#global
// oggファイル選択
dialog "ogg", 16, "oggファイル"
if stat==0 : end
filepath = refstr
// ループタグ取得
dim loop_start
dim loop_length
GetOggLoopTag filepath, loop_start, loop_length
mes "LOOPSTART :"+loop_start
mes "LOOPLENGTH:"+loop_length
// 再生
#include "ovplay.as"
ov_init 44100, 2, 16, 1
ov_load filepath, 0, GF_BGM
ov_bloop 0, loop_start, loop_start, loop_start+loop_length, -1