大変申し訳ありません


farbee  2005-09-17 08:45:27  No: 92301

大変申し訳ありません。
質問をさせていただきたく、レスを書いていたら何やらパソコンがバグってしまったらしく、荒らし行為としかとれないような3回連続投稿をしてしまいました。レスの削除の仕方もわからず、不愉快な気分にさせてしまいまして、
この掲示板の管理人様、閲覧者の皆様方に心よりお詫び申し上げます。大変申し訳ありませんでした。


通ってみた  2005-09-17 10:37:32  No: 92302

いや、で、肝心の質問の方は・・・
質問しないと完全に荒らしなんですが


farbee  2005-09-17 18:48:45  No: 92303

そうでした…すみません。では、質問をさせて頂きたいと思います。

1.FileListBoxにmp3ファイルだけを表示させたいのですが、どのようにすればよろしいのでしょうか?

2.FileListBoxでmp3ファイルを選択したら、再生させるようにしたいのですがどのようしすれば良いのでしょうか?vbmp3.dllでやろうとしています。

ご教授お願い致します。


ガッ  2005-09-17 19:03:36  No: 92304

環境わからないけど、きっとVB6ということで。
1.FileListBoxのPatternプロパティを見てみましょう。
    →MSDNを入れたのなら、ファイルリストボックスでF1キーを押すと…
2.ファイルリストボックスで、特定の項目が選択されたときに起こるイベントで、
    mp3ファイルを再生すればいいのです。
    …vbmp3.dll使ったことないや。
    参考URL:
    http://www.sm.rim.or.jp/~shishido/mp3dev1.html


通ってみた  2005-09-17 23:47:18  No: 92305

1の方はガッさんがヒントをくれたので大丈夫でしょう

2の方ですが、宣言をちゃんとしてあれば、OpenしてPlayするだけでいけると思います
昔使っていましたが、最近は使っていないので忘れました・・・

※プログラム終了時にVBMP3を開放するのをお忘れなく

あと、最近のWindowsMediaPlayerがインストールされていれば、mciでもMP3鳴らせるようですよ


farbee  2005-09-18 07:25:21  No: 92306

ガッさん・通ってみたさん、ご教授ありがとうございます。
環境はVB6です。失礼致しました。
参考URL有り難うございます。
また、わからなくなったら質問させて頂きます。


farbee  2005-09-18 08:30:59  No: 92307

1の質問の方は解決しました。有り難うございました。

先ほどのレスから今まで、いろいろとやってみたのですが、2の方が全然できません…。
もし、よろしければFileListBoxでmp3ファイルを選択し、vbmp3を使って再生するまでのコードを書いていただきたいです。

よろしくお願い致します。


通ってみた  2005-09-18 08:35:55  No: 92308

http://www.angel.ne.jp/~mike/vbmp3/func.html

これを見ればわかりますよ


farbee  2005-09-18 09:03:51  No: 92309

すみません、このページをみたのですができませんでした。
文面だと、どこがどうわからないのか質問しにくいのでコードを書かせて下さい。

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

以上のコードで、変な部分があればご教授願います。


bbb  2005-09-18 09:24:06  No: 92310

気づいた点を書きます。
今後の質問の書き方の参考にして下さい。

>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
は不要


通ってみた  2005-09-18 10:08:14  No: 92311

とりあえずそのコードを実行した時に、どこでエラーが出たのか書いておくとこちらが確認しやすいです
っていうか、こちらはそちらの状況がわからないので、情報は出し惜しみせずに提示してください

というわけで・・・
「InputInfo」の定義はしてありますか?提示されたコードにはないですが

「なにそれ」と思う前に、「vbmp3_open」の説明を見てください


farbee  2005-09-18 15:56:25  No: 92312

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

>とりあえずそのコードを実行した時に、どこでエラーが出たのか
エラーすら発生しません…。

すみませんが、もしよろしければお手本としてコードを書いて頂けると嬉しいです。お願い致します。


通ってみた  2005-09-18 16:44:38  No: 92313

>>エラーすら発生しません…。

もう一度自分で書いたコードを見てください

>>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

という時点でアウトな感じですが


farbee  2005-09-18 18:17:10  No: 92314

返信ありがとうございます。
通ってみたさんの記述通り書いたら、見事に止まりました…
どうすれば…(涙


通ってみた  2005-09-19 00:15:21  No: 92315

最後に書きましたが、

>>File1.FileName

ここに問題があります
FileListBoxのこのプロパティにはパスが入っていません
ファイル名のみが入っています

つまり、元のプログラムの

>>If vbmp3_open(File1.FileName, data) = True Then

If vbmp3_open("MP3ファイルのパス\" + File1.FileName, data) = True Then

としなければならないわけです


farbee  2005-09-19 18:39:35  No: 92316

返信が遅くなり申し訳ありません。

>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
と書いてみましたが、これもまた無反応でした。


さるべーじ  2005-09-19 22:17:08  No: 92317

> 何の反応もありませんでした…
> これもまた無反応でした。

もらった助言をそのまま試し、ただ「思うように動かなかった」と報告されても、

    ・これ以上の助言をするための情報が提供されていない
    ・自分で考えることをあきらめ、言われたことだけやって
      「できない」とぼやいているように誤解される

という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の各要素については、どういう意味で何を格納しているのかの
    説明が必要です。


通ってみた  2005-09-20 03:25:35  No: 92318

1:VBMP3は「改」を使っていますか?>使ってなかったらそちらにしてみる
2:vbmp3_play後のステータスはどうなっていますか?>getStateで調べる

関数名 : vbmp3_getState()
機能    : 再生状態と再生時間の取得
引数    : sec = 再生時間取得用
戻り値  : 0 = 停止中
             1 = 再生中
             2 = 一時停止中
説明    : 再生状態と再生経過時間を取得します。

とか
自分で見当つけてガリガリデバッグしてみないと全然進まないですよ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加