• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z graniem dźwięku w programie

VPS Starter Arubacloud
0 głosów
222 wizyt
pytanie zadane 14 grudnia 2018 w C i C++ przez Patryk_04 Nowicjusz (230 p.)
edycja 14 grudnia 2018 przez Patryk_04

Cześć,

chciałem użyć funkcji PlaySound w moim programie i mam problem w momencie kiedy chce dołączyć <mmsystem.h> do programu. Wywala mi masę błędów. Przeglądałem wczoraj internet chyba z 2 godziny i wydaje mi się że powinien dołączyć "Winmm.lib"( ale nie jestem pewien na 100%). Problem polega na tym że nie wiem jak to zrobić? Używam Clion.

Kilka pierwszych błędów: 

error: 'UINT' does not name a type; did you mean 'EINTR'? typedef UINT MMVERSION;

error: 'DWORD' does not name a type DWORD ms;

error: 'BYTE' does not name a type BYTE hour;

 

Poniżej CMakeLists z mojego projektu:

cmake_minimum_required(VERSION 3.10)
project(HelloASGE)

if(UNIX AND APPLE)
    set(PLATFORM "osx" )
elseif(UNIX)
    set(PLATFORM "linux")
else()
    set(PLATFORM "win")
endif()

## hide console unless debug build ##
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND WIN32)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mwindows")
endif()

set(CMAKE_DEBUG_POSTFIX d)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

## set to true to use dlls instead of static libs ##
set(BUILD_SHARED_LIBS false)

## itch.io and gamedata settings ##
set(GAMEDATA_FOLDER "Data")
set(ITCHIO_USER     "")

## files used to build this game
add_executable(
        ${PROJECT_NAME}
        main.cpp
        Source/MyGame.cpp
        Source/MyGame.h
        Source/Vector.h
        Source/Vector.cpp)

## library includes
target_include_directories(
        ${PROJECT_NAME}
        PRIVATE
        "${CMAKE_SOURCE_DIR}/Libs/ASGE/include")

## compile language settings
target_compile_features(
        ${PROJECT_NAME}
        PRIVATE
        cxx_std_17)

## build the game libs folder
add_library(ASGE UNKNOWN IMPORTED)
add_subdirectory(Libs)
target_link_libraries(${PROJECT_NAME} ASGE)

## copy the dlls post build
if(BUILD_SHARED_LIBS)
    # copy the game engine dll to bin
    add_custom_command(
            TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
            "${GameEngineDLL}"
            $<TARGET_FILE_DIR:${PROJECT_NAME}>)

    if(WIN32 AND NOT MSVC)
        # copy the mingw runtime files to bin
        add_custom_command(
                TARGET ${PROJECT_NAME} PRE_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy_directory
                ${CMAKE_SOURCE_DIR}/Libs/mingw64/bin $<TARGET_FILE_DIR:${PROJECT_NAME}>)
    endif()
endif()


## enable static linking against gcc build
if (WIN32 AND NOT BUILD_SHARED_LIBS AND NOT MSVC)
    target_link_libraries(${PROJECT_NAME} -static)
endif()

## utility scripts
include(CMake/itch.io.cmake)

## build types
set(CMAKE_CONFIGURATION_TYPES Debug;Release)

 

1 odpowiedź

+1 głos
odpowiedź 14 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
Przed #include <mmsystem.h> daj #include <windows.h>

Zresztą, dla PlaySound samo #include <windows.h> powinno wystarczyć.
komentarz 14 grudnia 2018 przez Patryk_04 Nowicjusz (230 p.)
Okej, zamieniłem miejscami <windows.h> i <mmsystem.h> i prawie działa. (Nie wiedziałem że kolejność ma znaczenie) Teraz został jeden błąd tylko:

undefined reference to `__imp_PlaySoundA' collect2.exe: error: ld returned 1 exit status
komentarz 14 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
To teraz musisz linkować z biblioteką winmm, co normalnie się robi za pomocą opcji -lwinmm

Ale jak to zrobić w Clion czy Cmake - nie wiem.
komentarz 16 grudnia 2018 przez Patryk_04 Nowicjusz (230 p.)
W końcu się udało, po przekopaniu połowy internetu ;) Wystarczało dodać "winmm.lib" do tej linijki "target_link_libraries(${PROJECT_NAME} ASGE)".

 

Ale chyba nie mogę mieć za łatwo, bo nieważne jakiej funkcji użyje czy PlaySound czy sndPlaySound, grany jest dźwięk komunikatu z windowsa zamiast mojego dźwięku z pliku. Ktoś ma pomysł czemu tak jest?
komentarz 17 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
PlaySound nie może znaleźć pliku. Użyj pełnej bezwzględnej ścieżki do pliku, albo upewnij się, że plik audio jest w katalogu bieżącym.
komentarz 17 grudnia 2018 przez Patryk_04 Nowicjusz (230 p.)
Jeżeli dam całą ścieżkę do pliku to dźwięk się odtwarza, problem jest taki że używam githuba i jeśli ktoś ściągnie mój projekt to ścieżka będzie inna i nie będzie działało. Można to jakoś ominąć, albo kazać programowi znaleźć miejsce w którym jest projekt zapisany?

Podobne pytania

0 głosów
1 odpowiedź 366 wizyt
pytanie zadane 8 maja 2019 w C i C++ przez Franek313 Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 196 wizyt
pytanie zadane 22 stycznia 2017 w C i C++ przez 0xf Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 102 wizyt
pytanie zadane 13 marca 2021 w Systemy operacyjne, programy przez BartasV99 Nowicjusz (200 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...