C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: フルパスになってしまいます。


(過去ログ 171 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■98690 / inTopicNo.1)  フルパスになってしまいます。
  
□投稿者/ アン (11回)-(2021/12/17(Fri) 22:37:18)

分類:[.NET 全般] 

2021/12/17(Fri) 22:38:55 編集(投稿者)
こんばんは
ご質問させて申し訳ございません。

リストはListView1を使用しています。

BASS.NET.DLL
http://bass.radio42.com/
こちらのライブラリを使いました。

Imports Un4seen.Bass

Public Class Form1
 Dim Stream As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Bass.net.dll(参照に追加)
        Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
    End Sub
 'リスト再生
    Private Sub PlayButton_Click(sender As Object, e As EventArgs) Handles PlayButton.Click
        Select Case Bass.BASS_ChannelIsActive(Stream)
            Case BASSActive.BASS_ACTIVE_PAUSED
                Bass.BASS_ChannelPlay(Stream, False)
                Timer4.Start()
            Case BASSActive.BASS_ACTIVE_STOPPED
                If ListView1.SelectedIndices.Count > 0 Then
                    Bass.BASS_ChannelStop(Stream)
                    Bass.BASS_StreamFree(Stream)
                    Stream = Bass.BASS_StreamCreateFile(ListView1.Items(ListView1.SelectedIndices(0)).Text, 0, 0, BASSFlag.BASS_DEFAULT)

                    Bass.BASS_ChannelPlay(Stream, False)
                    BassLabel.Text = "(" & DurationString(Stream) & ")" & System.IO.Path.GetFileNameWithoutExtension(ListView1.Items(ListView1.SelectedIndices(0)).Text)
                    TrackBar2.Maximum = CInt(Bass.BASS_ChannelBytes2Seconds(Stream, Bass.BASS_ChannelGetLength(Stream)))
                   ' SetVolume(Stream)
                    'VisualX(PictureBox1)
                    Timer4.Start()
                End If
            Case BASSActive.BASS_ACTIVE_PLAYING
                If ListView1.SelectedIndices.Count > 0 Then
                    Bass.BASS_ChannelStop(Stream)
                    Bass.BASS_StreamFree(Stream)
                    Stream = Bass.BASS_StreamCreateFile(ListView1.Items(ListView1.SelectedIndices(0)).Text, 0, 0, BASSFlag.BASS_DEFAULT)

                    Bass.BASS_ChannelPlay(Stream, False)
                    BassLabel.Text = "(" & DurationString(Stream) & ")" & System.IO.Path.GetFileNameWithoutExtension(ListView1.Items(ListView1.SelectedIndices(0)).Text)
                    TrackBar2.Maximum = CInt(Bass.BASS_ChannelBytes2Seconds(Stream, Bass.BASS_ChannelGetLength(Stream)))
                   'SetVolume(Stream)
                    'VisualX(PictureBox1)
                    Timer4.Start()
                End If
        End Select

    End Sub
Private Sub AddFileButton_Click(sender As Object, e As EventArgs) Handles AddFileButton.Click
        'Add FileNames
'フルパスではなく、ファイル名として表示
dim FilePath as String'2,
        Dim k As New OpenFileDialog
        k.Filter = "MP3 File|*.MP3"
        k.Multiselect = True
        If k.ShowDialog = DialogResult.OK Then
            For Each File As String In k.FileNames'フルパスで表示されます。
                ListView1.Items.Add(File)
            Next

’For Each Files As String In k.FileNames'ファイル名でリストに表示されます。
' FilePath = IO.Path.GetFileName(Files)
'ListView1.Items.Add(FilePath)
            Next

            ListView1.Items(0).Selected = True
            ListView1.Select()
            PlayButton.PerformClick()
        End If
    End Sub

Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
        TimPanel.Text = currentPopstring(Stream)'曲の再生時間
        TrackBar2.Value = CInt(Bass.BASS_ChannelBytes2Seconds(Stream, Bass.BASS_ChannelGetPosition(Stream)))
        If TrackBar2.Value = TrackBar2.Maximum Then
            Bass.BASS_ChannelPlay(Stream, False)

        End If
