大変申し訳ありません。
質問をさせていただきたく、レスを書いていたら何やらパソコンがバグってしまったらしく、荒らし行為としかとれないような3回連続投稿をしてしまいました。レスの削除の仕方もわからず、不愉快な気分にさせてしまいまして、
この掲示板の管理人様、閲覧者の皆様方に心よりお詫び申し上げます。大変申し訳ありませんでした。
いや、で、肝心の質問の方は・・・
質問しないと完全に荒らしなんですが
そうでした…すみません。では、質問をさせて頂きたいと思います。
1.FileListBoxにmp3ファイルだけを表示させたいのですが、どのようにすればよろしいのでしょうか?
2.FileListBoxでmp3ファイルを選択したら、再生させるようにしたいのですがどのようしすれば良いのでしょうか?vbmp3.dllでやろうとしています。
ご教授お願い致します。
環境わからないけど、きっとVB6ということで。
1.FileListBoxのPatternプロパティを見てみましょう。
→MSDNを入れたのなら、ファイルリストボックスでF1キーを押すと…
2.ファイルリストボックスで、特定の項目が選択されたときに起こるイベントで、
mp3ファイルを再生すればいいのです。
…vbmp3.dll使ったことないや。
参考URL:
http://www.sm.rim.or.jp/~shishido/mp3dev1.html
1の方はガッさんがヒントをくれたので大丈夫でしょう
2の方ですが、宣言をちゃんとしてあれば、OpenしてPlayするだけでいけると思います
昔使っていましたが、最近は使っていないので忘れました・・・
※プログラム終了時にVBMP3を開放するのをお忘れなく
あと、最近のWindowsMediaPlayerがインストールされていれば、mciでもMP3鳴らせるようですよ
ガッさん・通ってみたさん、ご教授ありがとうございます。
環境はVB6です。失礼致しました。
参考URL有り難うございます。
また、わからなくなったら質問させて頂きます。
1の質問の方は解決しました。有り難うございました。
先ほどのレスから今まで、いろいろとやってみたのですが、2の方が全然できません…。
もし、よろしければFileListBoxでmp3ファイルを選択し、vbmp3を使って再生するまでのコードを書いていただきたいです。
よろしくお願い致します。
http://www.angel.ne.jp/~mike/vbmp3/func.html
これを見ればわかりますよ
すみません、このページをみたのですができませんでした。
文面だと、どこがどうわからないのか質問しにくいのでコードを書かせて下さい。
Private Sub File1_DblClick()
Dim data As InputInfo
If vbmp3_open(File1.FileName, data) = True Then
Call vbmp3_play
Exit Sub
End If
End Sub
Private Sub Form_Load()
Call vbmp3_init
File1.Pattern = "*.mp3"
End Sub
以上のコードで、変な部分があればご教授願います。
気づいた点を書きます。
今後の質問の書き方の参考にして下さい。
>Private Sub Form_Load()
> Call vbmp3_init
> File1.Pattern = "*.mp3"
>End Sub
初期化が成功したかどうかの判定が出来ない。
初期化が成功したかどうかの記述もない。→できませんでしたの一言で片付けられている
>Private Sub File1_DblClick()
>Dim data As InputInfo
>If vbmp3_open(File1.FileName, data) = True Then
> Call vbmp3_play
> Exit Sub
>End If
>End Sub
InputInfoの定義が記されていないので正しいのかどうか分からない
vbmp3_openを実行した結果が記されていないので戻り値が
TrueかFalseか分からない→できませんでしたの一言で片付けられている
各関数の定義(Declare)が記されていないので関数が正しく呼べているのか
どうか分からない→できませんでしたの一言で片付けられている
vbmp3_playの実行結果を判定できない。
実行結果に対する記述もない→できませんでしたの一言で片付けられている
あと、そのコードでは
> Exit Sub
は不要
とりあえずそのコードを実行した時に、どこでエラーが出たのか書いておくとこちらが確認しやすいです
っていうか、こちらはそちらの状況がわからないので、情報は出し惜しみせずに提示してください
というわけで・・・
「InputInfo」の定義はしてありますか?提示されたコードにはないですが
「なにそれ」と思う前に、「vbmp3_open」の説明を見てください
bbbさん・通ってみたさん、ご返信ありがとうございます。
すみません…なにぶんVBを始めたばかりなものでご容赦願います。
定義は、モジュール(.bas)に
Declare Function vbmp3_init Lib "VBMP3.dll" () As Boolean
Declare Function vbmp3_free Lib "VBMP3.dll" () As Boolean
Declare Function vbmp3_open Lib "VBMP3.dll" (ByVal pszName As String, pInfo As InputInfo) As Boolean
Declare Function vbmp3_close Lib "VBMP3.dll" () As Boolean
Declare Function vbmp3_play Lib "VBMP3.dll" () As Boolean
Declare Function vbmp3_stop Lib "VBMP3.dll" () As Boolean
Public Type InputInfo
szTrackName As String * 128
szArtistName As String * 128
channels As Long
bitrate As Long
samplingRate As Long
TotalSec As Long
End Type
>とりあえずそのコードを実行した時に、どこでエラーが出たのか
エラーすら発生しません…。
すみませんが、もしよろしければお手本としてコードを書いて頂けると嬉しいです。お願い致します。
>>エラーすら発生しません…。
もう一度自分で書いたコードを見てください
>>If vbmp3_open(File1.FileName, data) = True Then
>> Call vbmp3_play
>> Exit Sub
>>End If
vbmp3_openで開けなかった(Falseになった)からそのまま処理が終了したのでは?
この式を逆に
If vbmp3_open(File1.FileName, data) = False Then
Stop
End If
としてみてください。
プログラムが止まれば開けていないわけです
まぁ
>>File1.FileName
という時点でアウトな感じですが
返信ありがとうございます。
通ってみたさんの記述通り書いたら、見事に止まりました…
どうすれば…(涙
最後に書きましたが、
>>File1.FileName
ここに問題があります
FileListBoxのこのプロパティにはパスが入っていません
ファイル名のみが入っています
つまり、元のプログラムの
>>If vbmp3_open(File1.FileName, data) = True Then
を
If vbmp3_open("MP3ファイルのパス\" + File1.FileName, data) = True Then
としなければならないわけです
返信が遅くなり申し訳ありません。
>If vbmp3_open("MP3ファイルのパス\" + File1.FileName, data) = True Then
を
If vbmp3_open(File1.Path + File1.FileName, data) = True Then
にしてやってみたのですが、何の反応もありませんでした…
通ってみたさんが 2005/09/18(日) 07:44:38 に教えて下さったコードに
File1.Pathを足して、
If vbmp3_open(File1.Path + File1.FileName, data) = False Then
Stop
End If
と書いてみましたが、これもまた無反応でした。
> 何の反応もありませんでした…
> これもまた無反応でした。
もらった助言をそのまま試し、ただ「思うように動かなかった」と報告されても、
・これ以上の助言をするための情報が提供されていない
・自分で考えることをあきらめ、言われたことだけやって
「できない」とぼやいているように誤解される
という2点から、話が進展しにくくなってしまっています。
で、とりあえず、以下の項目を確認し、結果の情報を提供してみてください。
(1) vbmp3_openはTrue/Falseのどちらを返しているのか?
無反応なのはIf文で振り分けてしまっているからで、vbmp3_open自身は
TrueかFalseを返しているはずです。
これは1行ずつトレース実行していくことで確認できます。
たぶんFalseが返ってきているんではないかと推測しますが、
まれにvbmp3_openの時点でハングアップしている可能性もないわけではないので、
まずはここをきちんと確認しましょう。
(2) File1.Path、File1.FileName、dataにはそれぞれどのようなデータが
格納されているのか?
(1)でvbmp3_openがFalseを返していると仮定すると、その原因として
最も可能性が高いのは「引数が不適切」だということです。
すべての引数になんというデータが入っているのかを確認してください。
よくあるのが「File1.Path + File1.FileName」とした時に、
「\」が足りないなどの単純ミスですので、「File1.Path + File1.FileName」
の状態でどのような文字列になっているかも確認してください。
また、dataの各要素については、どういう意味で何を格納しているのかの
説明が必要です。
1:VBMP3は「改」を使っていますか?>使ってなかったらそちらにしてみる
2:vbmp3_play後のステータスはどうなっていますか?>getStateで調べる
関数名 : vbmp3_getState()
機能 : 再生状態と再生時間の取得
引数 : sec = 再生時間取得用
戻り値 : 0 = 停止中
1 = 再生中
2 = 一時停止中
説明 : 再生状態と再生経過時間を取得します。
とか
自分で見当つけてガリガリデバッグしてみないと全然進まないですよ
ツイート | ![]() |