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

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

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

BASS.NETの使用例

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

■98737 / inTopicNo.1)  BASS.NETの使用例
  
□投稿者/ くま (86回)-(2021/12/19(Sun) 06:42:01)

分類:[VB.NET/VB2005 以降] 

2021/12/19(Sun) 07:28:38 編集(投稿者)
正確には質問ではなく回答になりますが長いので新規に立てます

BASS.NETの使用例
vb.net; .net framework 4.8; windowフォーム; windows10

必要なもの
[Form1.vb]フォームファイル
 [AddFileButton]ボタン
 [PlayButton]ボタン
 [StopButton]ボタン
 [PlayPanel]ラベル
 [SoundPanel]ラベル
 [PlayInfoPanel]ラベル
 [ListView1]リストビュー
 [TrackBar1]トラックバー
 [Timer1]タイマー
[SoundManager.vb]クラスファイル
[SoundInfo.vb]クラスファイル

長いので分割します。

引用返信 編集キー/
■98738 / inTopicNo.2)  Re[1]: BASS.NETの使用例
□投稿者/ くま (87回)-(2021/12/19(Sun) 06:43:50)
2021/12/19(Sun) 06:44:28 編集(投稿者)
[SoundInfo.vb]クラスファイル(文字数関係で2分割)
[SoundInfo.vb]クラスファイル
Imports Un4seen.Bass

