サイトにあったplayerの事について
- 評価
- クリップ 1
- VIEW 732

退会済みユーザー
こんばんは。
サイトにあったplayerを追加しました。
参考にあったサイト名:ZPlay VB.NET Class interface
http://libzplay.sourceforge.net/ZPLAYINTERFACE_VBNET.html
こちらのPlayerを追加したんですか、ちょっとお出すねしたい事があります。
教えてほしい事
リストボックスを選択すると再生したい
Imports MI_LIBZPLAY_AUDIO.libZPlay
Public Class Form1
Private player As ZPlay
Private LoadMode As Integer
Private ReverseMode As Boolean
Private Echo As Boolean
Private VocalCut As Boolean = False
Private SideCut As Boolean = False
Private NextSong As Boolean = False
Private FadeFinished As Boolean = False
' need this for managed stream
Private fStream As System.IO.FileStream = Nothing
Private br As System.IO.BinaryReader = Nothing
Private BufferCounter As Integer
Private CallbackFunc As TCallbackFunc
Private BlockSlideLeft As Boolean = False
Private BlockSlideRight As Boolean = False
''' <summary>
''' Text callback
''' </summary>
''' <param name="text"></param>
''' <remarks></remarks>
'''
Public Delegate Sub SetTextCallback(ByVal text As String)
'addfileopenfiledialog複数開けます。
Dim a As String()
Dim file As String()
Private Sub Button18_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.Click
LoadMode = 3
OpenFileDialog1.FileName = ""
OpenFileDialog1.Multiselect = True
OpenFileDialog1.Title = "開くファイルを指定"
OpenFileDialog1.Filter = "All Supported Files|*.mp3;*.mp2;*.mp1;*.ogg;*.oga;*.flac;*.wav;*.ac3;*.aac|Mp3 Files|*.mp3|Mp2 Files|*.mp2|Mp1 Files|*.mp1|Ogg Files|*.ogg|FLAC files|*.flac|Wav files|*.wav|AC-3|*.ac3|AAC|*.aac"
OpenFileDialog1.FilterIndex = 1
OpenFileDialog1.RestoreDirectory = True
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
file = OpenFileDialog1.SafeFileNames
a = OpenFileDialog1.FileNames
For b As Integer = 0 To file.Length - 1
ListBox1.Items.Add(file(b))
Next
ListBox1.SelectedIndex = 0
TextBox1.Text = System.IO.Path.GetFileName(ListBox1.SelectedItem)
End If
End Sub
Private Sub OpenFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
OpenFileDialog1.Multiselect = True
If LoadMode = 0 Then
player.Close()
If Not (player.OpenFile(OpenFileDialog1.FileName, TStreamFormat.sfAutodetect)) Then
MessageBox.Show(player.GetError(), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
ElseIf LoadMode = 1 Then
player.Close()
Dim format As TStreamFormat = player.GetFileFormat(OpenFileDialog1.FileName)
Dim fInfo As New System.IO.FileInfo(OpenFileDialog1.FileName)
Dim numBytes As Long = fInfo.Length
Dim fStream As New System.IO.FileStream(OpenFileDialog1.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim br As New System.IO.BinaryReader(fStream)
Dim stream_data() As Byte = Nothing
stream_data = br.ReadBytes(CInt(Fix(numBytes)))
If Not (player.OpenStream(True, False, stream_data, CUInt(numBytes), format)) Then
MessageBox.Show(player.GetError(), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
br.Close()
fStream.Close()
ElseIf LoadMode = 2 Then
player.Close()
Dim format As TStreamFormat = player.GetFileFormat(OpenFileDialog1.FileName)
BufferCounter = 0
Dim fInfo As New System.IO.FileInfo(OpenFileDialog1.FileName)
Dim numBytes As UInteger = CUInt(fInfo.Length)
If br IsNot Nothing Then
br.Close()
End If
If fStream IsNot Nothing Then
fStream.Close()
End If
br = Nothing
fStream = Nothing
fStream = New System.IO.FileStream(OpenFileDialog1.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
br = New System.IO.BinaryReader(fStream)
Dim stream_data() As Byte = Nothing
Dim small_chunk As UInteger = 0
small_chunk = CType(Math.Min(100000, numBytes), UInteger)
' read small chunk of data
stream_data = br.ReadBytes(CInt(Fix(small_chunk)))
' open stream
If Not (player.OpenStream(True, True, stream_data, CUInt(stream_data.Length), format)) Then
MessageBox.Show(player.GetError(), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
' read more data and push into stream
stream_data = br.ReadBytes(CInt(Fix(small_chunk)))
player.PushDataToStream(stream_data, CUInt(stream_data.Length))
'リストボックスとテキストボックス追加しました。
'リストボックスとテキストボックスに表示されます。(ボタン18)
ElseIf LoadMode = 3 Then
If Not (player.AddFile(OpenFileDialog1.FileName, TStreamFormat.sfAutodetect)) Then
MessageBox.Show(player.GetError(), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
showinfo()
player.StartPlayback()
End Sub
'曲を選択、リスト選択可能※
Dim IntSelectIndexPre As Integer = 0
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
If ListBox1.SelectedItem <> "" Then
TextBox1.Text = System.IO.Path.GetFileName(ListBox1.SelectedItem)
End If
If IntSelectIndexPre = ListBox1.SelectedIndex Then
Exit Sub
End If
IntSelectIndexPre = ListBox1.SelectedIndex
Timer1.Start()
Timer2.Start()
End Sub
’再生
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
player.StartPlayback()
End Sub
Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
player.PausePlayback()
End Sub
Private Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click
player.ResumePlayback()
End Sub
Private Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
player.StopPlayback()
End Sub
End Class
追加したコードの動作結果
開いたらリストボックスとテキストボックスに表示されました。
開いたファイルを選択すると曲を再生したいですが※の部分に
Dim IntSelectIndexPre As Integer = 0
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
If ListBox1.SelectedItem <> "" Then
TextBox1.Text = System.IO.Path.GetFileName(ListBox1.SelectedItem)
End If
If IntSelectIndexPre = ListBox1.SelectedIndex Then
Exit Sub
End If
IntSelectIndexPre = ListBox1.SelectedIndex
'※
Timer1.Start()
Timer2.Start()
player.StartPlayback()
試した結果
※の部分
player.AddFile(a(ListBox1.SelectedIndex), TStreamFormat.sfAutodetect)
いろいろ試してやった所全くリストボックスを選択はされるんですが、選択後の
再生がしないので無理なんでしょうか?
お願いします。
開発バージョン
Vistual Studio2017 VB
サイトのプロジェクト使用しています。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
複数選択を許可するだけであれば
OpenFileDialog1.Multiselect = True
を起動時に評価されるようにすれば大丈夫です。
複数開く場合...とありますが
OpenFileDialog1.FileNameをOpenFileDialog1.FileNamesに変更し(複数のファイル名を取得できるようになります)、それを配列か何かに入れてそれをリストボックスに入れるなりすればいけると思います。
もちろん受け取っただけなので、[Add file]のボタンの動作を参考にしてそれぞれ追加処理をする必要があります。
追記:
OpenFileDialog1.FileNames.Lengthで複数選択された場合
選択された個数を取得できます。
dim val as integer = OpenFileDialog1.FileNames.Length
OpenFileDialog1.FileNames(val)で指定されたvalの値の位置のファイル名を取得できます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.97%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
syameimaru
2018/04/23 14:22 編集
DLLやサンプルをダウンロードして再現しようとしたのですが、DLLが原因と思われるエラーが発生しました。libzplayにはバージョンが幾つかあると思うのですが、そちらはどのバージョンのものを使用していますか?
退会済みユーザー
2018/04/23 14:47
syameimaruさん。Libzplayのバージョンは2.0.2です。dllファイルはC:\Users\User\Documents\Visual Studio 2017\Projects\プロジェクト名\プロジェクト名\bin\Debug\Libzplay.dllここいれてます。少し内容を編集します。
この投稿は削除されました
syameimaru
2018/04/23 14:48
32bitで動作させてみたところ上手くいきました。ありがとうございます。