C SDL2混音器从指针播放Wav
因此,我有一个档案,正在加载我的.wav文件到内存中,我试图从一个空*或内存句柄中播放.wav 我不能将所有的.wav文件都放在目录中,我有一个函数可以将它们加载到内存中 下面是我正在尝试的一些代码,我已经尝试了很多东西,但其中很多似乎都不起作用,我认为SDL库正在寻找一个物理文件来加载,但我无法确认这一点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], &
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不兼容*