Private Sub TrackBar2_Scroll(sender As Object, e As EventArgs) Handles TrackBar2.Scroll

        Bass.BASS_ChannelSetPosition(Stream, Bass.BASS_ChannelSeconds2Bytes(Stream, CInt(TrackBar2.Value)))

    End Sub

1,
 For Each File As String In k.FileNames'フルパスで表示されます。
                ListView1.Items.Add(File)
            Next
でフルパスになっていると思われます。

2,で問題が発生します。

ファイル名でリストは表示されましたが、時間と曲の長さが0:01で止まったままになってしまい
そして、曲も再生しません。(トラックバー2も含む)

「解決したい事」
ファイル名として曲を再生したいのですが、どのように改変したらよろしいでしょうか?
コード長くなってしまい申し訳ございませんがよろしくお願いいたします。

環境Vistual Studio 2022 VB.NET Frameworck4.7.2です。
BASS.NET.DLL参照追加
ビルドしたdebugフォルダの中にBASS.DLLとBASS.NET.DLLを入れました
参考
http://bass.radio42.com/
http://www.un4seen.com/


引用返信 編集キー/
■98695 / inTopicNo.2)  Re[1]: フルパスになってしまいます。
□投稿者/ くま (63回)-(2021/12/17(Fri) 23:20:51)
2021/12/17(Fri) 23:21:30 編集(投稿者)
たぶんhttps://paltee.net/archives/783辺り参考にしていませんか?
まずMP3ファイルを読み込むわけですからフルパスの情報は必ず必要です。

まず表示のみ「ファイル名のみ」にしたいのであれば、

パス文字列からファイル名部分を取り出すには?
https://atmarkit.itmedia.co.jp/ait/articles/0405/28/news083.html

For Each File As String In k.FileNames'フルパスで表示されます。
    'ListView1.Items.Add(File) 'これを
    'こう変更
    Dim item As ListViewItem = New ListViewItem
    item.Text = System.IO.Path.GetFileName(File) '表示用(Text)
    item.Tag = File                               '再生用(Tag)
    ListView1.Items.Add(item)
Next

これでListViewのItemに「ファイル名のみ」の情報と「ファイルのフルパス」情報が設定されます

あとはMP3ファイルを読み込む所を
'これを
'Stream = Bass.BASS_StreamCreateFile(ListView1.Items(ListView1.SelectedIndices(0)).Text, 0, 0, BASSFlag.BASS_DEFAULT)
'こう変更
Stream = Bass.BASS_StreamCreateFile(ListView1.Items(ListView1.SelectedIndices(0)).Tag, 0, 0, BASSFlag.BASS_DEFAULT)

で直るはずですが、ソースが一部の為判断がこれ以上はできません。
修正して確認してください。

引用返信 編集キー/
■98709 / inTopicNo.3)  Re[2]: フルパスになってしまいます。
□投稿者/ くま (72回)-(2021/12/18(Sat) 15:41:39)
2021/12/18(Sat) 15:52:19 編集(投稿者)

4点ほど追加
1. 変数名はStreamでなくhandle、hMP3、辺りが妥当
というのもBass.BASS_StreamCreateFileが返しているのはあくまでハンドルですから。あとハンドルだからデータ型もIntPtr型ですね

2. BASS.NET.DLLは「Any CPU」ではダメで必ず「x86」「x64」を指定してください。

3. 最低限の構成でも音源は再生されますか?
いきなり色々書いてもどこが間違っているか分かりません。
別プロジェクトで試されて正誤を確認されるのが一番早いですよ。

4. ハンドル、ロック、ガベージコレクションの知識が無いと「BASS.NET.DLL」は使いこなせません
その辺りは大丈夫ですか?

引用返信 編集キー/
■98717 / inTopicNo.4)  Re[3]: フルパスになってしまいます。
□投稿者/ くま (76回)-(2021/12/18(Sat) 18:25:50)
> Select Case Bass.BASS_ChannelIsActive(Stream)

ここの判定初回はStream = 0 なんで
BASSActive定数外の値が帰ってきてませんか?
実際の値と
BASS_ErrorGetCodeで確認してみてください。
http://www.un4seen.com/doc/#bass/BASS_ErrorGetCode.html
引用返信 編集キー/
■98721 / inTopicNo.5)  Re[3]: フルパスになってしまいます。
□投稿者/ アン (12回)-(2021/12/18(Sat) 19:25:01)
No98709 (くま さん) に返信
くまさん
回答ありがとうございます。

