VB6+stools ユーザのための、VB.NET+ManagedStools 移行方法

ここではVisual Basic 2005 ExpressEditionを想定して解説します
あくまで「VB6+stoolsからどう変わるのか」の解説のみです。
VB.NETの基礎などは他のサイトさんを参考にしてください。

解説対応バージョン
stools=2.3b
MST=1.1.0.xxxx

0.関数対応表
1.準備
2.STInit、STEnd
3.STReadFile、STReadMP3File、STReadOggFile
4.STPlay、STPlayEx、STLoop、STStop
5.STSetPitch、STGetPitch
6.STSetPan
7.STSetVolume
8.STSetPosition、STGetPosition、STGetBufferSize
9.その他の機能
A.注意・特記事項

関数対応表

まずはstoolsの関数とManagedSToolsのメソッドまたはプロパティの関係を表に示します。
stools ManagedSTools 備考
STInit MSTNew MSTInitializerクラスに所属
STEnd MSTDispose
STReadFile ReadFile
StreamFile
SoundToolクラスに所属
(クラスインスタンスから使用)
STReadMP3File
SRReadOggFile
STPlay PlaySound
STPlayEx
STLoop
STStop PauseSound
StopSound
STSetPitch Pitch
STGetPitch
STSetPan Pan
STSetVolume Volume
STSetPosition BufferPosition
Position
STGetPosition
STGetBufferSize BufferLength
Length

この表にない関数、及びMIDI関連の機能はサポートしていません。

準備

まずはプロジェクトにManegedSToolsのDLLを参照します。
DLLは、プロジェクトを移動させても参照先が崩れないようなパスに
置くと吉。

DLLバージョンは、VB2005の場合は2.0フォルダのものを、VB2008の場合は3.5フォルダのものを使用します。
(VB2008を使用してもターゲットフレームワークが.NET2.0の場合はDLLも2.0を使用してください)

DLLの参照は、プロジェクトのプロパティから「参照」を選択した画面で行います。
クリックで拡大

「追加」ボタンをクリックすると参照の追加が表示されるので、「参照」タブでDLLを選択します。


次に名前空間をインポートします。
「TKA」「TKA.ManagedSTools」の2つが追加されているはずです。

これでDLLの準備は完了です

STInit、STEnd

STInitに相当するメソッドがMSTNewメソッドです。
ウィンドウベースのプロジェクトであれば、メインフォームのLoadイベントで
以下のようにMSTNewを呼び出すだけです。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    MSTInitializer.MSTNew(Me.Handle)
End Sub

初期化に失敗するとFalseが返ります。

STEndに相当するメソッドはMSTDisposeメソッドです。
終了時の破棄は、FormClosingイベントで行ってください。
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.Load
    MSTInitializer.MSTDispose()
End Sub

MSTNewと同じく、破棄に失敗するとFalseが返ります。

STReadFile、STReadMP3File、STReadOggFile

従来は各関数を直接ID番号を指定してファイルを読み込ませていました。
ManagedSToolsでは、オブジェクト指向に則った仕様となっているため
ファイルをオブジェクトとして扱います。以下の例ではボタンクリックで読み込ませています。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
End Sub

SoundTool型のインスタンスを生成し、ReadFileメソッドでファイルを読み込ませます。
ReadFileメソッドはオーバーロードされており、mixCountを指定することもできます。

コンストラクタでもファイル名を指定できますが、強制的にメモリへの読み込みとなります。
ストリーミング再生を行いたい場合はコンストラクタでは指定せず、
ReadFileの代わりにStreamFileメソッドでファイルを読み込ませます。

なお従来のSToolsではファイルごとに個別の関数を使用しましたが、
ManagedSToolsではWave/MP3/OGGすべての形式をひとつのメソッドで扱えます。

※STReadByte系の関数には対応していません

STPlay、STPlayEx、STLoop、STStop

STPlay、STPlayEx、STLoopはPlaySoundメソッドにまとめられています。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testSound.PlaySound(False)
End Sub

例ではPlaySoundメソッドの引数にFalseと指定されていますが、
これはループフラグとなっています。TrueでループするためSTLoopに相当します。

またオーバーロードでパン・ボリュームを指定できます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testSound.PlaySound(100, 80)
End Sub

例ではパンを100(右側)、ボリュームを80と指定しています。
STPlayExに相当するメソッドですが、この場合ループフラグは指定できません。
またパン・ボリュームの片方のみ設定するためのフラグはありません。

STStopに相当するのはPauseSoundメソッドStopSoundメソッドです。
従来はフラグ指定で一時停止をしていましたが、ManagedSToolsでは別のメソッドとなっています。

STSetPitch、STGetPitch

STSetPitch、STGetPitchはPitchプロパティとして実装されています。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    Dim testPitch As Integer
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testPitch = testSound.Pitch '取得
    testSound.Pitch = testPitch + 100 '設定
End Sub

※相対指定には対応していません。

STSetPan

STSetPanはPanプロパティとして実装されています。
取得も可能となっていますが、ManagedSToolsの機能を使わずにパンを変更した場合
正常な値を取得することはできません。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    Dim testPan As Short
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testPan = testSound.Pan '取得
    testSound.Pan = -50 '設定
End Sub

※相対指定には対応していません。

STSetVolume

STSetVolumeはVolumeプロパティとして実装されています。
取得も可能となっていますが、ManagedSToolsの機能を使わずにボリュームを変更した場合
正常な値を取得することはできません。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    Dim testVolume As UShort
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testVolume = testSound.Volume '取得
    testSound.Volume = 80 '設定
End Sub

※相対指定には対応していません。

STSetPosition、STGetPosition、STGetBufferSize

STSetPosition、STGetPositionはBufferPositionプロパティとして実装されています。
同様にSTGetBufferSizeはBufferLengthプロパティとして実装されています。
BufferLengthプロパティは取得のみ可能です。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim testSound As SoundTool
    Dim testLen As Integer
    Dim testPos As Integer
    
    testSound = New SoundTool()
    testSound.ReadFile("C:\test.mp3")
    testLen = testSound.BufferLength '取得のみ
    testPos = testSound.BufferPosition '取得
    testSound.BufferPosition = 0 '設定
End Sub

LengthプロパティPositionプロパティでは
長さ、位置を秒数で取得/設定できます。
※ファイルによっては正確な秒数とならない場合があります。

その他の機能

以下の読み取り専用プロパティがあります。
FileNameIDIsPlaingIsStreamingMediaFormat

FileNameプロパティは、現在読み込まれているファイルのパスが返ります。
IDプロパティはstoolsで使用されているID番号が返ります。
IsPlayingプロパティは、現在再生されているかどうかを判定します。
IsStreamingプロパティは、現在のファイルがストリーム再生となっているか判定します。
MediaFormatプロパティは、読み込まれているファイルの形式を判定します。

注意・特記事項

・同じ変数に対して再度インスタンス生成を行う場合は、必ず前インスタンスを破棄(Dispose)してください。
破棄せずにインスタンス生成を行うと、異なるサウンドIDで生成されるためメモリが圧迫されます。



戻る