rust-sdl2를 사용하여 wasm을 생성 할 때 음악 파일 관련 tips
3782 단어 EmscriptenWebAssemblySDL2Rust
tl;dr;
emscripten-ports의 sdl2 문제로 음악 파일을 로드할 수 없음
소개
mac상의 환경을 파괴했기 때문에 docker상에 재구축하는 날개가 되어 있는 r-chaser53입니다. 솔직히 거의 진행되지 않았기 때문에 rust-sdl2 를 사용한 앱을 wasm으로 변환했을 때의 tips를 쓰려고 합니다(※1).
억지로 음악파일을 불러오기
'rust-sdl2로 임의의 path의 음악 파일을 로드하고 싶은 경우, 다음과 같이 됩니다.
sdl2::mixer::Music::from_file(path).unwrap();
본래라면 변수 path로부터 메타데이터를 생성해 SDL.rwops라고 하는 오브젝트에 격납하는 것 같습니다만, 중요한 SDL.rwops 오브젝트는 [null]이라고 최초로 선언했을 때 그대로입니다. 값이 대입되어 있지 않습니다(※2). 그대로 실행하면 null의 rwops 오브젝트의 filename을 참조하려고 해 처리가 진행되지 않습니다. 다음과 같은 해킹으로 움직일 수 있었지만 솔직히 미묘한 곳입니다. 원래 파일을 읽어들이는 것 자체에 문제가 있을까 생각했습니다만, 맵을 읽게 하는 처리 자체는 문제 없게 움직이고 있습니다. 아마도 문제가 없을 것입니다.
Module['preRun'] = function () {
FS.createPreloadedFile(
'/',
'filepath',
'/filepath',
true, false);
SDL.rwops = [{ filename: 'filepath'}];
}
미리 읽어 보자
rust-sdl2는 다음과 같이 컴파일시에 음악 데이터를 받아 버리는 method도 제공하고 있습니다.
sdl2::mixer::Music::from_static_bytes(include_bytes!("filepath"));
이쪽은 문제없이 읽어 주는 것 같습니다. 컴파일 후에 파일을 지정할 수 없고, 음악 파일만큼 파일이 커져 버리는 것도 좋지 않습니다. 그러나 여러 음악 파일을 읽을 수 있다면 위의 해킹은 매우 유지할 수 없을 것입니다. 포기하고 이쪽을 사용하는 것이 타당한 것이 아닐까요.
emscripten과 rust와 c, c++ 바인딩
진척 안돼입니다. 리포지토리는 이입니다.
「러스트로 팩맨풍의 게임을 만들어 보았다」의 gif와 비교하면 알지만 원이 아니고 구형으로 되어 있습니다. 이유로는 sdl2-gfx라는 원 등을 그려주는 라이브러리를 emscripten이 지원하지 않기 때문입니다. c나 c++ 라이브러리를 사용한 rust 앱에서 wasm을 만들 때 대상 c나 c++ 라이브러리가 있는지 emscripten ports를 참조하지만 이번에 사용하고 싶은 sdl2-gfx가 없습니다. 자력으로 sdl2-gfx를 wasm상에서 움직일 수 있도록 여러가지 조사하고 있습니다만, 필요한 지식이 많이 언제까지 걸릴까 하는 상황입니다. 이 근처에 대해서는 "러스트에서 wasm을 생성해 본 이야기" 근처를 봐 주시면 기쁩니다.
선택지의 하나로서 emscripten을 사용하지 않는 「wasm32-unknown-unknown」도 생각했습니다만, c나 c++의 바인딩을 고려해 주지 않는 것 같습니다(※3). 개발을 할 때 c나 c++의 자산을 사용하고 싶은 경우는 적지 않다고 생각됩니다. 약간 emscripten에서 도망치고 싶은 기분도 있습니다만, 현재 wasm을 작성하려고 하는 한 emscripten에서는 도망갈 수 없는 것일까라는 것이 개인의 감상입니다.
비고
※1 2017/12/17 rust-sdl2 version 0.31 현재
※2 소스를 쫓아 보면 「throw 'Mix_QuerySpec: TODO'」라든가 써 있어 「그런가…」라고 됩니다
※3 조사 부족으로 설정이나 작성 방법에 따라서는 「wasm32-unknown-unknown」에서도 c, c++ 바인딩의 wasm을 생성할 수 있으면 좋겠다고 솔직히 생각하고 있습니다
Reference
이 문제에 관하여(rust-sdl2를 사용하여 wasm을 생성 할 때 음악 파일 관련 tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rchaser53/items/ac63fd5259543b2f437c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
'rust-sdl2로 임의의 path의 음악 파일을 로드하고 싶은 경우, 다음과 같이 됩니다.
sdl2::mixer::Music::from_file(path).unwrap();
본래라면 변수 path로부터 메타데이터를 생성해 SDL.rwops라고 하는 오브젝트에 격납하는 것 같습니다만, 중요한 SDL.rwops 오브젝트는 [null]이라고 최초로 선언했을 때 그대로입니다. 값이 대입되어 있지 않습니다(※2). 그대로 실행하면 null의 rwops 오브젝트의 filename을 참조하려고 해 처리가 진행되지 않습니다. 다음과 같은 해킹으로 움직일 수 있었지만 솔직히 미묘한 곳입니다. 원래 파일을 읽어들이는 것 자체에 문제가 있을까 생각했습니다만, 맵을 읽게 하는 처리 자체는 문제 없게 움직이고 있습니다. 아마도 문제가 없을 것입니다.
Module['preRun'] = function () {
FS.createPreloadedFile(
'/',
'filepath',
'/filepath',
true, false);
SDL.rwops = [{ filename: 'filepath'}];
}
미리 읽어 보자
rust-sdl2는 다음과 같이 컴파일시에 음악 데이터를 받아 버리는 method도 제공하고 있습니다.
sdl2::mixer::Music::from_static_bytes(include_bytes!("filepath"));
이쪽은 문제없이 읽어 주는 것 같습니다. 컴파일 후에 파일을 지정할 수 없고, 음악 파일만큼 파일이 커져 버리는 것도 좋지 않습니다. 그러나 여러 음악 파일을 읽을 수 있다면 위의 해킹은 매우 유지할 수 없을 것입니다. 포기하고 이쪽을 사용하는 것이 타당한 것이 아닐까요.
emscripten과 rust와 c, c++ 바인딩
진척 안돼입니다. 리포지토리는 이입니다.
「러스트로 팩맨풍의 게임을 만들어 보았다」의 gif와 비교하면 알지만 원이 아니고 구형으로 되어 있습니다. 이유로는 sdl2-gfx라는 원 등을 그려주는 라이브러리를 emscripten이 지원하지 않기 때문입니다. c나 c++ 라이브러리를 사용한 rust 앱에서 wasm을 만들 때 대상 c나 c++ 라이브러리가 있는지 emscripten ports를 참조하지만 이번에 사용하고 싶은 sdl2-gfx가 없습니다. 자력으로 sdl2-gfx를 wasm상에서 움직일 수 있도록 여러가지 조사하고 있습니다만, 필요한 지식이 많이 언제까지 걸릴까 하는 상황입니다. 이 근처에 대해서는 "러스트에서 wasm을 생성해 본 이야기" 근처를 봐 주시면 기쁩니다.
선택지의 하나로서 emscripten을 사용하지 않는 「wasm32-unknown-unknown」도 생각했습니다만, c나 c++의 바인딩을 고려해 주지 않는 것 같습니다(※3). 개발을 할 때 c나 c++의 자산을 사용하고 싶은 경우는 적지 않다고 생각됩니다. 약간 emscripten에서 도망치고 싶은 기분도 있습니다만, 현재 wasm을 작성하려고 하는 한 emscripten에서는 도망갈 수 없는 것일까라는 것이 개인의 감상입니다.
비고
※1 2017/12/17 rust-sdl2 version 0.31 현재
※2 소스를 쫓아 보면 「throw 'Mix_QuerySpec: TODO'」라든가 써 있어 「그런가…」라고 됩니다
※3 조사 부족으로 설정이나 작성 방법에 따라서는 「wasm32-unknown-unknown」에서도 c, c++ 바인딩의 wasm을 생성할 수 있으면 좋겠다고 솔직히 생각하고 있습니다
Reference
이 문제에 관하여(rust-sdl2를 사용하여 wasm을 생성 할 때 음악 파일 관련 tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rchaser53/items/ac63fd5259543b2f437c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sdl2::mixer::Music::from_static_bytes(include_bytes!("filepath"));
진척 안돼입니다. 리포지토리는 이입니다.
「러스트로 팩맨풍의 게임을 만들어 보았다」의 gif와 비교하면 알지만 원이 아니고 구형으로 되어 있습니다. 이유로는 sdl2-gfx라는 원 등을 그려주는 라이브러리를 emscripten이 지원하지 않기 때문입니다. c나 c++ 라이브러리를 사용한 rust 앱에서 wasm을 만들 때 대상 c나 c++ 라이브러리가 있는지 emscripten ports를 참조하지만 이번에 사용하고 싶은 sdl2-gfx가 없습니다. 자력으로 sdl2-gfx를 wasm상에서 움직일 수 있도록 여러가지 조사하고 있습니다만, 필요한 지식이 많이 언제까지 걸릴까 하는 상황입니다. 이 근처에 대해서는 "러스트에서 wasm을 생성해 본 이야기" 근처를 봐 주시면 기쁩니다.
선택지의 하나로서 emscripten을 사용하지 않는 「wasm32-unknown-unknown」도 생각했습니다만, c나 c++의 바인딩을 고려해 주지 않는 것 같습니다(※3). 개발을 할 때 c나 c++의 자산을 사용하고 싶은 경우는 적지 않다고 생각됩니다. 약간 emscripten에서 도망치고 싶은 기분도 있습니다만, 현재 wasm을 작성하려고 하는 한 emscripten에서는 도망갈 수 없는 것일까라는 것이 개인의 감상입니다.
비고
※1 2017/12/17 rust-sdl2 version 0.31 현재
※2 소스를 쫓아 보면 「throw 'Mix_QuerySpec: TODO'」라든가 써 있어 「그런가…」라고 됩니다
※3 조사 부족으로 설정이나 작성 방법에 따라서는 「wasm32-unknown-unknown」에서도 c, c++ 바인딩의 wasm을 생성할 수 있으면 좋겠다고 솔직히 생각하고 있습니다
Reference
이 문제에 관하여(rust-sdl2를 사용하여 wasm을 생성 할 때 음악 파일 관련 tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rchaser53/items/ac63fd5259543b2f437c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(rust-sdl2를 사용하여 wasm을 생성 할 때 음악 파일 관련 tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rchaser53/items/ac63fd5259543b2f437c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)