>「Any CPU」ではダメで必ず「x86」「x64」を指定してください。
大変申し訳ございません。Any CPUでビルドしています。
X64/X86に設定した所、警告が出てしまいました。

ググって見つけた動画を参考にしたチュートリアルを元に参考したコードを使用したものです。

動画のURLをこちらに投稿しようとしても「迷惑投稿」というエラーがでてしまい。動画のURL貼り付けられません。

警告でた文
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
警告 BC42021 As' 句のない関数です。戻り値は Object 型と見なされます。 Music_Player
警告 BC42021 As' 句のない関数です。戻り値は Object 型と見なされます。 Music_Player
警告 BC42021 As' 句のない関数です。戻り値は Object 型と見なされます。 Music_Player
警告 BC42021 As' 句のない関数です。戻り値は Object 型と見なされます。 Music_Player
警告 BC42021 As' 句のない関数です。戻り値は Object 型と見なされます。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'IntPtr' から 'Integer' への暗黙的な変換。 Music_Player_P1
警告 BC42016 'String' から 'UInteger' への暗黙的な変換。 Music_Player_P1
警告 BC42016 'IntPtr' から 'Integer' への暗黙的な変換。 Music_Player_P1
警告 BC42016 'Integer' から 'IntPtr' への暗黙的な変換。 Music_Player_P1
警告 BC42016 'Integer' から 'IntPtr' への暗黙的な変換。 Music_Player_P1
警告 COM 参照 "WMPLib" をパス "C:\WINDOWS\system32\wmp.dll" から処理しています。'IWMPGraphEventHandler.NotifyAcquireCredentials' の引数のうち少なくとも 1 つをランタイム マーシャラーでマーシャリングできません。 したがってこのような引数はポインターとして渡され、アンセーフ コードの使用が必要になります。 Music_Player
警告 COM 参照 "WMPLib" をパス "C:\WINDOWS\system32\wmp.dll" から処理しています。プロパティ get アクセス操作子 'sessionPlaylistCount' (有効な戻り値の型のない型 'WMPLib.IWMPNowPlayingHelperDispatch' 上) がタイプ ライブラリ インポーターで見つかりました。 インポーターはこのプロパティをメソッドとしてインポートすることを試行します。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'Double' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42016 'Double' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42016 'String' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42016 'Double' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42016 'Boolean' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42032 演算子 '<>' に対して使用される Object 型のオペランドです。オブジェクト ID をテストするには、'IsNot' 演算子を使用してください。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42016 'String' から 'Single' への暗黙的な変換。 Music_Player
警告 BC42016 'IntPtr' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42016 'IntPtr' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42105 関数 'VisualX' は値を返さないコード パスがあります。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Playe
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。
警告 BC42016 'Object' から 'Integer' への暗黙的な変換。 Music_Player
警告 BC42017 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42016 'Object' から 'Integer' への暗黙的な変換。
警告 BC42017 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player
警告 BC42019 演算子 '&' に対して使用される Object 型のオペランドです。ランタイム エラーが発生する可能性があります。 Music_Player
警告 BC42016 'Object' から 'String' への暗黙的な変換。 Music_Player

Any CPUだと警告は出ませんでした。

修正及び警告の文をもう一度作り直してみます。

Function 変数名(ByVal shandle As Integer)


End Function
このような変数名が警告がでてしまいました。(5個作ってます)

修正後
>For Each File As String In k.FileNames'フルパスで表示されます。
> 'ListView1.Items.Add(File) 'これを
> 'こう変更
> Dim item As ListViewItem = New ListViewItem
> item.Text = System.IO.Path.GetFileName(File) '表示用(Text)
> item.Tag = File '再生用(Tag)
> ListView1.Items.Add(item)
>Next

>Stream = Bass.BASS_StreamCreateFile(ListView1.Items(ListView1.SelectedIndices(0)).Tag, 0, 0, BASSFlag.BASS_DEFAULT)

