HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0609
Freedom Programmer(ふりぷろ)【hsp3dish】MP3の再生について23解決


Freedom Programmer(ふりぷろ)

リンク

2016/6/9(Thu) 21:01:42|NO.75803

どうも、
hsp3dishを使ってAndroidアプリを開発しているのですが、
音楽を再生させる方法が分かりません。
リファレンスでは「mp3,wavファイルは必ずassetsフォルダに入れる」と書いていたのにも
関わらず「assets」フォルダに音楽ファイルを入れても、
すぐにアプリが落ちてしまいます。

プログラムのmmload命令に書いた読み込みするファイル名も間違えてないし、
assetsフォルダに音楽ファイルを入れたのに何故か動きません。

【開発環境】
JDK 1.8.0_91
SDK 「Tools」「Platform-tools」「Android 5.0.1」「Android 5.1.1」インストール済み
NDK r7c
ANT 1.9.2

プロジェクトフォルダ:C:\Users\(ユーザー名)\Desktop\test android program1\

【問題のビルドしたスクリプト】
#include "hsp3dish.as"
screen 0,ginfo_sx,ginfo_sy

#module
#deffunc fprt str _p1
; fprt "message"
; (画像を使用したフォント表示を行ないます)
; "message" : 表示するメッセージ
; 表示座標は、posで指定した位置から
;
i=0:st=_p1

repeat
a1=peek(st,i):i++:if a1=0 : break
if a1=13 {
a1=peek(st,i)
if a1=10 : i++
continue ; 改行
} else {
celput 1,a1
}
loop
return




#global

celload "font.png",1 : celdiv 1,16,16,0,0
mmload "(ファイル名).mp3",1,1 ←ここ
gsel 0

mmplay 1
repeat
redraw 0
color 0,0,0 : boxf
color 255,255,255
pos 0,0
fprt "DEBUG"
pos 0,16
fprt ""
redraw 1
wait 1
loop

※fprt…オリジナルフォントを描画する命令です。

バグ?いや、ケアレスミス?
どなたか、音楽を正常に鳴らす方法を教えてください!



この記事に返信する


しまくろねこ

リンク

2016/6/9(Thu) 21:49:29|NO.75806

こんにちは。

mmload の行と mmplay の行をコメントアウトしてAndroid上で起動した場合はアプリは落ちずに動きますでしょうか?
コメントアウトしてアプリが落ちないようであれば mmload/mmplayでの箇所での落ちているのが間違いないかと思われますが、どうでしょうか?

たまに間違って名前の似ているプロジェクトフォルダ内の「assets」フォルダにファイルを入れるといった凡ミスが無くもないので(恥ずかしながら私はありました^^;)、必要であれば、mmload でMP3を読み込ませる前に

exist "(ファイル名).mp3" if strsize == -1 { dialog "(ファイル名).mp3 が存在しません" }
などのように、ファイルがちゃんと存在しているかを調べるのもアプリを落ちる原因を探すうえでも書いておくのも良いのかもしれません。



それから過去ログで同様の質問があったようで、原因はMP3からwavへの変換ミスだったようです。

・hSP3Dish リリースビルドによる不具合
http://hsp.tv/play/pforum.php?mode=pastwch&num=64688



Freedom Programmer(ふりぷろ)

リンク

2016/6/10(Fri) 06:02:18|NO.75813

うーん…

ビルドしたプロジェクトフォルダのassetsフォルダに
(ファイル名が)半角4文字、1MB以内のMP3ファイルを入れているのにも関わらず
読み込み時、strsizeとifでファイルがあるかないかを判断するプログラムを組んで
テスト後、ビルドしインストール後起動してみると、ファイルがないと判断されます。
…mmloadでエラーが発生していたようです。

assetsフォルダから音楽ファイル(.mp3)を読み込む時に
パスは「"(ファイル名).mp3"」ではなく「"assets/(ファイル名).mp3」にしないと
認識しないのかなぁ…と思ったりもしますが、そんなことはないのでしょうか?

ちなみに、wav変換は1MBを普通に超えましたのでやめました。
変換はaudacityで行っています。



しまくろねこ

リンク

2016/6/10(Fri) 08:52:06|NO.75814

こんにちは。

>パスは「"(ファイル名).mp3"」ではなく「"assets/(ファイル名).mp3」にしないと
mmload "(ファイル名).mp3" の形で問題ないです。

プロジェクトフォルダに名前の似たフォルダはありますでしょうか?
また、一度Dish Helperの「クリーン」ボタンを押してから「ビルド」してみてはいかがでしょうか?



