Udostępnij przez


Odtwarzanie zasobów WAVE

[Funkcja skojarzona z tą stroną, Waveform Audio, jest starszą funkcją. Został zastąpiony przez WASAPI i Audio Graphs. WASAPI i Audio Graphs zostały zoptymalizowane dla systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał WASAPI i Audio Graphs zamiast Waveform Audio, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Możesz użyć funkcji PlaySound, aby odtworzyć dźwięk przechowywany jako zasób. Chociaż jest to również możliwe przy użyciu funkcji sndPlaySound, sndPlaySound wymaga znajdowania, ładowania, blokowania, odblokowywania i zwalniania zasobu; PlaySound osiąga to wszystko za pomocą jednego wiersza kodu.

Przykład PlaySound

PlaySound("SoundName", hInst, SND_RESOURCE | SND_ASYNC); 

Przykład sndPlaySound

Flaga SND_MEMORY wskazuje, że parametr lpszSoundName jest wskaźnikiem do obrazu w pamięci pliku WAVE. Aby dołączyć plik WAVE jako zasób do aplikacji, dodaj następujący wpis do skryptu zasobu aplikacji (. Plik RC).

soundName WAVE c:\sounds\bells.wav 

Nazwa soundName jest symbolem zastępczym nazwy, którą podajesz, aby odwoływać się do tego zasobu WAVE. Zasoby WAVE są ładowane i dostępne tak samo jak inne zasoby systemu Windows zdefiniowane przez aplikację. Funkcja PlayResource w poniższym przykładzie odtwarza określony zasób WAVE.

BOOL PlayResource(LPSTR lpName) 
{ 
    BOOL bRtn; 
    LPSTR lpRes; 
    HANDLE hResInfo, hRes; 
 
    // Find the WAVE resource. 
 
    hResInfo = FindResource(hInst, lpName, "WAVE"); 
    if (hResInfo == NULL) 
        return FALSE; 
 
    // Load the WAVE resource. 
 
    hRes = LoadResource(hInst, hResInfo); 
    if (hRes == NULL) 
        return FALSE; 
 
    // Lock the WAVE resource and play it. 
 
    lpRes = LockResource(hRes); 
    if (lpRes != NULL) { 
        bRtn = sndPlaySound(lpRes, SND_MEMORY | SND_SYNC | 
            SND_NODEFAULT); 
        UnlockResource(hRes); 
    } 
    else 
        bRtn = 0; 
 
    // Free the WAVE resource and return success or failure. 
 
    FreeResource(hRes); 
    return bRtn; 
} 

Aby odtworzyć zasób WAVE przy użyciu tej funkcji, przekaż do funkcji wskaźnik do ciągu zawierającego nazwę zasobu, jak pokazano w poniższym przykładzie.

PlayResource("soundName");