C SDL2 Mixer Воспроизведение Wav с указателя - PullRequest
0 голосов
/ 25 сентября 2018

Итак, у меня есть архив, который загружает мои файлы .wav в память, и я пытаюсь воспроизвести .WAV из пустого пространства * или обработать в памяти.

II не может иметь все файлы .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_PlayMusic (Mix_Music *, int)': невозможно преобразовать аргумент1 от 'void *' до 'Mix_Music *'

Если у вас есть лучшее решение с использованием SDL2, я тоже хочу посмотреть на это.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я понял это, и он отлично работает

Вы можете просто сделать что-то вроде этого.Вам, конечно, может потребоваться изменить параметры 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);


}

РЕДАКТИРОВАТЬ Я столкнулся с другими проблемами с этим и перекрытия каналов.Попробуйте, если вам нужно, чтобы SFX и Music работали одновременно.

    Mix_OpenAudio(22050, AUDIO_S8, 1, 1024);

    SDL_RWops* rw = SDL_RWFromMem(buffer, bytestoread);

    Mix_Music* Song =  Mix_LoadMUS_RW(rw,1);

    Mix_PlayMusic(Song, -1);
0 голосов
/ 25 сентября 2018

Используйте (странно недокументированное) Mix_LoadMUS_RW() с SDL_RWops из SDL_RWFromMem().

...