VB2008で音楽早送り再生する方法を教えてください
投稿者 るきお  (社会人)
投稿日時
2010/6/5 00:20:57
こんにちは。
シンプルに書くとこんな感じです。
これだと原理がわかりやすいのはよく、機能的にも問題ないのでサンプルではこの書き方で紹介していますが、あまりにもアンチオブジェクト指向なので実際に組み込む際には
私としては下の方に書くのが好みです。
※サンプルの都合上フォームのすぐ下にClassを書いていますが、これも実際には別のSound.vbというファイルを作成してその中に書くのが良いです。蛇足でした。
シンプルに書くとこんな感じです。
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Private Declare Function mciExecute Lib "winmm.dll" (ByVal IpstrCommand As String) As Integer
'■再生
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FileName As String = "C:\Test\Test.mp3"
Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0)
Call mciExecute("set MySound speed 2000 ")
Call mciSendString("play MySound", "", 0, 0)
End Sub
'■再生終了(完全停止)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call mciSendString("stop MySound", "", 0, 0)
Call mciSendString("close MySound", "", 0, 0)
End Sub
これだと原理がわかりやすいのはよく、機能的にも問題ないのでサンプルではこの書き方で紹介していますが、あまりにもアンチオブジェクト指向なので実際に組み込む際には
私としては下の方に書くのが好みです。
Public Class Form1
Dim sound As Sound
'■再生
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sound = New Sound("C:\Test\Test.mp3")
sound.Speed = 2000
sound.Play()
End Sub
'■再生終了(完全停止)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
sound.Stop()
End Sub
End Class
Public Class Sound
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Private Declare Function mciExecute Lib "winmm.dll" (ByVal IpstrCommand As String) As Integer
Public Sub New(ByVal fileName As String)
Me.FileName = fileName
End Sub
Public Overridable Sub Play()
Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0)
Call mciExecute("set MySound speed " & Me.Speed)
Call mciSendString("play MySound", "", 0, 0)
End Sub
Public Overridable Sub [Stop]()
Call mciSendString("stop MySound", "", 0, 0)
Call mciSendString("close MySound", "", 0, 0)
End Sub
Private _FileName As String
Public Overridable Property FileName As String
Get
Return _FileName
End Get
Set(ByVal value As String)
_FileName = value
End Set
End Property
Private _Speed As Integer = 1000
Public Overridable Property Speed As Integer
Get
Return _Speed
End Get
Set(ByVal value As Integer)
_Speed = value
End Set
End Property
End Class
※サンプルの都合上フォームのすぐ下にClassを書いていますが、これも実際には別のSound.vbというファイルを作成してその中に書くのが良いです。蛇足でした。
投稿者 たわし君  (中学生)
投稿日時
2010/6/7 15:02:37
返答遅れてすみません。
ありがとうございました。
ありがとうございました。
投稿者 たわし君  (中学生)
投稿日時
2010/6/16 16:25:08
こんにちは
質問した日から2週間近くたちましたが、2点ほど気になったことがあったので質問させていただきます
(1)上の方法で試してみたところ、再生時間の取得がうまく出来なくなってしまいました。(実際よりも速くなってしまいます)
このバグを修正する方法を教えてください。
再生時間はTimerコントロールで100/1秒周期で以下のコードで取得しています
Dim Buffer As String = New String(Chr(0), 255)
Dim Position As Double
Call mciSendString("status MySound position", Buffer, Len(Buffer), 0)
Position = Val(Buffer)
(2).WMVや.WMAを早送りする方法を教えたください
http://homepage1.nifty.com/rucio/main/dotnet/Samples/SmpleCnt.htm のコードでWMVやWMAを
再生することができますが、速度を変更するとエラーが発生します
修正方法を教えてください。
しかし、こちらはついでのようなものなので、無理なら「無理」という返答で構いません
以上の2点をお願いします
質問した日から2週間近くたちましたが、2点ほど気になったことがあったので質問させていただきます
(1)上の方法で試してみたところ、再生時間の取得がうまく出来なくなってしまいました。(実際よりも速くなってしまいます)
このバグを修正する方法を教えてください。
再生時間はTimerコントロールで100/1秒周期で以下のコードで取得しています
Dim Buffer As String = New String(Chr(0), 255)
Dim Position As Double
Call mciSendString("status MySound position", Buffer, Len(Buffer), 0)
Position = Val(Buffer)
(2).WMVや.WMAを早送りする方法を教えたください
http://homepage1.nifty.com/rucio/main/dotnet/Samples/SmpleCnt.htm のコードでWMVやWMAを
再生することができますが、速度を変更するとエラーが発生します
修正方法を教えてください。
しかし、こちらはついでのようなものなので、無理なら「無理」という返答で構いません
以上の2点をお願いします
投稿者 neptune  (社会人)
投稿日時
2010/6/16 17:15:35
「mcisendcommand 早送り」をキーワードにググるとたくさんヒットします。
一番上にヒットする
マルチメディア自由自在! 高レベルMCIを使う
を見て下さい。今ならキャッシュで見られます。
VB5での解説ですが、APIの使い方は同じですから、十分な情報を得られるはずです。
この中にmsisendcommand関数の解説もありますからそれも検討してみれば如何?
Timerコントロールで100/1秒の精度はなかったと思いますよ。もっと悪いです。
一番上にヒットする
マルチメディア自由自在! 高レベルMCIを使う
を見て下さい。今ならキャッシュで見られます。
VB5での解説ですが、APIの使い方は同じですから、十分な情報を得られるはずです。
この中にmsisendcommand関数の解説もありますからそれも検討してみれば如何?
Timerコントロールで100/1秒の精度はなかったと思いますよ。もっと悪いです。
投稿者 たわし君  (中学生)
投稿日時
2010/6/17 16:06:07
>>neptuneさん
ありがとうございました。
もう少しMCIを勉強しなおしてみようと思います
また質問があるかもしれませんが、今後もよろしくお願いします。
ありがとうございました。
もう少しMCIを勉強しなおしてみようと思います
また質問があるかもしれませんが、今後もよろしくお願いします。
早送り再生(音が高くなるやつ)する方法を教えてください