Lispbuilder-sdlで音楽を鳴らしたいのですが、"BABEL-ENCODINGS:INVALID-UTF8-STARTER-BYTE"というエラーがでて実行できません。
現在、以下のPDFを参考にゲームを作っております。
http://www.usamimi.info/~ide/programe/stg_doc/stg-commonlisp.pdf
上記PDFではサウンド周りのことは自分で調べて実装するように記載されているため、ひとまずlispbuilder-sdl-mixer-examplesを実行して動作を確認しようと思ったのですが、以下のようなエラーがでて上手く実行されません。
$ sbcl --load mixer.lisp
This is SBCL 1.3.10, an implementation of ANSI Common Lisp.
More information about SBCL is available at http://www.sbcl.org/.※長くなるため、正常時でもでてくる部分は省略します。
~~省略~~
※quicklispのログも一部省略します。
To load "cffi":
To load "alexandria":
To load "babel":
To load "cl-autowrap":
To load "cl-ppcre":
To load "trivial-garbage":
To load "cl-opengl":
To load "lispbuilder-sdl":
To load "lispbuilder-sdl-mixer":
To load "lispbuilder-sdl-mixer-examples":While evaluating the form starting at line 43, column 0
of #P"C:/cygwin64/home/■■■■■/work/SDL/mixer.lisp":debugger invoked on a BABEL-ENCODINGS:INVALID-UTF8-STARTER-BYTE in thread
:
Illegal :UTF-8 character starting at position 26.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry EVAL of current toplevel form.
1: [CONTINUE] Ignore error and continue loading file >"C:\cygwin64\home\■■■■■\work\SDL\mixer.lisp".
2: [ABORT ] Abort loading file >"C:\cygwin64\home\■■■■\work\SDL\mixer.lisp".
3: Ignore runtime option --load "mixer.lisp".
4: Skip rest of --eval and --load options.
5: Skip to toplevel READ/EVAL/PRINT loop.
6: [EXIT ] Exit SBCL (calling #'EXIT, killing the process).((LABELS BABEL-ENCODINGS::UTF-8-DECODER :IN >"C:/cygwin64/home/■■■■■/work/SDL/./quicklisp/dists/quicklisp/software/cffi_0.>17.1/src/strings.lisp") #)
コードは以下の内容となっています。
mixer.lisp
; setting encode
(setf sb-impl::*default-external-format* :utf-8)
(setf sb-alien::*default-c-string-external-format* :utf-8)
; quicklisp initialize
(let ((quicklisp-init "./quicklisp/setup.lisp"))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(ql:quickload :cffi)
(mapcar #'(lambda (path)
(pushnew path cffi:*foreign-library-directories*
:test #'equal))
'("./FrameWorks/"))
(ql:quickload :alexandria)
(ql:quickload :babel)
(ql:quickload :cl-autowrap)
(ql:quickload :cl-ppcre)
(ql:quickload :trivial-garbage)
(ql:quickload :cl-opengl)
(ql:quickload :lispbuilder-sdl)
(ql:quickload :lispbuilder-sdl-mixer)
(defun mixer-test ()
(sdl:with-init (sdl:sdl-init-video sdl:sdl-init-audio)
(sdl:window 50 10)
(sdl-mixer:OPEN-AUDIO)
(let ((music (sdl-mixer:load-music "konjaku.mp3")))
(sdl-mixer:play-music music :loop t)
(sdl:with-events ()
(:quit-event ()
(sdl-mixer:Halt-Music)
(sdl-mixer:free music)
(sdl-mixer:close-audio)
t)
(:idle () (sdl:update-display))))))
;(mixer-test)
(ql:quickload :lispbuilder-sdl-mixer-examples)
(sdl-mixer-examples:mixer)
(quit)
ファイル構成は以下です。
work/SDL
|-Frameworks
|-SDL.dll
|-SDL_image.dll
|-SDL_mixer.dll
|-quicklisp
|-※書ききれないため省略
|-konjaku.mp3
|-mixer.lisp
エンコード関係で不正なコードになっているようですが、どこが不正なのかわからず困っております。
前処理あたりに問題があるのでしょうか?(コールする前に必須の処理がある?)
なお、mixer-test関数(ネットから拾ってきたコードそのままです)に関しても同様のエラーがでます。
mixer-testのprintデバッグでは
(let ((music (sdl-mixer:load-music "konjaku.mp3")))
あたりに問題があるようでした。
原因がわからず困っております。どのように解決すればよろしいでしょうか。
--追記--
"konjaku.mp3"ですが、Mp3tagというソフトで調べたところ"UTF-8"となっていました。念のため、UTF-8で書き込みしたものを別に用意して使用してみましたが、同じエラーになりました。
ログ中の伏字■■■■■についてですが、英字のみしか使用しておりません。
使用しているOSの情報は以下です。
Windows 10 Home 64Bit
文字コードがUTF-8になっていないことが原因とのことでしたので、以下のことを実行してみましたが、同じエラーがでてくるだけでした。
$nkf -w --overwrite mixer.lisp
$nkf -guess mixer.lisp
ASCII
$sbcl --load mixer.lisp
While evaluating the form starting at line 18, column 0
of #P"C:/cygwin64/home/■■■■■/work/SDL/mixer.lisp":debugger invoked on a BABEL-ENCODINGS:INVALID-UTF8-STARTER-BYTE in thread
:
Illegal :UTF-8 character starting at position 26.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry EVAL of current toplevel form.
1: [CONTINUE] Ignore error and continue loading file "C:\cygwin64\home\■■■■■\work\SDL\mixer.lisp".
2: [ABORT ] Abort loading file "C:\cygwin64\home\■■■■■\work\SDL\mixer.lisp".
3: Ignore runtime option --load "mixer.lisp".
4: Skip rest of --eval and --load options.
5: Skip to toplevel READ/EVAL/PRINT loop.
6: [EXIT ] Exit SBCL (calling #'EXIT, killing the process).((LABELS BABEL-ENCODINGS::UTF-8-DECODER :IN "C:/cygwin64/home/■■■■■/work/SDL/./quicklisp/dists/quicklisp/software/cffi_0.17.1/src/strings.lisp") #)
また、REPL上で"quickload"、":cffi"、":lispbuilder-sdl-mixer"を読み込み、続いて以下のコードを実行してみましたが、同じエラーがでるだけでした。
(sdl-mixer:load-music
(merge-pathnames
"examples/music.mp3"
(asdf:system-source-directory :lispbuilder-sdl-mixer)))
lispbuilder-sdl-mixerのexamplesでさえ実行できないとなると、もっと根本的なところで問題があるのでしょうか?(皆目見当も付きませんが、、、)