Не удается воспроизвести файл WAV - PullRequest
0 голосов
/ 02 ноября 2011

Я прочитал несколько уроков о том, как воспроизводить WAV-файл в VB.Net с помощью функции mciSendString ().По какой-то причине он успешно записывает и сохраняет звук в файл (я прослушал файл с помощью звукового приложения), но ничего не воспроизводит и не вызывает ошибку.

Вот код:

'Start recording
If OvalShape1.FillColor = Color.DarkRed Then
    OvalShape1.FillColor = Color.Red

    Try
        mciSendString("open new Type waveaudio Alias recsound", "", 0, 0)
        mciSendString("record recsound", "", 0, 0)
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
        OvalShape1.FillColor = Color.DarkRed
    End Try

'Stop recording
Else
    OvalShape1.FillColor = Color.DarkRed

    Try
        'generate unique filename and save as tmp file
        Dim TempFullFileName As String = IO.Path.GetTempFileName()

        'save recording
        mciSendString("save recsound " & Chr(34) & TempFullFileName & Chr(34), "", 0, 0)
        mciSendString("close recsound", "", 0, 0)

        mciSendString("open " & Chr(34) & TempFullFileName & Chr(34) & " Alias recsound", "", 0, 0)
        mciSendString("play recsound", Nothing, 0, 0)
        mciSendString("close recsound", "", 0, 0)
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
        OvalShape1.FillColor = Color.DarkRed
    End Try
End If

Первоначально я просто сохранил и проиграл файл, затем закрыл / снова открыл звуковой файл, но это не имеет значения.Я что-то упустил?

Спасибо.


Редактировать:

  1. При попытке / отлове не отображаются ошибки, возвращаемые mciSendString ->Используйте mciGetErrorString (), чтобы проверить возвращаемое значение

  2. Чтобы воспроизвести весь звуковой файл, вы должны добавить «wait» перед закрытием

Вот некоторыерабочий код:

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

Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Integer, ByVal lpstrBuffer As String, ByVal uLength As Integer) As Integer

Private Function GetMCIErrorString(ByVal ErrorCode As Integer) As String
    GetMCIErrorString = Space(1024)
    mciGetErrorString(ErrorCode, GetMCIErrorString, Len(GetMCIErrorString))
    GetMCIErrorString = Trim(GetMCIErrorString)
End Function

Private Sub Form1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.DoubleClick

    Dim SoundFile As String = "C:\Documents and Settings\joe\Local Settings\Temp\tmp8FED.wav"
    SoundFile = ControlChars.Quote & SoundFile & ControlChars.Quote

    Dim StringToOpen As String = "open " & DummyFile & " alias recsound"
    ErrCode = mciSendString(StringToOpen, "", 0, 0)
    If ErrCode <> 0 Then
        MessageBox.Show(GetMCIErrorString(ErrCode))
        Exit Sub
    End If

    ErrCode = mciSendString("play recsound wait", Nothing, 0, 0)
    If ErrCode <> 0 Then
        MessageBox.Show(GetMCIErrorString(ErrCode))
        Exit Sub
    End If

    ErrCode = mciSendString("close recsound", "", 0, 0)
    If ErrCode <> 0 Then
        MessageBox.Show(GetMCIErrorString(ErrCode))
        Exit Sub
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...