Получить путь к звуковому файлу для SDL_mixer с VC ++ (VS2017) - PullRequest
0 голосов
/ 08 апреля 2020

Мне удалось установить 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, я представляю, что это папка для внешних ресурсов, которые вы хотели бы использовать (извините, если я ошибаюсь).

all sound file are into Resources Files

После того, как мои файлы импортированы, я не могу понять, как восстановить их путь, чтобы передать его функции SDL ( Mix_LoadMUS () ), которая будет обращаться к аудиофайлу играть.

Так что я хотел бы знать, как ресурсы управляются в проекте Visual Studio.

1 Ответ

0 голосов
/ 08 апреля 2020

Вы хотите разместить свои ресурсы там, где их путь известен относительно вашего исполняемого файла во время выполнения. Тогда все, что вам нужно сделать, это; определите путь выполнения вашего исполняемого файла (во всех операционных системах есть способ сделать это - например, в Linux; прочитайте символическую ссылку /proc/self/exe), а затем преобразуйте этот путь в путь к вашему ресурсу.

Например: если вы всегда устанавливаете свою программу так, чтобы она находилась в some/random/install/location/bin и ресурсах, то также go в some/random/install/location/resources. Затем, как только вы получите some/random/install/location/bin/myexecutable в качестве текущего пути выполнения вашей программы, все, что вам нужно сделать, это удалить бит «myexecutable» и заменить его на «../resources/myresource.file».

Это будет работать независимо от того, где установлена ​​ваша программа, до тех пор, пока структура каталога под установочным каталогом относительно вашего исполняемого файла является фиксированной (и вы должны иметь возможность контролировать это). Не используйте абсолютные пути - это ломается, как только кто-то устанавливает вашу программу в неожиданном месте. Сделайте все относительно того, где находится исполняемый файл.

...