summaryrefslogtreecommitdiffstats
path: root/wrapper/wrapper.cpp
blob: b5da36884737f013e5797708a58839fbc9de7f80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdlib.h>
#include <stdio.h>

#include "wrapper.h"

#define FILENAME "/tmp/modplayjs.mod"

#ifdef __cplusplus
extern "C" {
#endif

void* initialize_player(char* filename) {
  player* p = new player(filename);
  if (p->valid()) {
    return p;
  }

  free_player(p);
  return NULL;
}

buf_wrap* read_from_player(void* ptr, bool loop) {
  player* p = reinterpret_cast<player*>(ptr);
  return p->read(loop);
}

void free_buffer(buf_wrap* ptr) {
  delete[] (float*)ptr->buf;
  delete ptr;
}

void free_player(void* ptr) {
  if (ptr != NULL) {
    delete reinterpret_cast<player*>(ptr);
  }
}

char* write_to_file(void* ptr, int size) {
  char* filename = FILENAME;
  FILE* p = fopen(filename, "wb");
  if (p == NULL) {
    return NULL;
  }
  fwrite(ptr, size, 1, p);
  fclose(p);
  free(ptr);

  return filename;
}

#ifdef __cplusplus
} /* extern "C" */
#endif