OK

リンク

2016/6/10(Fri) 13:35:57|NO.75817

こんにちは。ふりぷろさん。

内容につきまして、しまくろねこさんの言うように盆ミスの可能性が高い、
と言うか私もボンミス良くしますので…

>すぐにアプリが落ちてしまいます。

と言うことですが、起動後にすぐ落ちるのか、最初はだけ動いてすぐに途中で落ちるのか、
どちらでしょうか。
またLogcatでコンソール表示か確認出来るならおそらく「12」が該当すると思うので、
やはり「asserts」フォルダなどを良く確認してください。



Freedom Programmer(ふりぷろ)

リンク

2016/6/10(Fri) 18:54:48|NO.75822

ご返答が遅れて申し訳ありません。

しまくろねこさん OKさん

クリーンすると「BUILD FAILED」と表示されるので
新しいプロジェクトを作成し、ビルド後Androidタブレットにインストールしましたが、
assetsフォルダに音楽ファイルを入れてアプリを起動させても最初の方で
落ちてしまいます。

プログラムが参照しているファイル名とassetsフォルダに入っているファイルの名前と
拡張子は同じなんですが、なぜか読み込みができません。

あと、Logcatでのエラーは確認できませんでした。



OK

リンク

2016/6/10(Fri) 22:03:20|NO.75827

こんばんは

>ご返答が遅れて申し訳ありません。

いえいえ、ていねいにありがとうございます。でも気にしないでね!

ええっとまず
>BUILD FAILED
なのでうまくbuild出来ていません、なので「○○.apk」ファイルは無いはずなんですけど。

今回は「○○.apk」は作成されていて実機にインストールしてアプリケーションを起動すると、
最初だけ動いてから、例えばタイトル画面は出るけどホーム画面に戻っちゃう形でよろしいですか?

とりあえず一度、「BUILD SUCCESSFUL」を目指してみて下さい。



OK

リンク

2016/6/10(Fri) 23:57:26|NO.75831

すいませんスクリプト実機でやってませんでした。

なので実機で実行した結果

「BUILD SUCCESSFUL」

であってもアプリケーションが落ちる現象を確認しました。

結論は音声関係のバグではありません。

画像関係のバグです。

実際「9MB」以上の「.mp3」も再生できました。

細かい原因はまたそちらで究明してみて下さい。

私も時間があるときに確認してみようと思います。



Freedom Programmer(ふりぷろ)

リンク

2016/6/11(Sat) 08:17:13|NO.75833

画像関連バグ…?
とのことで、スプリクトを変えてみましたがダメでした。

#include "hsp3dish.as"
screen 0,ginfo_sx,ginfo_sy

exist "music.mp3" : if strsize = -1 {
dialog "music.mp3というファイルが見つかりません"
exist "assets/music.mp3" : if strsize = -1 {
dialog "asset/music.mp3が存在しません"
}else{
mmload "assets/music.mp3",1,1
dialog "読み込みました!"
mmplay 1
stop
}
}else{
mmload "music.mp3",1,1
dialog "読み込みました!!"
mmplay 1
stop
}


これでも音楽ファイルを読みません。



Freedom Programmer(ふりぷろ)

リンク

2016/6/12(Sun) 10:16:02|NO.75850

OKさん しまくろねこさん

よく名前が似たフォルダ等はなく、競合?は考えられないです。
クリーンも「BUILD SUCESS」と出ましたし、
ビルドも問題なく出来ています。

…もしかして、
プロジェクトフォルダ内のプロジェクトフォルダ(?)をそのまま
Andorid端末のストレージに入れるというのがそもそも間違いなのでしょうか?



しまくろねこ

リンク

2016/6/12(Sun) 20:10:18|NO.75858

こんにちは。

> プロジェクトフォルダ内のプロジェクトフォルダ(?)をそのまま
> Andorid端末のストレージに入れるというのがそもそも間違いなのでしょうか?

Android端末のストレージに入れるのは、プロジェクトフォルダの「bin」フォルダ内に「(プロジェクト名)-debug.apk」という名前で生成されたAPKファイルのみを入れてあげればOKです。
なので、Android実機にコピーしたプロジェクトフォルダは削除しましょう。

作成したアプリをAndroid実機にインストールするには2つ方法があります。
1つ目は、上記で書いたようなAPKファイルをAndroid実機にコピーして手動でインストールする方法。
2つ目は、USBケーブルを繋いでDish Helperの「転送」ボタンをクリックすることにより、Android実機に直接アプリをインストールする方法。

