簡體   English   中英

使用 VC++ (VS2017) 獲取 SDL_mixer 的聲音文件路徑

[英]Get sound file path for SDL_mixer with VC++ (VS2017)

我設法安裝了 SDL 並將其集成到我的 Visual Studio 2017 項目中Windows 10

我的主要問題是音頻文件的播放。 確實,當我輸入音頻文件的絕對路徑時,一切正常。

#include "framework.h"
#include "Pokemon.h"
#include <iostream>
#include <SDL.h>
#include <SDL_mixer.h>

#define WAV_PATH "C:\\Users\\quent\\Documents\\Polytech\\Annee3\\projetPerso\\Sons\\musique.mp3" //WORK TOTALY FINE
#define WAV2_PATH ".\\Resource Files\\musique.mp3" //Mix_LoadMUS(WAV2_PATH) return NULL, so the file is not played

const int WIDTH = 800, HEIGHT = 600;

int main(int argc, char *argv[])
{

    Mix_Music *wave = NULL;
    Mix_Music *wave2 = NULL;

    if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) != 0) {
        std::cout << "Impossible d'ouvrir mixer " << SDL_GetError() << std::endl;
        return 1;
    }

    wave = Mix_LoadMUS(WAV2_PATH);
    wave2 = Mix_LoadMUS(WAV2_PATH);

    if (wave == NULL || wave2 == NULL) {
        std::cout << "Impossible de chargé un fichier .ogg " << SDL_GetError() << std::endl;
        return 2;
    }

    if (Mix_PlayMusic(wave, 1) != 0) {
        std::cout << "Impossible de jouer le fichier " << SDL_GetError() << std::endl;
        return 1;
    }

    SDL_Delay(5000);

    if (Mix_PlayMusic(wave2, 1) != 0) {
        std::cout << "Impossible de jouer le fichier " << SDL_GetError() << std::endl;
        return 1;
    }

    while (Mix_PlayingMusic());

    Mix_FreeMusic(wave);
    Mix_FreeMusic(wave2);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return EXIT_SUCCESS;
}

當我在“資源文件”文件夾中將文件導入我的項目時,它變得復雜起來。 不知道 Visual Studio,我想這是用於您想要使用的外部資源的文件夾(如果我錯了,對不起)。

所有聲音文件都在資源文件中

導入文件后,我無法弄清楚如何恢復它們的路徑以將其提供給將訪問要播放的音頻文件的 SDL function ( Mix_LoadMUS() )。

所以我想知道如何在 Visual Studio 項目中管理資源。

您希望將資源放置在相對於運行時可執行文件的路徑已知的位置。 那么你需要做的就是; 計算出可執行文件的運行時路徑(所有操作系統都有辦法做到這一點——例如,在 Linux 上;閱讀/proc/self/exe符號鏈接),然后將該路徑轉換為您的資源的路徑。

例如:如果您始終將程序安裝在some/random/install/location/bin和 resources 中,那么 go 也在some/random/install/location/resources中。 然后,一旦您獲得some/random/install/location/bin/myexecutable作為程序的當前運行時路徑,您需要做的就是剝離“myexecutable”位並將其替換為“../resources/myresource 。文件”。

無論您的程序安裝在哪里,只要安裝目錄下的目錄結構(相對於您的可執行文件)是固定的(並且您應該能夠控制它),這將起作用。 不要使用絕對路徑——一旦有人將你的程序安裝在一個意想不到的位置,它就會中斷。 使所有內容都與可執行文件的位置相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM