Ejemplo n.º 1
0
DLL_EXPORT int libsox_(Main_init)(lua_State *L)
{
  luaT_pushmetatable(L, torch_Tensor);
  luaT_registeratname(L, libsox_(Main__), "libsox");
  // Initialize sox library
  sox_format_init();
  return 1;
}
Ejemplo n.º 2
0
static libsox_(AudioData) libsox_(read_audio_file)(const char *file_name)
{
  // Create sox objects and read into int32_t buffer
  sox_format_t *fd;
  fd = sox_open_read(file_name, NULL, NULL, NULL);
  if (fd == NULL)
    abort_("[read_audio_file] Failure to read file");
  
  int nchannels = fd->signal.channels;
  long buffer_size = fd->signal.length;
  double rate = fd->signal.rate;
  int32_t *buffer = (int32_t *)malloc(sizeof(int32_t) * buffer_size);
  size_t samples_read = sox_read(fd, buffer, buffer_size);
  if (samples_read == 0)
    abort_("[read_audio_file] Empty file or read failed in sox_read");
  // alloc tensor 
  THTensor *tensor = THTensor_(newWithSize2d)(nchannels, samples_read / nchannels );
  tensor = THTensor_(newContiguous)(tensor);
  real *tensor_data = THTensor_(data)(tensor);
  // convert audio to dest tensor 
  int x,k;
  for (k=0; k<nchannels; k++) {
    for (x=0; x<samples_read/nchannels; x++) {
      *tensor_data++ = (real)buffer[x*nchannels+k];
    }
  }
  // free buffer and sox structures
  sox_close(fd);
  free(buffer);
  THTensor_(free)(tensor);

  libsox_(AudioData) ret;
  ret.t = tensor;
  ret.nChannels = nchannels;
  ret.bufferSize = buffer_size;
  ret.rate = rate;
  ret.lenSecs = (samples_read / nchannels) / rate;
  return ret;
}
Ejemplo n.º 3
0
static int libsox_(Main_load_full)(lua_State *L) {
  const char *filename = luaL_checkstring(L, 1);
  libsox_(AudioData) data = libsox_(read_audio_file)(filename);  

  lua_newtable(L);

  lua_pushstring(L, "tensor");
  luaT_pushudata(L, data.t, torch_Tensor);
  lua_settable(L, -3);

  libsox_(TableNum)(L, "numChannels", data.nChannels);
  libsox_(TableNum)(L, "bufferSize", data.bufferSize);
  libsox_(TableNum)(L, "rate", data.rate);
  libsox_(TableNum)(L, "lenSecs", data.lenSecs);

  return 1;
}
Ejemplo n.º 4
0
static int libsox_(Main_load)(lua_State *L) {
  const char *filename = luaL_checkstring(L, 1);
  THTensor *tensor = libsox_(read_audio_file)(filename);
  luaT_pushudata(L, tensor, torch_Tensor);
  return 1;
}
Ejemplo n.º 5
0
  free(buffer);
  THTensor_(free)(tensor);

  // return tensor 
  return tensor;
}

static int libsox_(Main_load)(lua_State *L) {
  const char *filename = luaL_checkstring(L, 1);
  THTensor *tensor = libsox_(read_audio_file)(filename);
  luaT_pushudata(L, tensor, torch_Tensor);
  return 1;
}

static const luaL_Reg libsox_(Main__)[] =
{
  {"load", libsox_(Main_load)},
  {NULL, NULL}
};

DLL_EXPORT int libsox_(Main_init)(lua_State *L)
{
  luaT_pushmetatable(L, torch_Tensor);
  luaT_registeratname(L, libsox_(Main__), "libsox");
  // Initialize sox library
  sox_format_init();
  return 1;
}

#endif
Ejemplo n.º 6
0
  lua_pushstring(L, "tensor");
  luaT_pushudata(L, data.t, torch_Tensor);
  lua_settable(L, -3);

  libsox_(TableNum)(L, "numChannels", data.nChannels);
  libsox_(TableNum)(L, "bufferSize", data.bufferSize);
  libsox_(TableNum)(L, "rate", data.rate);
  libsox_(TableNum)(L, "lenSecs", data.lenSecs);

  return 1;
}

static const luaL_Reg libsox_(Main__)[] =
{
  {"load", libsox_(Main_load)},
  {"load_full", libsox_(Main_load_full)},
  {NULL, NULL}
};

DLL_EXPORT int libsox_(Main_init)(lua_State *L)
{
  luaT_pushmetatable(L, torch_Tensor);
  luaT_registeratname(L, libsox_(Main__), "libsox");
  // Initialize sox library
  sox_format_init();
  return 1;
}

#endif