C SDL2混音器从指针播放Wav

C SDL2混音器从指针播放Wav,c,audio,sdl-2,sdl-mixer,C,Audio,Sdl 2,Sdl Mixer,因此,我有一个档案,正在加载我的.wav文件到内存中,我试图从一个空*或内存句柄中播放.wav 我不能将所有的.wav文件都放在目录中,我有一个函数可以将它们加载到内存中 下面是我正在尝试的一些代码,我已经尝试了很多东西,但其中很多似乎都不起作用,我认为SDL库正在寻找一个物理文件来加载,但我无法确认这一点 void *MusicTrack; void Load_andPlay_music(ntrack){ OpenFileFromMPQ( MusicTracks[ntrack], &

因此,我有一个档案,正在加载我的.wav文件到内存中,我试图从一个空*或内存句柄中播放.wav

我不能将所有的.wav文件都放在目录中,我有一个函数可以将它们加载到内存中

下面是我正在尝试的一些代码,我已经尝试了很多东西,但其中很多似乎都不起作用,我认为SDL库正在寻找一个物理文件来加载,但我无法确认这一点

void *MusicTrack;

void Load_andPlay_music(ntrack){

OpenFileFromMPQ( MusicTracks[ntrack], &MusicTrack) // Opens Audio track from MPQ.
Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);
music = Mix_LoadMUS(MusicTracks[ntrack]);

// I thought that once the file is loaded it might be available as part of $PATH. This is not the case.

Mix_PlayMusic(music, -1);
}
> 如果我试试这个

Mix_PlayMusic(MusicTrack, -1); 
我遇到了错误 'int Mix\u PlayMusic(Mix\u Music*,int)':无法将参数1从'void*'转换为'Mix\u Music*'

如果您有更好的解决方案使用SDL2,那么我也愿意看看


谢谢。

将(奇怪的未记录)与from一起使用。

将(奇怪的未记录)与from一起使用。

我发现了这一点,效果很好

你可以简单地做这样的事情。 当然,您可能需要更改Mix_openAudio参数以满足您的需要

void  snd_init()
{
    printf("SND INIT\n\n");
    // Initialize SDL.
    if (SDL_Init(SDL_INIT_AUDIO) < 0) {

        printf("ERROR : %s\n\n", SDL_GetError());
    }

    if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) < 0) {
        printf("SDL_mixer could not initialize! SDL_mixer Error: %s\n", Mix_GetError());
    }
    SoundInited = 1;
}

//either some function or something to read the .WAV file into memory and have it gpbuffer point to it. 

void * gpbuffer;

void playmusic(){


Mix_Chunk * Music = Mix_QuickLoad_WAV((Uint8* )gpbuffer); 
Mix_PlayChannel(2, Music, 0);


}

我想出来了,效果很好

你可以简单地做这样的事情。 当然,您可能需要更改Mix_openAudio参数以满足您的需要

void  snd_init()
{
    printf("SND INIT\n\n");
    // Initialize SDL.
    if (SDL_Init(SDL_INIT_AUDIO) < 0) {

        printf("ERROR : %s\n\n", SDL_GetError());
    }

    if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) < 0) {
        printf("SDL_mixer could not initialize! SDL_mixer Error: %s\n", Mix_GetError());
    }
    SoundInited = 1;
}

//either some function or something to read the .WAV file into memory and have it gpbuffer point to it. 

void * gpbuffer;

void playmusic(){


Mix_Chunk * Music = Mix_QuickLoad_WAV((Uint8* )gpbuffer); 
Mix_PlayChannel(2, Music, 0);


}

这似乎是一个正确的想法,但它需要一个简单的解决方案。我的程序只有32位。这让我大吃一惊,SDL_RWops与void不兼容。这似乎是个正确的想法,但它需要一个新的解决方案。我的程序只有32位。它向我尖叫,SDL_RWops与void不兼容*