2013-05-20 6 views
-2

매우 구체적인 질문이 있습니다. .wav 파일의 파형을 그리는 방법을 정확하게 알고 싶습니다. 더 구체적으로 wav 파일에서 파형 x 및 y 좌표를 얻는 데 도움이 필요합니다.이 점을 그리는 과정은이 질문의 대상이 아닙니다. 나는 지금까지 다른 사람들의 일을 토대로 한 모든 시도로 게시 할 관련 코드가 없으며 그 코드를 작동시킬 수 없습니다..wav 파일의 파형을 그리는 방법

감사합니다.

아래의 첫 번째 링크에서 코드 작업을 시작했습니다. 사물이 정의되지 않았기 때문에 원본 코드는 여러 가지 오류가 발생하지만 수정하기가 상대적으로 쉽습니다.

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 

I는 기본적으로 각 변수의 정의 'Y로서 희미한 X'를 추가했다. 유일한 유형의 변수는 "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 

문제는 여기에서 어디로 가야로 잃었어요된다. 이 질문은 내 질문입니다. 여기

+0

확인을 클릭합니다. 나는이 질문을 코드로 수정했다. 감사. – FraserOfSmeg

답변

1

SoundFileBufferDescription 될 수 있지만, 문맥에서 나는 여기 가능성이 가장 높은 것으로 추측 것 중 하나 Stream .wav 파일의 파일 경로 또는 string (하여 FileStream, MemoryStream을 등이 될 수 있음) . SecondaryBuffer의 경우 다양한 constructor overloads을 참조하십시오.

게시 한 코드에 대한 다른 불완전한 점은 간결성을 위해 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") 

이 같이 호출 할 경우. 처음에 게시 한 자습서 (이 코드의 출처)에서 계속 작업하고 멈추었을 때 질문으로 여기에 다시 게시하면 이후 시각화를 얻을 수있는 지점까지 작업 할 수 있습니다. 대부분 당신이 필요로하는 것은 튜토리얼에 있습니다.

+0

감사합니다. 이것을 거의 사용하여 ...예외 (loadlock 예외)를 해제해야하는 문제가있었습니다. 그러나 그것을 끄고 난 후에 그것은 모두 잘 움직였다! – FraserOfSmeg

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)가 쓰여지고 공유되어 있으므로 변수의 유형을 얻을 수있는 경우 다른 함수를 처리 할 수 ​​있다고 생각합니다. 내가 뭘했는지 알아 보겠습니다. 변수의 유형 또는 변수를 찾는 방법에 대한 조언입니다.

감사

+1

아마도 새로운 질문으로 게시해야합니다. 이것은 StackOverflow 방법 -> 명확하고 집중된 특정 질문 및 하나의 대답입니다. 질문을 명확하게하고 좋은 코드 샘플로 잘 정의하면 좋은 반응을 얻게 될 것입니다. –