【问题标题】:Get sound file path for SDL_mixer with VC++ (VS2017)使用 VC++ (VS2017) 获取 SDL_mixer 的声音文件路径
【发布时间】:2020-07-20 22:31:27
【问题描述】:

我设法安装了 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;
}

当我将文件导入到我的项目中时,它会变得复杂,在 "Resource Files" 文件夹中。不知道 Visual Studio,我想这是用于您想使用的外部资源的文件夹(如果我错了,请见谅)。

一旦我的文件被导入,我不知道如何恢复它们的路径以将其提供给将访问要播放的音频文件。

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

【问题讨论】:

    标签: c++ visual-studio visual-c++ sdl sdl-mixer


    【解决方案1】:

    您希望将资源放置在相对于运行时可执行文件的路径已知的位置。那么你需要做的就是;计算出可执行文件的运行时路径(所有操作系统都有办法做到这一点 - 例如,在 Linux 上;阅读/proc/self/exe 符号链接),然后将该路径转换为您的资源的路径。

    例如:如果您始终安装程序以使其位于some/random/install/location/bin 和资源中,那么也进入some/random/install/location/resources。然后,一旦您获得了some/random/install/location/bin/myexecutable 作为程序的当前运行时路径,您需要做的就是去掉“myexecutable”位并将其替换为“../resources/myresource.file”。

    无论您的程序安装在哪里,只要安装目录下的目录结构(相对于您的可执行文件)是固定的(并且您应该能够控制它),这将起作用。不要使用绝对路径——一旦有人将你的程序安装在一个意想不到的位置,它就会中断。使所有内容都与可执行文件的位置相关。

    【讨论】:

    • 感谢您的回答。这就是我想要做的,但我没有成功使用 VS。以 Android 应用为例,我有一个文件夹,其中包含将在应用中使用的所有图像,我尝试用 VS 做同样的事情,但我失败了,我不知道如何处理。
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多