2つ目方法を利用するとビルド後のAndroid実機でのテストが直ぐに出来やすくなります。(※要ADBドライバ)
2つ目の方法については、以下の過去ログを参考にしてみてください。

・Dishでアプリテストを 白ロムでできますか?
http://hsp.tv/play/pforum.php?mode=pastwch&num=61890

・HSP3Dishでapkファイルを作ろうとしても失敗して作成されない
http://hsp.tv/play/pforum.php?mode=pastwch&num=73388



OK

リンク

2016/6/12(Sun) 23:10:10|NO.75866

ああわかんないっすね。


#include "hsp3dish.as" screen 0,ginfo_sx,ginfo_sy /*#module #deffunc fprt str _p1 ; fprt "message" ; (画像を使用したフォント表示を行ないます) ; "message" : 表示するメッセージ ; 表示座標は、posで指定した位置から ; i=0:st=_p1 repeat a1=peek(st,i):i++:if a1=0 : break if a1=13 { a1=peek(st,i) if a1=10 : i++ continue ; 改行 } else { celput 1,a1 } loop return #global */ //celload "font.png",1 //celdiv 1,16,16,0,0 //////////////////////////////////////////////// mmload "V.mp3",1,1 //←ここ gsel 0 mmplay 1 repeat redraw 0 color 0,0,0 : boxf color 255,255,255 pos 0,0 //fprt "DEBUG" pos 0,16 //fprt "" redraw 1 wait 1 loop ////////////////////////////////////////////////

でも動くし


#include "hsp3dish.as" screen 0,ginfo_sx,ginfo_sy exist "V.mp3" : if strsize = -1 { dialog "V.mp3というファイルが見つかりません" exist "assets/music.mp3" : if strsize = -1 { dialog "asset/music.mp3が存在しません" }else{ //mmload "assets/music.mp3",1,1 mmload "V.mp3",1,1 dialog "読み込みました!" mmplay 1 stop } }else{ //mmload "music.mp3",1,1 mmload "V.mp3",1,1 dialog "読み込みました!!" mmplay 1 stop }

でも動くんですよ。(コピペでスンマセン)

まさかボリュームOFFとか...ないですよね。

> プロジェクトフォルダ内のプロジェクトフォルダ(?)をそのまま
> Andorid端末のストレージに入れるというのがそもそも間違いなのでしょうか?
の件は、しまくろねこさまのおっしゃるとおりだし。

あと、こちらから質問で失礼します。
二つ質問させてください。


NO.75833の時点では "読み込みました!!"の表示がでないだけで
アプリケーションは落ちないですか?落ちますか?


NO.75813で使用してる
>変換はaudacityで行っています。
のソフトウエアは、私はあえて試しませんので、べつのファイル、例えば.wavファイルなど
ではいかがですか?



リンク

2016/6/13(Mon) 00:25:50|NO.75867

>assetsフォルダに音楽ファイルを入れてアプリを起動させても
がちょっと気になったので確認させてください。
ソースのあるディレクトリ内にassetsというフォルダを作ったりしてませんか?
C:\Users\(ユーザー名)\Desktop\test android program1\
内に新規プロジェクト名のフォルダがあり、その中にあるassetsに音楽ファイルなど入れた上で
ビルド、をしていますか?
必要なファイルが無くてもビルドは通っちゃいますんで注意です。
出来たapkの容量が音楽ファイルぶんも入っている感じどうかもチェックしてみてください。



ぜーっと!!

リンク

2016/6/13(Mon) 15:49:22|NO.75874

おや、解決してないようで(´・ω・)

ためしに、ふりぷろさんのプログラムをHSP3Dish helperをつかいビルド。
実機に転送して実行してみました。


#include "hsp3dish.as" screen 0,ginfo_sx,ginfo_sy exist "music.mp3" : if strsize = -1 { dialog "music.mp3というファイルが見つかりません" exist "assets/music.mp3" : if strsize = -1 { dialog "asset/music.mp3が存在しません" }else{ mmload "assets/music.mp3",1,1 dialog "読み込みました!" mmplay 1 stop } }else{ mmload "music.mp3",1,1 dialog "読み込みました!!" mmplay 1 stop }

(´・ω・)あれ?音楽が鳴るどころか、ダイアログも表示されないぞ・・。

少し減らしてみる


#include "hsp3dish.as" screen 0,ginfo_sx,ginfo_sy exist "music.mp3" if strsize = -1 { dialog "music.mp3というファイルが見つかりません" stop } mmload "music.mp3",1,1 dialog "読み込みました!" mmplay 1 stop

