-2

非常に具体的な質問があります。.wav ファイルの波形を正確に描画する方法を知りたいです。さらに具体的に言えば、wav ファイルから波形の x 座標と y 座標を取得する際に助けが必要です。これらのポイントを描画するプロセスは、この質問の主題ではありません。これまでの私の試みはすべて他の人の仕事に基づいており、それらを機能させることができないため、投稿する関連コードはありません。

ありがとう。

以下の最初のリンクのコードから作業を開始しました。元のコードは定義されていないため、多くのエラーが発生しますが、これは比較的簡単に修正できます。

Private Sub cmdDefault_Click(……) Handles cmdDefault.Click
Try
SoundDevice = New Microsoft.DirectX.DirectSound.Device
SoundDevice.SetCooperativeLevel(Me.Handle_
, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal)
SbufferOriginal = New _ Microsoft.DirectX.DirectSound._
SecondaryBuffer(SoundFile, SoundDevice)
SbufferOriginal.Play(0,_
Microsoft.DirectX.DirectSound.BufferPlayFlags.Looping)
Catch ex As Exception
End Try
End Sub

基本的に、未定義の変数ごとに「Dim x as y」を追加しました。タイプが明確でない唯一の変数は「SoundFile」です。「Microsoft.DirectX.DirectSound.BufferDescription」タイプである必要があることがわかりました。したがって、上記は次のようになります。

 Private Sub cmdDefault_Click(……) Handles cmdDefault.Click
        Try
            Dim SoundDevice = New Microsoft.DirectX.DirectSound.Device
            SoundDevice.SetCooperativeLevel(Me.Handle, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal)
            Dim SbufferOriginal = New Microsoft.DirectX.DirectSound.SecondaryBuffer(Microsoft.DirectX.DirectSound.BufferDescription, SoundDevice)
            SbufferOriginal.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Looping)
        Catch ex As Exception
        End Try
    End Sub

問題は、ここからどこへ行くべきか迷っていることです。これは私の質問です。

4

2 に答える 2

1

ここにSoundFile は がありますが、コンテキストからは、 (FileStream、MemoryStream などの可能性があります) または.wav ファイルへのファイル パスのBufferDescriptionいずれかである可能性が高いと推測できます。のさまざまなコンストラクターのオーバーロードを参照してください。StreamstringSecondaryBuffer

投稿したコードに関する他の唯一の不完全な点は、簡潔にするために Sub 引数を破棄したことです (これはClickハンドラーであるため、標準の引数が必要です)。これを機能させるには、次のようなことをするだけです:

Private Sub PlaySound(ByVal SoundFilePath as String)
  Try
    SoundDevice = New Microsoft.DirectX.DirectSound.Device
    SoundDevice.SetCooperativeLevel(Me.Handle, _
       Microsoft.DirectX.DirectSound.CooperativeLevel.Normal)

    SbufferOriginal = New _ Microsoft.DirectX.DirectSound._
       SecondaryBuffer(SoundFilePath, SoundDevice)
    SbufferOriginal.Play(0, _
        Microsoft.DirectX.DirectSound.BufferPlayFlags.Looping)
  Catch ex As Exception
     'do something for exception
  End Try
End Sub

あなたはそれをどのように呼びますか

PlaySound("C:\MySounds\Foo.wav")

これでおそらく始められるはずです。最初に投稿したチュートリアル (このコードの元) を引き続き実行し、行き詰まったときに質問を投稿してここに戻すと、目的の視覚化を取得できるポイントまで作業できるはずです。必要なもののほとんどは、そのチュートリアルにあります。

于 2013-05-21T00:03:37.153 に答える
0

さて、上記のコードが機能するようになりました。次のコードに進みました。

   Sub New(ByVal SoundFilePathName As String)
       mWAVFileName = SoundFilePathName
       mOpen = OpenWAVStream(mWAVFileName)
       '******************* MAIN WORK HERE ******************
       'Parse the WAV file and read the
       If mOpen Then
              'Read the Header Data in THIS ORDER
              'Each Read results in the File Pointer Moving
              mChunkID = ReadChunkID(mWAVStream)
              mChunkSize = ReadChunkSize(mWAVStream)
              mFormatID = ReadFormatID(mWAVStream)
              mSubChunkID = ReadSubChunkID(mWAVStream)
              mSubChunkSize = ReadSubChunkSize(mWAVStream)
              mAudioFormat = ReadAudioFormat(mWAVStream)
              mNumChannels = ReadNumChannels(mWAVStream)
              mSampleRate = ReadSampleRate(mWAVStream)
              mByteRate = ReadByteRate(mWAVStream)
              mBlockAlign = ReadBlockAlign(mWAVStream)
              mBitsPerSample = ReadBitsPerSample(mWAVStream)
              mSubChunkIDTwo = ReadSubChunkIDTwo(mWAVStream)
              mSubChunkSizeTwo = ReadSubChunkSizeTwo(mWAVStream)
              mWaveSoundData = ReadWAVSampleData(mWAVStream)
              mWAVStream.Close()
       End If
   End Sub

私が聞いている問題は、各変数の型 (mOpen、mChunkID、mChunkSize、mFormatID など) を知ることです。mWAVFileName は、WAV ファイルのファイル名であるため、文字列であると推測しています。OpenWAVEStream も定義されていませんが、ファイルを開く (または、ファイルを開くことができるかどうかを確認する) ために記述する必要がある関数であると想定しています。これは、mOpen がファイルからのデータか、ファイルを開くことができるかどうかを表すブール値であることを意味します。ReadChunkID、ReadFormatID などは、最初の (ReadChunkID) が作成され共有されている関数です。変数の型を取得できれば、他の関数を解決できると思います。変数の型、またはそれらを見つける方法に関するアドバイスです。

ありがとう

于 2013-05-21T17:17:49.280 に答える