''' <summary>
''' 音源管理クラス
''’</summary>
Public Class SoundInfo
    Implements IDisposable

    Private hSound As Integer               '再生用に読み込まれた音源ファイル情報へのハンドル
    Private hSyncEnd As IntPtr              '再生終了時に実行されるモジュールハンドル
    Private SyncEndProc As SYNCPROC         '再生終了時に実行されるモジュール
    Private owner As SoundManager           'BASS.NET管理クラス

    ''' <summary>
    ''' クラス開始時
    ''' </summary>
    ''' <param name="path">音源ファイルパス</param>
    Public Sub New(ByVal owner As SoundManager, ByVal path As String)
        MyBase.New()
        Me.owner = owner
        '音源を取得する。 
        Call GetSoundInfo(path)
    End Sub

    Public ReadOnly Property Path As String = ""  '音源ファイルパス
    Public ReadOnly Property Title As String = "none Title" 'タイトル

    Private _SoundTime As String = "--:--:--"
    ''' <summary>
    ''' 音源の長さを表す文字列を取得します。
    ''' </summary>
    ''' <returns>音源の長さを表す文字列。</returns>
    Public ReadOnly Property SoundTime As String  '音源の長さ
        Get
            Call UpdateSoundInfo()
            Return Me._SoundTime
        End Get
    End Property

    Private _PlayTime As String = "--:--:--"
    ''' <summary>
    ''' 再生位置を表す文字列を取得します。
    ''' </summary>
    ''' <returns>再生位置表す文字列。</returns>
    Public ReadOnly Property PlayTime As String
        Get
            Call UpdateSoundInfo()
            Return Me._PlayTime
        End Get
    End Property

    Private _Maximum As Integer = 0
    ''' <summary>
    ''' 再生トラックバー最大位置を取得します。
    ''' </summary>
    ''' <returns>再生トラックバー最大位置を表すミリ秒。</returns>
    Public ReadOnly Property Maximum As Integer
        Get
            Call UpdateSoundInfo()
            Return Me._Maximum
        End Get
    End Property

    Private _PlayValue As Integer = 0
    ''' <summary>
    ''' 再生トラックバー再生位置を取得または設定します。
    ''' </summary>
    ''' <returns>再生トラックバー再生位置を表すミリ秒。</returns>
    Public Property PlayValue As Integer
        Get
            Call UpdateSoundInfo()
            Return Me._PlayValue
        End Get
        Set(value As Integer)
            Call Bass.BASS_ChannelSetPosition(Me.hSound, Bass.BASS_ChannelSeconds2Bytes(Me.hSound, value / 1000))
        End Set
    End Property

    Private _Volume As Single = 1.0
    ''' <summary>
    ''' 音源ファイルの再生ボリュームを表す値を取得または設定します。
    ''' </summary>
    ''' <returns>再生ボリュームを表すSingle値。最大が1.0で最小が0.0。</returns>
    Public Property Volume As Single
        Get
            Call UpdateSoundInfo()
            Return Me._PlayValue
        End Get
        Set(value As Single)
            Bass.BASS_ChannelSetAttribute(Me.hSound, BASSAttribute.BASS_ATTRIB_VOL, value)
        End Set
    End Property

    Private _IsActive As Integer
    ''' <summary>
    ''' 音源ファイルの状態を取得します。
    ''' </summary>
    ''' <returns>音源ファイルの状態を表すBASSActive値</returns>
    Public ReadOnly Property IsActive As Integer
        Get
            Call UpdateSoundInfo()
            Return Me._IsActive
        End Get
    End Property

    ''' <summary>
    ''' 音源を取得する。 
    ''' </summary>
    ''' <param name="path">音源ファイルパス</param>
    Private Sub GetSoundInfo(ByVal path As String)

        '音源情報の取得
        If System.IO.File.Exists(path) Then
            Me._Path = path                                                     '音源ファイルパス
            Me._Title = System.IO.Path.GetFileNameWithoutExtension(path)        'タイトル
            '音源ファイルの読み込み
            Me.hSound = Bass.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_DEFAULT)
            If Me.hSound = 0 Then
                Throw New ArgumentException("音源ストリームを作成できません。 ")
            End If
        Else
            Throw New ArgumentException("音源ファイルが存在しません。")
        End If
        '再生終了時に実行されるモジュールハンドル
        Me.SyncEndProc = AddressOf Me.syncEnd
        Me.hSyncEnd = Bass.BASS_ChannelSetSync(Me.hSound, BASSSync.BASS_SYNC_END, 0, Me.SyncEndProc, IntPtr.Zero)
        If Me.hSyncEnd = IntPtr.Zero Then
            Throw New InvalidOperationException("同期設定を行えませんでした。")
        End If

        '音源の現在の状態を取得する。
        Call UpdateSoundInfo()

    End Sub
    ''' <summary>
    ''' 再生完了時イベント
    ''' </summary>
    ''' <param name="handle">MP3ハンドル</param>
    ''' <param name="channel">チャンネル</param>
    ''' <param name="data">データ</param>
    ''' <param name="user">ユーザ</param>
    Public Sub syncEnd(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
        Bass.BASS_ChannelStop(handle)                '停止
        Bass.BASS_ChannelSetPosition(handle, 0.0)    '再生位置を先頭へ
        Call Me.owner.EventRlayEnd(Me)
    End Sub
    ''' <summary>
    ''' 音源の現在の状態を取得する。
    ''' </summary>
    Private Sub UpdateSoundInfo()
        Me._IsActive = Bass.BASS_ChannelIsActive(Me.hSound)                  '音源ファイルの状態
        Dim sec As Double = 0
        Select Case Me._IsActive
            Case BASSActive.BASS_ACTIVE_STOPPED, _  'チャネルがアクティブでないか、ハンドルが有効なチャネルではありません。 
                 BASSActive.BASS_ACTIVE_PLAYING, _  'チャンネルは再生中(または録音中)です。 
                 BASSActive.BASS_ACTIVE_PAUSED      'チャネルは一時停止されています。 

                sec = Bass.BASS_ChannelBytes2Seconds(Me.hSound, Bass.BASS_ChannelGetLength(Me.hSound))
                Me._Maximum = Math.Round(sec * 1000)                                    '再生トラックバー最大位置
                sec = Math.Round(sec * 1000) / 1000
                Me._SoundTime = TimeSpan.FromSeconds(sec).ToString("hh\:mm\:ss\.fff")   '音源の長さ

                sec = Bass.BASS_ChannelBytes2Seconds(Me.hSound, Bass.BASS_ChannelGetPosition(Me.hSound))
                Me._PlayValue = Math.Round(sec * 1000)                                  '再生トラックバー再生位置
                sec = Math.Round(sec * 1000) / 1000
                Me._PlayTime = TimeSpan.FromSeconds(sec).ToString("hh\:mm\:ss\.fff")    '再生位置

                Call Bass.BASS_ChannelGetAttribute(Me.hSound, BASSAttribute.BASS_ATTRIB_VOL, Me._Volume)    '再生ボリューム

            Case BASSActive.BASS_ACTIVE_STALLED     '再生を継続するためのデータが不足しているため、ストリームの再生が停止しました
                Me._SoundTime = "--:--:--.---"                                          '音源の長さ
                Me._Maximum = 0                                                         '再生トラックバー最大位置
                Me._PlayTime = "--:--:--.---"                                           '再生位置
                Me._PlayValue = 0                                                       '再生トラックバー再生位置
                Me._Volume = 0                                                          '再生ボリューム
        End Select
    End Sub

