Функция остановки файла WAV - PullRequest
2 голосов
/ 03 июля 2019

Мне нужно внедрить некоторые звуки в проект, удалось сыграть партию, но мне также нужна функция, которая может остановить файл, когда это необходимо.У меня есть функция Stop ниже, которая аналогична функции воспроизведения.

Любые советы о том, почему не работает, или некоторые альтернативы, как я могу остановить файл до его окончания.

LPCSTR const Sound_File_Open = "open C:/Users/uidn1646/Desktop/sound/1162.wav alias Current_Sound_Command";

void Stop()
{
    LPCSTR const Sound_Command = "stop Current_Sound_Command ";

    MCIERROR sound_file_action = mciSendString(Sound_File_Open, NULL, 0, NULL);
    if (sound_file_action == 0) {
        mciSendString(Sound_Command, NULL, 0, NULL);
        mciSendString("close Current_Sound_Command", NULL, 0, NULL);

    }
}

1 Ответ

0 голосов
/ 03 июля 2019

Ваш код, похоже, не является проблемой.

Моя идея состоит в том, чтобы добавить условие оценки к функции остановки.

Определив, нужно ли остановить воспроизведение, если необходимо остановить воспроизведение, нажмите 'y' или продолжите воспроизведение.

Это просто простая идея. Если у вас есть другие вопросы, пожалуйста, не стесняйтесь отвечать мне.

#include <conio.h>
#include <Windows.h>
#include <iostream>

#pragma comment (lib,"Winmm.lib")
using namespace std;

LPCSTR const Sound_Command = "stop Current_Sound_Command";

void stop();

int main() 
{
    LPCSTR const Sound_File_Open = "open C:\\Users\\strives\\Desktop\\Ring10.wav type waveaudio alias Current_Sound_Command";       
    mciSendString(Sound_File_Open, NULL, 0, NULL); 
    mciSendString("play Current_Sound_Command", NULL, 0,  NULL);

    //here you need stop play
    stop();                         
    system("pause");
}

void stop()
{   
    char letter_1 = {'y'};
    cout << "Do you want to stop play?" << endl;
    cout << "y or n" << endl;
    char letter = _getch();
    if (letter == letter_1)
    {
        MCIERROR sound_file_action = mciSendString(Sound_Command, NULL, 0, NULL);
    }
}

Это простейшая демонстрация кода только для справки.

Изменено:

LRESULT CALLBACK ButtonProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    TCHAR szText[40];
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    switch (message)
    {

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_PAINT:
        GetClientRect(hwndDlg, &rect);
        GetWindowText(hwndDlg, szText, sizeof(szText));
        hdc = BeginPaint(hwndDlg, &ps);
        Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
        DrawText(hdc, szText, -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        return 0;
    case WM_LBUTTONDOWN:
    {
        mciSendString(L"open C:\\Users\\strives\\Desktop\\Ring10.wav type waveaudio alias Current_Sound_Command", NULL, 0, NULL);
        mciSendString(L"play Current_Sound_Command", NULL, 0, NULL);
    }
    break;
    case WM_LBUTTONUP:
    {
        mciSendString(L"stop Current_Sound_Command", NULL, 0, NULL);
    }
    break;
    default:
        return DefWindowProc(hwndDlg, message, wParam, lParam);
    }
    return 0;
}

Настройка функции обратного вызова кнопки, установка события мыши для кнопки, нажатие кнопки, воспроизведение файла, отпускание кнопки, остановка воспроизведения.

...