ホーム › フォーラム › Android,iOS › androidでの曲ループ処理
-
投稿者投稿
-
2017-10-25 7:12 pm #14486mugimiso参加者
お世話になっております。
Androidにて曲のループを行うと、機種依存の問題かと思いますが
ループがきれいにつながらない機種があります。
(曲間に隙間ができます)そこでサウンドオブジェクトのループは使わず、なんとか自前でできないものかと
あれこれやってみましたが、うまくいきません。
(あらかじめ曲の長さを調べておき、再生中の曲のチャンネルの位置を取得して、
指定の値になったらもう一度鳴らす・・・これは常時チャンネル位置の取得というのが
安定しないのか、うまくいきませんでした(ちなみにwindows上ではうまくいきます))多少手間がかかってもいいのですが、なにかサウンドのループを自前でやる方法は
ありませんでしょうか?
あるいは、有用なエクステンションはありませんでしょうか?2017-11-05 2:22 am #14585ASDキーマスター>>mugimisoさん
(Androidに限らずWindows上でも)現状CF2.5では『完全にスムースな』ループ処理はできないとお考え下さい。曲の進行はミリ秒単位なのに対して、イベントの実行間隔はフレーム単位であるからです。60フレームで動いているアプリの場合、1フレームにかかる時間は、1000/60=16.666666….
となり、最低でも16ないし17ミリ秒かかるため、曲のループタイミングぴったりにイベントを起こさせることは難しいのです(処理落ちすると更にタイミングは遅れます)。
再生位置を変えるループ方法の他には、曲をイントロとループするメインとの2つのファイルに別け、イントロが終わったら続けてメインを流す、という方法もあります。この時、イントロの方の最後を少しメインにかぶる長さにしておき、フェードアウトさせつつメインを流してクロスさせることで少しは違和感を減らすことができますが、それでも、上述の実時間とフレーム数の差異により、完全にはいきません。なお、ファイルサイズを気にしないのであれば、OGGやMP3ではなくWAVにすることで、圧縮形式をデコードする処理が無くなる分、多少良い結果が得られるかもしれません。
2017-11-06 1:38 pm #14595mugimiso参加者ご返信ありがとうございます。
ですが、ご提示いただいた方法ですと、結局イントロの進行を、チャンネル位置の取得で
とらえ、指定の位置になったらメインを流す、という処理が必要ではないでしょうか?
チャンネル位置の取得が(ゲームに組み込むと)安定しないのではという問題があるため
こちらの方法と、同じ問題を抱えてしまうように思われます。
(理解が違っていましたらすみません)ちなみに、私が試した上記のやり方で、同じ曲を2ファイル用意し、交互に流す、
ということも試しており、こちらはASD様の提示したやり方に近いのではと思われますが
こちらもうまくはいきませんでした。
(やり方がまずいのかもしれませんが・・・)ご教示いただいた、cf2.5の構造的な問題ですが、windowsやiosでは、
少なくとも私の耳では大きな問題を感じたことはなく、
またループ再生が処理落ちに影響されることもないため、
やはりandroid特有の問題であると認識しています。もっとも、androidにおける音の問題はcf2.5に限った話ではないようで
検索すると様々な情報が出てきますが、cf2.5がどういった処理で
音を鳴らしているのかがわからないので
このあたりは関係があるのかはわかりません。WAVは、1ファイルでapk1ファイル分くらいになってしまうので
ちょっと現実的ではないですね・・・2017-11-22 11:13 pm #14679pussn_boot参加者>mugimiso様
自分も同じ症状で試行錯誤していたんですが、
プロパティの「サウンドが次より大きい場合に~」ってやつがデフォルト(?)の5になってたので、増やすと解決しました。既に設定済みで別次元のとんちんかんな事を言ってたらすみません。
2017-11-23 2:46 am #14680pussn_boot参加者すみません、よくよく聞いてみたら、長い曲が被り気味にリピートされておかしな事になってました。
解決策ではなく別の不具合が起きてしまいました。
よく確認せずに返信して混乱させてしまい申し訳ありません。2017-11-23 11:22 am #14681pussn_boot参加者新たにスレッドを立てようと思いましたが、関連した内容だと思うのでこちらに書かせて頂きます。
Androidオプションの『サウンドが次より大きい場合に「ディスクから再生」を強制的に使用する』がデフォルトで5秒だったのですが、これは5秒未満の曲はプリロードされて、5秒以上はディスクから再生されるという事だと思います。
しかしこれを10秒に設定すると
①5秒未満の曲はプリロードされてきれいにループする
②10秒以上の曲はディスクから再生でループが途切れる
③5秒以上10秒未満の曲は5秒の時点で頭だしされてループする
となります。③は5秒以上あるのに5秒分しかプリロードされていないからそこだけでループするのではないかと思います。
もしこの仮説が正しければ、デフォルトの5秒より数値を増やしても反映されてない。
反映されてないだけなら③の曲もディスクから再生するはずですがそれもされない。
ということでこれは仕様というよりは不具合のような気がするのでご報告させて頂きました。 -
投稿者投稿
- このトピックに返信するにはログインが必要です。