引用返信 編集キー/
■98739 / inTopicNo.3)  Re[2]: BASS.NETの使用例
□投稿者/ くま (88回)-(2021/12/19(Sun) 06:44:54)
    ''' <summary>
    ''' 再生
    ''' </summary>
    Public Sub Play()
        '音源の現在の状態を取得する。
        Call UpdateSoundInfo()
        Select Case Me.IsActive
            Case BASSActive.BASS_ACTIVE_STOPPED, _  'チャネルがアクティブでないか、ハンドルが有効なチャネルではありません。 
                 BASSActive.BASS_ACTIVE_PAUSED      'チャネルは一時停止されています。 
                Call Bass.BASS_ChannelPlay(Me.hSound, False)    '再生
        End Select
    End Sub
    ''' <summary>
    ''' 一時停止
    ''' </summary>
    Public Sub Pause()
        '音源の現在の状態を取得する。
        Call UpdateSoundInfo()
        Select Case Me.IsActive
            Case BASSActive.BASS_ACTIVE_PLAYING     'チャンネルは再生中(または録音中)です。 
                Call Bass.BASS_ChannelPause(Me.hSound)          '一時停止
        End Select
    End Sub
    ''' <summary>
    ''' 停止
    ''' </summary>
    Public Sub [Stop]()
        '音源の現在の状態を取得する。
        Call UpdateSoundInfo()
        Select Case Me.IsActive
            Case BASSActive.BASS_ACTIVE_PLAYING     'チャンネルは再生中(または録音中)です。 
                Bass.BASS_ChannelStop(Me.hSound)                '停止
                Bass.BASS_ChannelSetPosition(Me.hSound, 0.0)    '再生位置を先頭へ
        End Select
    End Sub
    ''' <summary>
    ''' クラス解放時
    ''' </summary>
    Private disposedValue As Boolean
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not disposedValue Then
            If disposing Then
                ' TODO: マネージド状態を破棄します (マネージド オブジェクト)
            End If
            ' TODO: アンマネージド リソース (アンマネージド オブジェクト) を解放し、ファイナライザーをオーバーライドします
            ' TODO: 大きなフィールドを null に設定します
            If Me.hSound <> 0 Then
                Call Me.Stop()
                Call Bass.BASS_StreamFree(Me.hSound)
                Me.hSound = 0
            End If
            disposedValue = True
        End If
    End Sub
    ' ' TODO: 'Dispose(disposing As Boolean)' にアンマネージド リソースを解放するコードが含まれる場合にのみ、ファイナライザーをオーバーライドします
    ' Protected Overrides Sub Finalize()
    '     ' このコードを変更しないでください。クリーンアップ コードを 'Dispose(disposing As Boolean)' メソッドに記述します
    '     Dispose(disposing:=False)
    '     MyBase.Finalize()
    ' End Sub
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを 'Dispose(disposing As Boolean)' メソッドに記述します
        Dispose(disposing:=True)
        GC.SuppressFinalize(Me)
    End Sub
End Class

引用返信 編集キー/
■98740 / inTopicNo.4)  Re[3]: BASS.NETの使用例
□投稿者/ くま (89回)-(2021/12/19(Sun) 06:45:45)
2021/12/19(Sun) 06:46:24 編集(投稿者)
[SoundManager.vb]クラスファイル
Imports Un4seen.Bass