(´ーω-)それでも音もダイアログもダメ。どうして?

しかたなく、不要なの消して、メインのストップも無くして、最後ループにしてみた


#include "hsp3dish.as" exist "music.mp3" if strsize = -1 { dialog "music.mp3というファイルが見つかりません" stop } mmload "music.mp3",1,1 dialog "読み込みました!" mmplay 1 repeat await 17 loop

(`・ω・)あ、音出た。

しかしその後、他のプログラムに戻して実行してみたら、どれも音出た。


   結論:よ く わ か ん な い



kanamaru

リンク

2016/6/13(Mon) 18:06:13|NO.75875

hsp3dishではscreenはHSP3Dish非互換コマンドらしいです。
デバイスによって異なる仕様だそうです。
ためしにscreenの行だけ消したプログラムを試したらどうでしょうか?



しまくろねこ

リンク

2016/6/13(Mon) 22:55:53|NO.75879

こんにちは。

下記のスクリプトを実機で試してみましたが、特に落ちることなく音も再生されています。

#include "hsp3dish.as" screen 0, ginfo_sx, ginfo_sy mmload "music.mp3", 1, 1 gsel 0 mmplay 1 repeat redraw 0 color 0, 0, 0 : boxf color 255, 255, 255 : pos 0,0 : mes "DEBUG" redraw 1 wait 16 loop
撃さんの書き込みにもあるように、プロジェクトフォルダの設定場所がソースと同じ場所になってしまっているのが怪しいのではないかと思います。
通常プロジェクトフォルダは、ソースが存在している場所とは別の場所にしておくのが良いかと思います。


時間ができたので個人のページにて簡単ではありますが、HSP3Dishの講座を作りました。
Dish Helper環境の構築からビルド後の実機へのインストールまでの作業を解説しています。
よろしければ今一度、Dish Helperの「Androidオプション設定」のプロジェクトの部分を見直してみてください。


・『しまくろねこ』のホームページ2号店
https://sites.google.com/site/simakuroneko/

・HSP3Dish android(NDK)版プログラミングガイド
(HSP3フォルダ)内の「doclib/hsp3dish_ndk.htm」



Freedom Programmer(ふりぷろ)

リンク

2016/6/17(Fri) 21:57:28|NO.75898

ご返答遅れて申し訳ありません。
(理由としては2泊3日用事で遠くに行っていました)

みなさん、いろんな検証や意見ありがとうございます!
おかげで解決できました。感無量です!



Freedom Programmer(ふりぷろ)

リンク

2016/6/17(Fri) 22:01:33|NO.75899


OKさん
音量は0ということは絶対にありません。
あと、No.75883時点ではまだ解決していませんでした。
mp3をwavにしてみてもダメでした。



OK

リンク

2016/6/17(Fri) 22:48:51|NO.75900

解決済と言うことで、良かったです、

あと、質問にわざわざ答えさせてすんません、

また、答えてくださってありがとうございました。



Freedom Programmer(ふりぷろ)

リンク

2016/6/18(Sat) 09:30:04|NO.75902

撃さん

そういうルールがあるとは知りませんでした。僕もまだまだ初心者ですね。
プロジェクトフォルダのassetsフォルダに音楽ファイルを入れてビルドすると
音楽が再生できました。

ありがとうございました!



.

リンク

2016/6/24(Fri) 20:13:00|NO.75975





jsAster

リンク

2016/9/26(Mon) 23:02:51|NO.77004

上は荒らしですかね。



SquidSky

リンク

2016/9/27(Tue) 16:43:45|NO.77009

Androidで唯一全バージョン対応してるのがoggですのでそれに変換されてみてはどうですか?
oggの方が再生トラブルがほぼないのでおすすめです。
mp3も全対応みたいですが、サンプリングレートが高いと再生できない場合もあります。
または、APIの使用方法が間違っているかもしれません(helper側で)
lolipopからは、SoundPoolクラスを利用した音楽再生は非推奨になりました。
そのかわりにそのクラスにある、Builderクラスを使うべきとされています。

ここが問題ですかね?違うかもしれません。



Freedom Programmer(ふりぷろ)

リンク

2016/10/3(Mon) 20:55:39|NO.77043

助言ありがとうございます!
これからもHSPの方で開発を進めていくので
またわからないことがありましたら
その時はよろしくお願いします。

HSP3DISHの音楽再生についての質問スレで
教えてくれたみなさま、本当にありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.