Hacking Help with CSND_playsound

Rinnegatamante

Well-Known Member
Member
Joined
Nov 24, 2014
Messages
3,162
Reaction score
3,513
Trophies
2
Age
31
Location
Bologna
Website
rinnegatamante.it
XP
4,879
Country
Italy
Hello,
according to this sample provided with libctru, i'm trying to add WAV support to my LUA interpreter but i'm having issues with this.

This is my actual code:
Code:
/*----------------------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#------  This File is Part Of : ----------------------------------------------------------------------------------------#
#------- _  -------------------  ______  _  --------------------------------------------------------------------------#
#------ | | ------------------- (_____ \ | |  --------------------------------------------------------------------------#
#------ | | ---  _  _  ____    _____) )| |  ____  _  _  ____  ____  ----------------------------------------------#
#------ | | --- | | | | / _  |  |  ____/ | | / _  || | | | / _  ) / ___)  ----------------------------------------------#
#------ | |_____| |_| |( ( | |  | |      | |( ( | || |_| |( (/ / | |  --------------------------------------------------#
#------ |_______)\____| \_||_|  |_|      |_| \_||_| \__  | \____)|_|  --------------------------------------------------#
#------------------------------------------------- (____/  -------------------------------------------------------------#
#------------------------  ______  _  -------------------------------------------------------------------------------#
#------------------------  (_____ \ | |  -------------------------------------------------------------------------------#
#------------------------  _____) )| | _  _  ___  ------------------------------------------------------------------#
#------------------------  |  ____/ | || | | | /___)  ------------------------------------------------------------------#
#------------------------  | |      | || |_| ||___ |  ------------------------------------------------------------------#
#------------------------  |_|      |_| \____|(___/  ------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#- Licensed under the GPL License --------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#- Copyright (c) Nanni <[email protected]> ---------------------------------------------------------------------------#
#- Copyright (c) Rinnegatamante <[email protected]> -------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#- Credits : -----------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------#
#- Smealum for ctrulib -------------------------------------------------------------------------------------------------#
#- Aurelio for testing & bug-fixing ------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------------------*/
 
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <3ds.h>
#include "include/luaplayer.h"
 
struct wav{
u32 samplerate;
u8* audiobuf;
u32 size;
};
 
static int lua_openwav(lua_State *L)
{
    int argc = lua_gettop(L);
    if (argc != 1) return luaL_error(L, "wrong number of arguments");
    const char *file_tbo = luaL_checkstring(L, 1);
    Handle fileHandle;
    FS_archive sdmcArchive=(FS_archive){ARCH_SDMC, (FS_path){PATH_EMPTY, 1, (u8*)""}};
    FS_path filePath=FS_makePath(PATH_CHAR, file_tbo);
    Result ret=FSUSER_OpenFileDirectly(NULL, &fileHandle, sdmcArchive, filePath, FS_OPEN_READ, FS_ATTRIBUTE_NONE);
    if(ret) return luaL_error(L, "error opening file");
    u32 samplerate,bytesRead;
    u64 size;
    FSFILE_GetSize(fileHandle, &size);
    u8* audiobuf = (u8*)(malloc(size-44));
    FSFILE_Read(fileHandle, &bytesRead, 24, &samplerate, 4);
    FSFILE_Read(fileHandle, &bytesRead, 44, audiobuf, size-44);
    wav *wav_file = (wav*)malloc(sizeof(wav));
    wav_file->audiobuf = audiobuf;
    wav_file->samplerate = samplerate;
    wav_file->size = size-44;
    lua_pushnumber(L,(u32)wav_file);
    return 1;
}
 
static int lua_soundinit(lua_State *L)
{
    int argc = lua_gettop(L);
    if (argc != 0) return luaL_error(L, "wrong number of arguments");
    CSND_initialize(NULL);
    return 0;
}
 
static int lua_playWav(lua_State *L)
{
    int argc = lua_gettop(L);
    if (argc != 1) return luaL_error(L, "wrong number of arguments");
    wav* src = (wav*)luaL_checkint(L, 1);
    GSPGPU_FlushDataCache(NULL, src->audiobuf, src->size);
    CSND_playsound(0x8, CSND_LOOP_DISABLE, CSND_ENCODING_PCM16, src->samplerate, (u32*)src->audiobuf, NULL, src->size, 2, 0);
    return 0;
}
 
static int lua_soundend(lua_State *L)
{
    int argc = lua_gettop(L);
    if (argc != 0) return luaL_error(L, "wrong number of arguments");
    CSND_shutdown();
    return 0;
}
 
//Register our Sound Functions
static const luaL_Reg Sound_functions[] = {
  {"openWav",                lua_openwav},
  {"playWav",                lua_playWav},
  {"init",                    lua_soundinit},
  {"term",                    lua_soundend},
  {0, 0}
};
 
void luaSound_init(lua_State *L) {
    lua_newtable(L);
    luaL_setfuncs(L, Sound_functions, 0);
    lua_setglobal(L, "Sound");
}

And i call it in my LUA sample with this:
Code:
white = Color.new(255,255,255)
black = Color.new(0,0,0)
oldpad = Controls.read()
Sound.init()
test = Sound.openWav("/test.wav")
while true do
Screen.waitVblankStart()
Screen.refresh()
Controls.init()
pad = Controls.read()
if (Controls.check(pad,KEY_A)) then
System.exit()
end
Sound.playWav(test)
Screen.flip()
end
Sound.term()

Which is like a thing like this in C:
Code:
struct wav{
u32 samplerate;
u8* audiobuf;
u32 position;
};
 
int main(){
srvInit();
aptInit();
gfxInit();
hidInit(NULL);
irrstInit(NULL);
fsInit();
CSND_initialize(NULL);
//CODE TO LOAD WAV, SEE lua_openwav
while(aptMainLoop()){
gspWaitForVBlank();
GSPGPU_FlushDataCache(NULL, src->audiobuf, src->position);
CSND_playsound(0x8, CSND_LOOP_DISABLE, CSND_ENCODING_PCM16, src->samplerate, (u32*)src->audiobuf, NULL, src->size, 2, 0);
gfxFlushBuffers();
gfxSwapBuffers();
}
}

When i launch my interpreter, i get no sound but the rest of the homebrew works fine. Where i am wrong?
 

Site & Scene News

Popular threads in this forum