''' <summary>
''' BASS.NET管理クラス
''' 
'''[ツール(T)][NuGet パッケージ マネージャー(N)][ソリューションの NuGet パッケージ管理(N)...]
'''"Bass.NetWrapper"で検索して追加する。
'''https://paltee.net/archives/783
'''この方法だと Registration-Key が必要でない(らしい)
'''
''' コンパイルはx86/x64どちらか必須
''' </summary>
Public Class SoundManager
    Implements IDisposable
    ''' <summary>
    ''' BASS.NETが初期化されているかをを示す値を取得します。
    ''' </summary>
    ''' <returns>BASS.NETが初期化されている場合、true。それ以外の場合false。</returns>
    Public ReadOnly Property IsBassInitialized As Boolean = False
    ''' <summary>
    ''' プラグイン選択用ファイルフィルター
    ''' </summary>
    ''' <returns></returns>
    Public ReadOnly Property pluginFileFilter As String = ""

    ''' <summary>
    ''' 再生終了イベント
    ''' </summary>
    ''' <param name="sender">SoundInfoクラス</param>
    ''' <param name="e">イベント</param>
    Public Event PlayEnd(ByVal sender As Object, ByVal e As EventArgs)

    ''' <summary>
    ''' クラス開始時
    ''' </summary>
    Public Sub New(ByVal folderPath As String)
        If folderPath.Length = 0 Then
            folderPath = System.IO.Path.GetTempPath()
        End If

        'BASS.NET.dllが別に保存されている場合そのパスを指定(今回はコメントで大丈夫)
        'If Not Bass.LoadMe(folderPath) Then
        '    Throw New Exception("BASS.NET の初期化に失敗しました。")
        '    Me.IsBassInitialized = False
        '    Exit Sub
        'End If

        If Not Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero) Then
            Dim err As BASSError = Bass.BASS_ErrorGetCode()
            Throw New Exception("デバイスの初期化に失敗しました。\nError : " + err.ToString())
            Me.IsBassInitialized = False
            Exit Sub
        End If

        'プラグイン選択用ファイルフィルター
        Dim plugins As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(folderPath)
        Me._pluginFileFilter = Utils.BASSAddOnGetPluginFileFilter(plugins, vbNull)

        Me.IsBassInitialized = True

    End Sub
    Public Sub New()
        Call MyClass.New("")
    End Sub

    ''' <summary>
    ''' 音源を取得する。 
    ''' </summary>
    ''' <param name="path">音源ファイルパス</param>
    Public Function GetSoundInfo(ByVal path As String) As SoundInfo
        Return New SoundInfo(Me, path)
    End Function
    ''' <summary>
    ''' 再生終了イベントを発生
    ''' </summary>
    ''' <param name="si">SoundInfoクラス</param>
    Friend Sub EventRlayEnd(ByVal si As SoundInfo)
        RaiseEvent PlayEnd(si, New EventArgs)
    End Sub
    ''' <summary>
    ''' クラス解放時
    ''' </summary>
    Private disposedValue As Boolean
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not disposedValue Then
            If disposing Then
                ' TODO: マネージド状態を破棄します (マネージド オブジェクト)
            End If
            ' TODO: アンマネージド リソース (アンマネージド オブジェクト) を解放し、ファイナライザーをオーバーライドします
            ' TODO: 大きなフィールドを null に設定します
            If Not Me.IsBassInitialized Then
                Return
            End If
            Try
                Bass.BASS_Stop()
                Bass.BASS_PluginFree(0)
                Bass.BASS_Free()
            Catch ex As Exception
            End Try
            disposedValue = True
        End If
    End Sub
    ' ' TODO: 'Dispose(disposing As Boolean)' にアンマネージド リソースを解放するコードが含まれる場合にのみ、ファイナライザーをオーバーライドします
    ' Protected Overrides Sub Finalize()
    '     ' このコードを変更しないでください。クリーンアップ コードを 'Dispose(disposing As Boolean)' メソッドに記述します
    '     Dispose(disposing:=False)
    '     MyBase.Finalize()
    ' End Sub
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを 'Dispose(disposing As Boolean)' メソッドに記述します
        Dispose(disposing:=True)
        GC.SuppressFinalize(Me)
    End Sub

End Class

引用返信 編集キー/
■98741 / inTopicNo.5)  Re[4]: BASS.NETの使用例
□投稿者/ くま (90回)-(2021/12/19(Sun) 06:47:16)
2021/12/19(Sun) 06:48:40 編集(投稿者)
[Form1.vb]フォームファイル
Public Class Form1
    Private WithEvents sm As New SoundManager   'BASS.NET管理クラス
    Private playIndex As Integer = -1           '再生アイテム位置
    ''' <summary>
    ''' フォーム開始時
    ''' </summary>
    ''' <param name="sender">フォーム</param>
    ''' <param name="e">イベント</param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.Timer1.Start()
    End Sub
    ''' <summary>
    ''' ファイル追加ボタン クリック時
    ''' </summary>
    ''' <param name="sender">ファイル追加ボタン</param>
    ''' <param name="e">イベント</param>
    Private Sub AddFileButton_Click(sender As Object, e As EventArgs) Handles AddFileButton.Click
        Dim opd As New OpenFileDialog
        opd.Filter = "MP3 File|*.MP3"
        opd.Multiselect = True
        If opd.ShowDialog = DialogResult.OK Then
            'リストビューアイテムの全削除
            Call ClearListView()
            '取得した音源ファイルパスからSoundInfoクラスを生成
            For Each File As String In opd.FileNames
                Dim item As ListViewItem = New ListViewItem
                Dim si As SoundInfo = sm.GetSoundInfo(File) 'BASS.NET管理クラスと関連させているので直接Newしないで下さい。
                item.Text = si.Title
                item.Tag = si
                ListView1.Items.Add(item)
            Next
            If Me.ListView1.Items.Count > 0 Then
                Me.ListView1.Items(0).Selected = True
            End If
        End If
    End Sub
    ''' <summary>
    ''' 再生ボタン クリック時
    ''' </summary>
    ''' <param name="sender">再生ボタン</param>
    ''' <param name="e">イベント</param>
    Private Sub PlayButton_Click(sender As Object, e As EventArgs) Handles PlayButton.Click
        If Me.ListView1.SelectedItems.Count > 0 Then
            Dim si As SoundInfo
            If Me.playIndex >= 0 Then
                '再生中は停止
                si = CType(Me.ListView1.Items(Me.playIndex).Tag, SoundInfo)
                Call si.Stop()
            End If
            '新たに再生開始
            si = CType(Me.ListView1.SelectedItems(0).Tag, SoundInfo)
            Call si.Play()
            Me.playIndex = Me.ListView1.SelectedItems(0).Index
        End If
    End Sub
    ''' <summary>
    ''' 停止ボタン クリック時
    ''' </summary>
    ''' <param name="sender">停止ボタン</param>
    ''' <param name="e">イベント</param>
    Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
        '再生中が存在する場合
        If Me.playIndex >= 0 Then
            '再生中は停止
            Dim si As SoundInfo = CType(Me.ListView1.Items(Me.playIndex).Tag, SoundInfo)
            Call si.Stop()
            Me.playIndex = -1
        End If
    End Sub
    ''' <summary>
    ''' リストビューアイテムの全削除
    ''' </summary>
    Private Sub ClearListView()
        For i As Integer = Me.ListView1.Items.Count - 1 To 0 Step -1
            Dim si As SoundInfo = CType(Me.ListView1.Items(i).Tag, SoundInfo)
            Call si.Dispose()   'クラスの解放
            Call Me.ListView1.Items(i).Remove() 'アイテムの削除
        Next
        Me.playIndex = -1
    End Sub
    ''' <summary>
    ''' リストビューアイテムの選択が変更になった時
    ''' </summary>
    ''' <param name="sender">リストビューアイテム</param>
    ''' <param name="e">イベント</param>
    Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
        If Me.ListView1.SelectedItems.Count > 0 Then
            Dim si As SoundInfo = CType(Me.ListView1.SelectedItems(0).Tag, SoundInfo)
            Me.PlayInfoPanel.Text = si.Path
            Me.SoundPanel.Text = si.SoundTime
            Me.TrackBar1.Maximum = si.Maximum
            Me.PlayPanel.Text = si.PlayTime
            Me.TrackBar1.Value = si.PlayValue
        Else
            Me.PlayInfoPanel.Text = ""
            Me.SoundPanel.Text = "--:--:--.---"
            Me.TrackBar1.Maximum = 0
            Me.PlayPanel.Text = "--:--:--.---"
            Me.TrackBar1.Value = 0
        End If
    End Sub
    ''' <summary>
    ''' タイマー処理
    ''' (フォームが開いてからずっと動いています。)
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If Me.ListView1.SelectedItems.Count > 0 Then
            Dim si As SoundInfo = CType(Me.ListView1.SelectedItems(0).Tag, SoundInfo)
            Me.PlayPanel.Text = si.PlayTime
            Me.TrackBar1.Value = si.PlayValue
        End If
    End Sub
    ''' <summary>
    ''' 再生スライダー変更(スクロール)時
    ''' </summary>
    ''' <param name="sender">再生スライダー</param>
    ''' <param name="e">イベント</param>
    Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
        If Me.ListView1.SelectedItems.Count > 0 Then
            Dim si As SoundInfo = CType(Me.ListView1.SelectedItems(0).Tag, SoundInfo)
            si.PlayValue = sender.value
        End If
    End Sub
    ''' <summary>
    ''' SoundManagerクラス 再生終了イベント
    ''' </summary>
    ''' <param name="sender">SoundInfoクラス</param>
    ''' <param name="e">イベント</param>
    Private Sub sm_PlayEnd(sender As Object, e As EventArgs) Handles sm.PlayEnd
        'コントロールが作成されたスレッド以外のスレッドからコントロールがアクセスされました。エラー回避
        Invoke(New NextPlayDelegate(AddressOf NextPlay))
    End Sub

    Delegate Sub NextPlayDelegate()
    ''' <summary>
    ''' 次のアイテムを再生する。
    ''' </summary>
    Private Sub NextPlay()
        '次再生するアイテムのみ選択
        For Each item As ListViewItem In Me.ListView1.Items
            If item.Index = Me.playIndex + 1 Then
                item.Selected = True
            Else
                item.Selected = False
            End If
        Next
        'アイテム選択イベントを発生
        Call Me.ListView1_SelectedIndexChanged(Me.ListView1, New EventArgs)
        '再生ボタンクリックを発生
        Call Me.PlayButton_Click(Me.PlayButton, New EventArgs)
    End Sub
End Class

引用返信 編集キー/
■98742 / inTopicNo.6)  Re[5]: BASS.NETの使用例
□投稿者/ くま (91回)-(2021/12/19(Sun) 07:03:19)
一応機能解説
・ [AddFileButton]ボタンでMP3ファイルを複数選択「OK」でリストビューに追加される
・アイテムを選択で表示情報が変化します。
[PlayPanel]ラベル
[SoundPanel]ラベル
[PlayInfoPanel]ラベル
[TrackBar1]トラックバー
・リストビューのアイテムを選択して[PlayButton]ボタンで再生
・[StopButton]ボタンで停止
・[TrackBar1]トラックバーで再生位置の変更
・再生が完了すると次のアイテムが自動再生

一応標準的な機能は網羅できてるとは思います。
あとはファイル内に記載がある情報取得ですが
https://akabeko.me/blog/2010/07/metadata-editor/
できるみたいです。(今回は勘弁して...。)

BASS.NETに関しては以下のサイトを参考にしました
https://paltee.net/archives/783
https://akabeko.me/blog/2010/01/csharp-music-player-3/
他のサイトだとリソースの解放が無かったりするので気を付けて!

あと間違いあったら優しく教えてください。
アンマネージド リソースとか、いまだにあっているか疑問なんです…。


引用返信 編集キー/
■98743 / inTopicNo.7)  Re[6]: BASS.NETの使用例
□投稿者/ くま (92回)-(2021/12/19(Sun) 07:21:53)
ここを
Me.hSound = Bass.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_DEFAULT)
こっち
Me.hSound = Bass.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_DEFAULT And BASSFlag.BASS_UNICODE)
にしないと日本語パスでダメかもしれない。

あと気になるのがハンドルを返すと書いてあってx86/x64ともにIntegerだけど大丈夫かな?



引用返信 編集キー/
■98829 / inTopicNo.8)  Re[7]: BASS.NETの使用例
□投稿者/ くま (120回)-(2021/12/24(Fri) 22:37:43)
質問者無視の為「解決済み」とする。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