Re: Android版: 同時発音数について ( No.2 ) |
- 名前:MOR 日時:2018/02/19 20:37
試してみたのですが、変化はありませんでした。
今回は362個のoggを一度に再生して直後に再生している数を調べてみましたが、やはり15でした。
エミュレータ(x86)も実機(ARM)も同じでした。ちなみにWindowsで同じことをやると362個すべて鳴っていました。
よくある「ファイルをダウンロードしたけどビルドに適用できていない」かと思って確認しましたが、
問題ないと思います。更新されたのはAndroid_x86では libDxLib.a 2018/02/19 00:35 のみですよね?
このファイルをリネームするとビルドに失敗するので、更新は大丈夫だと思います。
|
Re: Android版: 同時発音数について ( No.3 ) |
- 名前:管理人 日時:2018/02/20 00:53
私も手元のデバイス( F-02H )で試してみましたが、OSが対応している同時再生可能な数は 14 でした
バグで 16個以上同時再生できないようになっていましたが、そもそもOSが対応している同時再生可能な数が 16未満だったようです (・・;
MORさんの環境も OSが対応している同時再生可能な数が 15だったということだと思います
今後登場する、より高性能の端末では同時再生可能な数も増えていくと思いますが・・・
|
Re: Android版: 同時発音数について ( No.4 ) |
- 名前:MOR(完了) 日時:2018/03/09 23:27
了解しました。残念ですが仕方ありません。
追記 2018/03/09
SoftSoundで組み直しました。
|
Re: Android版: 同時発音数について ( No.5 ) |
- 名前:MOR 日時:2018/03/11 16:20
SoftSoundというものがあるのを知り、
ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4338
を参考にして30音以上鳴らすことができました。
ただ、いろいろ問題もあり、1つ1つ検証・対策しているところです。
その中でまず気になったのですが、上記リンクの No.5 に書かれているサンプルの1つ目を
実行したとき、ストック0.1秒でも、0.5秒分にしても、ずっとプチノイズが出ていることです。
Windowsでは全く問題なかったと記憶していますが、Androidはこういうものなのでしょうか?
(2.5分くらいのOGGをassetsに置き、x86高速エミュレーター(VisualStudio Emulator)で確認)
|
Re: Android版: 同時発音数について ( No.6 ) |
- 名前:管理人 日時:2018/03/12 00:44
> ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4338
>
> を参考にして30音以上鳴らすことができました。
こちらのURLはここ(『Android版: 同時発音数について』のスレッド )のURLのようです
申し訳ありませんが、正しい URL を載せていただけないでしょうか? m(_ _)m
> その中でまず気になったのですが、上記リンクの No.5 に書かれているサンプルの1つ目を
> 実行したとき、ストック0.1秒でも、0.5秒分にしても、ずっとプチノイズが出ていることです。
> Windowsでは全く問題なかったと記憶していますが、Androidはこういうものなのでしょうか?
MORさんがご覧になられたスレッドを確認できていないので中途半端なご返答になりますが
Android と Windows では SoftSound の Player のストックが消費される際の1回辺りの量が異なります
Windows 環境では概ね 0.01秒単位で消費され、Android 環境では( 手元の環境では ) 0.05秒単位で
消費されるようです( これは OS のサウンド API に因るもので、Windows の方がより細かい単位で消費されます )
一度に消費される時間が長くなればなるほど、ストックがそれ以下しかないと足りない分がプチノイズとして
『無音』が再生されることになります
なので、消費されるストックの粒度が荒い Android の方が、大き目のストックを用意しておかないとプチノイズが
発生してしまうというわけです
なので、以下のような『プレイヤーに 0.05秒( 20分の1秒 )単位でストックを追加しながら再生する』
プログラムを組んでみたところ、手元の環境ではエミュレーターでも実機( F-02H )でもぎりぎり
プチノイズが入るか、入らないか、といったところでした( たまにプチプチ音がします )
#include "DxLib.h"
#define ONE_ADD_SAMPLE_NUM (44100 / 20)
int android_main( void )
{
int SoftSoundHandle ;
int TotalSampleNum ;
int TotalAddSampleNum ;
int AddSampleNum ;
int SoftSoundPlayer ;
if( DxLib_Init() < 0 )
{
return -1 ;
}
// ソフトウエアサウンドとしてサウンドファイルを読み込み
SoftSoundHandle = LoadSoftSound( "TestBGM.ogg" ) ;
// サウンドの総サンプル数を取得しておく
TotalSampleNum = GetSoftSoundSampleNum( SoftSoundHandle ) ;
// プレイヤーの作成
SoftSoundPlayer = MakeSoftSoundPlayer( SoftSoundHandle ) ;
// プレイヤーの再生開始
StartSoftSoundPlayer( SoftSoundPlayer ) ;
SetDrawScreen( DX_SCREEN_BACK ) ;
TotalAddSampleNum = 0 ;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
// プレイヤーのストックが20分の1秒以下になったら20分の1秒追加
if( GetStockDataLengthSoftSoundPlayer( SoftSoundPlayer ) < ONE_ADD_SAMPLE_NUM )
{
if( TotalSampleNum - TotalAddSampleNum < ONE_ADD_SAMPLE_NUM )
{
AddSampleNum = TotalSampleNum - TotalAddSampleNum ;
}
else
{
AddSampleNum = ONE_ADD_SAMPLE_NUM ;
}
if( AddSampleNum > 0 )
{
AddDataSoftSoundPlayer( SoftSoundPlayer, SoftSoundHandle, TotalAddSampleNum, AddSampleNum ) ;
TotalAddSampleNum += AddSampleNum ;
}
}
// ストックされている時間を描画
DrawFormatString( 0, 0, GetColor(255,255,255), "GetStockDataLengthSoftSoundPlayer:%d", GetStockDataLengthSoftSoundPlayer( SoftSoundPlayer ) ) ;
ScreenFlip() ;
}
DxLib_End() ;
return -1 ;
}
因みに少し話題から逸れてしまいますが、AddDataSoftSoundPlayer にバグがあり、既存のバージョンでは
上記のプログラムは正常に動作しません、申し訳ありませんが、よろしければこちらの修正版をお使いください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用
https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース
( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、
BCCをお使いの場合は『再構築』をして下さい )
ストックを 0.5秒にしてもずっとプチノイズが入るのは、恐らくPCの性能の関係だと思います
それなりの性能の実機であれば 20分の1秒までは偶にプチノイズが入る程度になると思います
ただ、この辺り( 一度に消費されるストックの量 )も、もしかしたら機種の世代や Android の
バージョンによって異なるかもしれません
|
Re: Android版: 同時発音数について ( No.7 ) |
- 名前:MOR(解決) 日時:2018/03/21 23:02
すみません、正しいアドレスはSoftSoundが最初に出てきたスレッドでした。
ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=past&no=1800
試してみました。実は最近、Visual Studio Emulatorでしか試してなかったので、
実機だとかなりマシだということがわかりました。
VSEでは相変わらずノイズが大きい(多い)ので、適度に実機でも確認するように心がけます。
(LoadSoundMemでは問題なし)
|
Re: Android版: 同時発音数について ( No.8 ) |
- 名前:MOR(追記) 日時:2019/03/29 20:52
iOS版が出たので、iPhone 7 Plusでやってみました。64音を一斉に鳴らして少し待ってCheckSoundMemを
調べたところ、64個全て発音しているようでした。
自作音ゲーで試してみても確かに鳴っているように思います。ただ、Bluetoothイヤホンが無いので
実機のスピーカーで聞いただけなので、細かいところはわかりません。もっともAndroidは9.0でも
14〜15音くらいしか鳴らないので、この手のはiOSの方がよさそうです。
ただ、iOS 12.2に更新したらXcode 10.2が必要になり、手持ちのmacではなんとXcode 10.2を
インストールできなくなったので、iOS 12.2実機でのデバッグ実行ができなくなってしまいがっかりしているところです。
ビルド自体やシミュレーターでの実行は引き続きできますし、ビルドした成果物をXcodeの
Window ⇒ Devices and Simulators ⇒ [+] をクリックして手動で転送して信頼設定すれば実機での実行自体はできるので、
なにもできなくなったわけではありませんが、さすがに面倒です。失敗失敗...
|
Re: Android版: 同時発音数について ( No.9 ) |
- 名前:管理人 日時:2019/03/30 01:56
ご情報ありがとうございます
音の再生に使用している API は、Android は OpenSL ES、iOS は OpenAL なのですが
どうやら OpenAL は OpenSL ES より抽象化が強く、メモリとCPU性能の許す限り同時発音ができるようです
( OpenSL ES は抽象化が弱いのでハード・若しくはデバイスドライバの制限がそのまま OpenSL ES の
制限となっているのではないかと推測しています )
OpenAL が OpenGL と同じような関数ベースで非常に簡単に使えるのに対して、OpenSL ES は
OpenGL とは API の設計思想が全く異なり使い方も難しく、且つ OpenAL より制限が多いという感じで、
Android も OpenAL を使えるようにして貰いたいです m(_ _;m
( もしかしたら CPU負荷は OpenSL ES の方が低い、などの利点があるのかもしれませんが…
( でも音の再生処理が重要な音ゲーも iPhone や iPad の方が向いているというしなぁ… ) )
|
Re: Android版: 同時発音数について ( No.10 ) |
- 名前:ギウ 日時:2019/03/31 14:48
(関係ないですが、このページを読んで知りました)
iOS版、既に公開されていたのですね!
機材を揃えたら試してみます。
因みに、
>シミュレーターでのプログラムの実行は時間が掛かるので、数分( 長いと10分以上 )待ってみてください。
とあったのですが、iPhoneも買っておけば、Androidくらいの速度でテストできると考えて大丈夫でしょうか。
|
Re: Android版: 同時発音数について ( No.11 ) |
- 名前:MOR 日時:2019/03/31 20:08
> ギウさん
私のは2010年mac miniですが、RAM 4GBだと絶望的に遅かったので16GBにしましたが、シミュレータの起動時間は
まぁ数分です(10分もかからない)。Androidの純正エミュレータは起動も起動してからも全てにわたって遅いですが、
iOSのシミュレータは起動後は、軽いアプリならまぁ割とこんなもん?という感じです。(相対的にですが)
※ただしつい先日のアップデートで、このmacでは実機デバッグができなくなりました...
AndroidはMSのVisual Studio Emulator for Androidでやっていたのですが、どうも最近うまく起動しない気がするので
Hyper-Vを切ってIntel HAXMのエミュレータに切り替えました。(というより最近は実機の方にしています)
Windowsで作っている音ゲーをAndroid/iOSに移植した感じですが、少なくともiOSの方がデータ読み込みはかなり速いと
感じています。(画像やOgg)
> 管理人さん
とは言え、AndroidもiOSもちょっと問題を抱えていまして、以下に列記いたします。
もっとも、よく検証したわけではありませんので、私のプログラムの問題もあろうかと思います。
とりあえず気づいた点ということで、ご了承ください。
なお画像は twitter.com/report_things に上げました。
■Android (Xperia XZ Premium)
・音が14音くらいしか同時に鳴らせない ---> まぁ、これはあきらめました
⇒ネットによるとAndroid OSは音が実際に出るまで時間がかかるので音ゲーなどが少ない?
(SONYのスマホはマシな方だとか...)
・SetZBufferBitDepth(24)を実行しても効かない?
⇒PCのデフォルト状態(16bit)のように、MV1を表示するとモアレ状になる ... 画像あり
・Oggや画像(の両方か、どちらかか)の読み込みが、iOSに比べてかなり遅い
■iOS (iPhone 7 plus)
・文字の表示がおかしい(上にゴミが出る文字が多い) ... 画像あり
⇒DrawString で A〜Z a〜z をずらっと書いてみると、特に小文字で多い
・音声や画像を多く読み込むと、エラーにはならないが、画像が表示されなくなるものがある ... 画像あり
⇒その状態でDrawGraphをしても戻り値はエラーになっていない
・アンチエイリアシングが効かない ... 画像あり
⇒と思ったら、マニュアル上、SetFullSceneAntiAliasingMode() は
Android/iOSには無いんですね(書いてもビルドエラーにはならないが)
Androidの方が(モアレはともかく)マシに見えるのは、Xperia XZPが4K画像だから?
|
Re: Android版: 同時発音数について ( No.12 ) |
- 名前:管理人 日時:2019/04/01 02:19
> ギウさん
> iOS版、既に公開されていたのですね!
> 機材を揃えたら試してみます。
はい、先日やっと公開できました (^ ^;
よろしければお試しください
> とあったのですが、iPhoneも買っておけば、Androidくらいの速度でテストできると考えて大丈夫でしょうか。
はい、実機の場合は Androidと同じくらいの起動速度です
> MORさん
ご情報ありがとうございます
> ・SetZBufferBitDepth(24)を実行しても効かない?
> ⇒PCのデフォルト状態(16bit)のように、MV1を表示するとモアレ状になる ... 画像あり
Android では現在裏画面については 24bit固定( 端末が対応していれば )、MakeScreenで作成する
仮画面については SetCreateDrawValidGraphZBufferBitDepth で指定したビット数となります
ただ、24bit対応端末でも何故か Windows での 24bit よりは精度は低いようです
( 同じ設定にしても Windows ではモアレが発生せず、Android ではモアレが発生しました )
もし 24bit固定の裏画面への書き込みでもモアレが発生する場合は SetCameraNearFar の値を
処理に不都合が無い範囲でなるべく Near の値を大きく、Far の値を小さくしてみてください
特に Near の値が重要で、少しでも大きい値にすると精度がグッと良くなります
尚、iOS版は現在 16bit固定となっているので、24bitにできないか調べてみます
> ・Oggや画像(の両方か、どちらかか)の読み込みが、iOSに比べてかなり遅い
ファイル読み込み処理については iOS と Android で大きく異なる所がないので、
単純に端末の性能差か、OSの実装の差によるものだと思います
> ・文字の表示がおかしい(上にゴミが出る文字が多い) ... 画像あり
> ⇒DrawString で A〜Z a〜z をずらっと書いてみると、特に小文字で多い
すみません、調べてみます
因みに文字のサイズはデフォルトでしょうか?
> ・音声や画像を多く読み込むと、エラーにはならないが、画像が表示されなくなるものがある ... 画像あり
> ⇒その状態でDrawGraphをしても戻り値はエラーになっていない
こちらは twitter の『また、これ、背景が真っ黒だが、1個前のように本来ならOGV動画があるはず。
しかしエラーにならない)』が該当する投稿でしょうか?
こちらでは OGV動画についてですが、OGV動画ではなく、普通の画像でもこちらの現象が発生するのでしょうか?
|
Re: Android版: 同時発音数について ( No.13 ) |
- 名前:ギウ 日時:2019/04/01 21:44
>MORさん
>管理人さん
了解です。実機もあったほうが良さそうですね。
ありがとうございます!
|
Re: Android版: 同時発音数について ( No.14 ) |
- 名前:MOR 日時:2019/04/01 22:17
@Androidでモアレの件
SetCameraNearFarの設定値を変更することで、あっさり解決しました。
AAndroidでOgg読み込みが遅い件
これはやはり遅いです。Ogg 334個で40秒近くかかっています。ところがWAVに変換してからやってみると
1秒くらいで読み終わりました。
読み返してみると、いずれも最近他のスレッドで同じような件がありましたね。勉強不足でした。
ありがとうございます。Androidは「発音問題」さえ解消すれば…と、より残念に思います。
さて、iOSなのですが
BiOSで文字にゴミが出る件
普通にDrawStringするだけで再現します。(デフォルトサイズ)
アルファベット小文字の方がわかりやすいです。
CiOSで画像が表示されなくなる件
当初は、メモリを使いすぎてデータ破損?とか思っていたのですが、どうもそうではなさそうです。
というのも、「MV1を描画した後、アルファ成分が無い画像が描画されなくなる」のでは?と思われます。
・MV1をLoadしただけでは問題なし
・一度でもDrawModelを実行すると、その後、OGVやJPEGが描画されなくなる
・しかし、TGAは問題なく描画できる
という状況のように思われます。
再現するコードです。
int ios_main(void)
{
SetGraphMode(640, 480, 32);
SetFullSceneAntiAliasingMode(4, 2);
SetCreateDrawValidGraphMultiSample(4, 2);
if (DxLib_Init() != 0) return -1;
SetDrawMode(DX_DRAWMODE_BILINEAR);
SetDrawScreen(DX_SCREEN_BACK);
int nMV1Handle = MV1LoadModel("xxxxxx.mv1"); // MV1
int nHandle = LoadGraph("xxxx.ogv"); // OGV
int nHandle2 = LoadGraph("xxxx.tga"); // TGA
MV1SetPosition(nHandle, VGet(0.0f, 0.0f, 0.0f));
VECTOR v = {0.0f, 20.0f,-15.0f};
SetCameraNearFar(1.0f, 100.0f);
SetCameraPositionAndTarget_UpVecY(v, VGet(0.0f, 10.0f, 0.0f));
int nFont1 = CreateFontToHandle(NULL, 12, 1);
int nFont2 = CreateFontToHandle(NULL, 16, 3, DX_FONTTYPE_ANTIALIASING_EDGE_4X4);
PlayMovieToGraph(nHandle);
while (ProcessMessage() == 0) {
ClearDrawScreen();
DrawGraph(0, 0, nHandle, TRUE);
DrawGraph(0, 0, nHandle2, TRUE);
MV1DrawModel(nMV1Handle); // ここをコメントアウトすると描画されるようになる
DrawFormatString(0, 50, GetColor(255,0,0), "%x:%x:ABCDEFGHIJKLMNOPQRSTUVWXYZ", nMV1Handle, nHandle);
DrawFormatStringToHandle(0, 150, GetColor(255,0,0), nFont1, "%x:%x:ABCDEFGHIJKLMNOPQRSTUVWXYZ", nMV1Handle, nHandle);
DrawFormatStringToHandle(0, 250, GetColor(255,0,0), nFont2, "%x:%x:abcdefghijklmnopqrstuvwxyz", nMV1Handle, nHandle);
if (ScreenFlip() != 0) break;
}
InitFontToHandle();
return DxLib_End();
}
さて、昨日もちょろっと書いたのですが、ここが自分的に一番困っています。
DiOSで文字もMV1も画像が粗い ( twitter.com/report_things/status/1112703952569548800 )
iPhone 7 plusは1920x1080なので、上記コードで SetGraphMode(1920, 1080, 32) とやってみるんですが
文字もMV1も画像が粗いです。ZバッファとかAAとかというより、どっちかというと
「Screenからバックバッファにニアレストで縮小転送」といった方が近いような、そんな感じです。
|
Re: Android版: 同時発音数について ( No.15 ) |
- 名前:管理人 日時:2019/04/02 01:43
> BiOSで文字にゴミが出る件
> CiOSで画像が表示されなくなる件
ご情報ありがとうございます
本日は作業時間が足りなくて対応できませんでしたが、遅くとも次の週末には
対応したいと思います
> DiOSで文字もMV1も画像が粗い ( twitter.com/report_things/status/1112703952569548800 )
すみません、Retinaディスプレイに対応していなかったのが原因でした
( 例えば iPhone 4 の建前上の解像度は 320x480 ですが、Retina での解像度は 640x960 等 )
Retinaディスプレイに対応した処理に変更してみましたので、よろしければお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版
|
Re: Android版: 同時発音数について ( No.16 ) |
- 名前:MOR 日時:2019/04/02 19:50
> Retinaディスプレイに対応した処理に変更してみましたので、よろしければお試しください m(_ _;m
確認しました。画質は正常に戻りました。ありがとうございます。
ですが、1920x1080で実行して画面中心あたりをタッチすると、X座標もY座標も数分の一の
数値を示すと思われます (1/3くらい?)。ご確認いただけますと幸いです。
|
Re: Android版: 同時発音数について ( No.17 ) |
- 名前:管理人 日時:2019/04/03 00:56
> ですが、1920x1080で実行して画面中心あたりをタッチすると、X座標もY座標も数分の一の
> 数値を示すと思われます (1/3くらい?)。ご確認いただけますと幸いです。
すみません、タッチ座標についても Retinaディスプレイ対応していませんでした
修正版をアップしましたので、よろしければお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版
( 因みに本日のバージョンはまだ『BiOSで文字にゴミが出る件』『CiOSで画像が表示されなくなる件』の
修正はできていません、すみません )
|
Re: Android版: 同時発音数について ( No.18 ) |
- 名前:MOR 日時:2019/04/03 19:56
> 修正版をアップしましたので、よろしければお試しください m(_ _;m
タッチ位置を正常に取得できることを確認いたしました。
ありがとうございました。
|
Re: Android版: 同時発音数について ( No.19 ) |
- 名前:MOR 日時:2019/04/06 11:33
SO-04J (Xperia XZ Premium) は4K液晶などハイスペックなのにOgg読み込みが異常に遅いのが
腑に落ちなかったのですが、原因がわかりました。今までARMでビルドしていたからです。
ARM64にしたら11倍速くなりました。
それでもiPhone 7 plusより1.5倍遅いですが、まぁこれくらいならという感じです。
他にテストしているAndroid 4.4、5.0、FireOS(Andorid 5.1相当)はARMしか動かないこと、
そしてなにより64と性能差があるとは思わなかったことから、ARMしか試していませんでした。
Windows 10 SO-04J iPhone7 plus
i7 3.5GHz Android 9.0 iOS12.2
x86 x64 ARM ARM64 64
----------------------------------------
@Oggを100回読む
1990 1966 34404 3049 2079
Awavを100回読む
411 605 360 207 349
※音声データは22.05kHz/16bit, 18秒
※ビルドはRelease。時間は msec
※追記 34404msecは誤記ではありません。本当に10倍以上遅い
|
Re: Android版: 同時発音数について ( No.20 ) |
- 名前:管理人 日時:2019/04/07 22:55
|
Re: Android版: 同時発音数について ( No.21 ) |
- 名前:MOR(解決) 日時:2019/04/08 20:49
まずiOSの方ですが、文字のゴミおよび画像非表示の件は解決いたしました。
ARMの件ですが、かなり高速化しました。34秒⇒4.3秒となりました。
Android ARM64より1.4倍、iPhone 7plusより2.1倍くらいかかりますが、
少なくとも10倍以上かかるようなことは無くなりました。
ご対応、ありがとうございました。
|