トップページ > 記事閲覧
Android:サウンドの読み込み速度
名前:ギウ 日時: 2019/02/14 21:39

お世話になっております。 スマホ版でのサウンド(ogg)の読み込みに時間がかかる為、 スレッド化したいのですが、以下の関数もスレッドでの使用は不可でしょうか。 ============ FileRead_read SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS); LoadSoundMemByMemImage ChangeVolumeSoundMem ============ ※メインのスレッドでは、普通に描画したり音を鳴らしたりしてます。もちろん読み込み中の音は使用しません。 因みに、7KB〜30KBくらいのoggを60個読み込むのに、3秒くらいかかってます。(AQUOSのSHV40) スレッド化が不可の場合は、読み込みを分散するなどで対応しようと思ってます。 または他に良い方法がありましたら教えてください。
メンテ

Page: 1 |

Re: Android:サウンドの読み込み速度 ( No.1 )
名前:管理人 日時:2019/02/15 23:50

> スマホ版でのサウンド(ogg)の読み込みに時間がかかる為、 > スレッド化したいのですが、以下の関数もスレッドでの使用は不可でしょうか。 LoadSoundMem を使用するスレッドは一つで、且つ読み込んでいる間は別スレッドでの LoadSoundMem や DeleteSound は一切行わないようにすれば大丈夫かもしれません ただ、その場合読み込みを行うスレッドは一つなのは変わらないので、読み込みに 掛かる時間は変わりませんが… 読み込みに掛かる時間自体を短くしたい場合はやはり ogg ではなく wav にするのが 手っ取り早いのですが、容量は抑えたいということでしょうか?
メンテ
Re: Android:サウンドの読み込み速度 ( No.2 )
名前:yumetodo 日時:2019/02/16 02:08

便乗質問させてください。 このサウンド周りの関数群がスレッドセーフにならない理由って主に何に起因しているんでしょうか? XAudioかなにかの制約でしょうか? たしかSDL2だとスレッドセーフに読み込みができるのでDxLibができない理由が前々から気になっていたのですが・・・。
メンテ
Re: Android:サウンドの読み込み速度 ( No.3 )
名前:ギウ 日時:2019/02/16 11:18

>管理人様 >LoadSoundMem や DeleteSound は一切行わないようにすれば大丈夫かもしれません 了解です! では使ってみます。 やりたかったのは、例えば、  CPU1:フェードイン→画面表示→フェードアウト  CPU2:LoadSoundMem等 これなら実質0秒で読み込んでる感じになるかなと。
メンテ
Re: Android:サウンドの読み込み速度 ( No.4 )
名前:ギウ 日時:2019/02/16 11:32

P.S 実質0秒、上手くいきました。 10回くらい動かしましたが強制終了もなさそうです。 ありがとうございます。
メンテ
Re: Android:サウンドの読み込み速度 ( No.5 )
名前:管理人 日時:2019/02/17 02:57

上手くいったようで何よりです (^ ^; > yumetodoさん DXライブラリは SetUseASyncLoadFlag( TRUE ); を実行した状態で読み込み関連の関数を使用した場合は DXライブラリが内部で作成したスレッドで読み込み処理が行われますが、あくまで 『DXライブラリが内部で作成したスレッド』のみ考慮されたプログラムとなっていますので、 DXライブラリ側が全く考慮していない独自のスレッドで LoadSoundMem や DeleteSoundMem を実行された 場合の動作の保証ができません
メンテ
Re: Android:サウンドの読み込み速度 ( No.6 )
名前:yumetodo 日時:2019/02/21 21:46

ということはSTLなどで作成した複数スレッドから同期読み込みでLoadSoundMemを同時に呼び出した場合、保証があるように聞こえるのですがどうでしょうか? 例: std::vevtor<std::future<int>> futures; futures.emplace_back(std::async(std::launch::async, [](){ return DxLib::LoadSoundMem('0.opus'); })); futures.emplace_back(std::async(std::launch::async, [](){ return DxLib::LoadSoundMem('1.opus'); })); std::vector<int> handls; for(auto&& f : futures) handls.emplace_back(f.get());
メンテ
Re: Android:サウンドの読み込み速度 ( No.7 )
名前:管理人 日時:2019/02/22 06:35

> yumetodoさん すみません、何かうまく意図が伝わっていないようです シンプルに申し上げますと DXライブラリは基本的にスレッドセーフではありません ( スレッドセーフを保証する想定でプログラムを組んでいません ) の一言に尽きますので、yumetodoさんが『例』で載せられたプログラムも正常な動作は保証できません
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存