>3. 最低限の構成でも音源は再生されますか?
ファイルを開いて複数開くとエラーになり、一つだけなら再生出来ました。

>4. ハンドル、ロック、ガベージコレクションの知識が無いと「BASS.NET.DLL」は使いこなせません
>その辺りは大丈夫ですか?

調べてみます。

長文失礼いたしました。

引用返信 編集キー/
■98723 / inTopicNo.6)  Re[4]: フルパスになってしまいます。
□投稿者/ くま (79回)-(2021/12/18(Sat) 19:43:50)
> 動画のURLをこちらに投稿しようとしても「迷惑投稿」というエラーがでてしまい。動画のURL貼り付けられません。
そういう場合Googleでの検索キーワードなどを書いておくのも良いですよ。

>>「Any CPU」ではダメで必ず「x86」「x64」を指定してください。
>X64/X86に設定した所、警告が出てしまいました。
Dll自体が明確に分かれているので指定しないといけないはずなんですが...?

>>3. 最低限の構成でも音源は再生されますか?
>ファイルを開いて複数開くとエラーになり、一つだけなら再生出来ました。

やっぱり...。気になった理由が
>>4. ハンドル、ロック、ガベージコレクションの知識が無いと「BASS.NET.DLL」は使いこなせません
>>その辺りは大丈夫ですか?
なんですね。

多分本気で説明しようとするなら、こちらでアンさんが作りたいものと同じものを1から作成しないといけないんですよね...
解説までつけるとここで説明しきれないですね...

アンさんが「どうしてもBASS.NET.DLLでソフトを作りたい」「そのための勉強なら一生懸命やります」という話なら
作ってもよいですが...

どうしましょ?

引用返信 編集キー/
■98733 / inTopicNo.7)  Re[5]: フルパスになってしまいます。
□投稿者/ アン (13回)-(2021/12/18(Sat) 23:05:37)
>そういう場合Googleでの検索キーワードなどを書いておくのも良いですよ。
Tutorial 5 | How to Create Playlist Song With Listview | Simple Audio Player | Visual Studio 2019
こちらの動画を参考にしてプレイリストを作りました。
>Dll自体が明確に分かれているので指定しないといけないはずなんですが...?
プラットフォームをx86にプロジェクトの名前のプロパティから「コンパイル」でx86にし
コンパイルオプションのOption stictをoffにして、ビルドした所、警告も消えました。?

警告 BC42105 関数 'VisualX' は値を返さないコード パスがあります。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。
BASS_SFX.DLLの事です。↑

End Functionの部分が緑線に表示された状態です。

>多分本気で説明しようとするなら、こちらでアンさんが作りたいものと同じものを1から作成しないといけないんですよね...
>解説までつけるとここで説明しきれないですね...
動画のようにフルパスでリスト表示されています。
これを自分でファイル名として表示させようとしました。

修正して一つ、一つ追加しないと再生しないことが分かったのですが・・・。

>アンさんが「どうしてもBASS.NET.DLLでソフトを作りたい」「そのための勉強なら一生懸命やります」という話なら
>作ってもよいですが...

>どうしましょ?

もちろん、勉強したいと思ってます。

僕が現在作ったコードをE-Mail (任意)で共有可能であれば載せておきます。





引用返信 編集キー/
■98734 / inTopicNo.8)  Re[6]: フルパスになってしまいます。
□投稿者/ くま (85回)-(2021/12/18(Sat) 23:18:49)
No98733 (アン さん) に返信
わかりましたとりあえず作って確認してみます。
なんか情報があまりにも違いすぎて試さないとはっきりした事書けませんので
ちょっとお待ちください。
あと長くなったので一度このスレ「解決済み」にしておいてください。
引用返信 編集キー/
■98735 / inTopicNo.9)  Re[7]: フルパスになってしまいます。
□投稿者/ アン (14回)-(2021/12/18(Sat) 23:28:51)
No98734 (くま さん) に返信
> ■No98733 (アン さん) に返信
> わかりましたとりあえず作って確認してみます。
> なんか情報があまりにも違いすぎて試さないとはっきりした事書けませんので
> ちょっとお待ちください。
> あと長くなったので一度このスレ「解決済み」にしておいてください。

こちらこそ大変ご迷惑をお掛けしました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -