2

Aubio ライブラリに格納されている C 値にアクセスしようとしていますが、それが Struct 値にアクセスする方法だと思います。

ライブラリには C Struct と fvec_get_data 関数があります。

typedef struct {
  uint_t length;  /**< length of buffer */
  smpl_t *data;   /**< data vector of length ::fvec_t.length */
} fvec_t;

//in fvec.c

smpl_t * fvec_get_data(const fvec_t *s) {
  return s->data;
}

Swift に戻り、提案どおりにデータを読み込みます。

            let oout = new_fvec(n_coefs)
            let c = new_aubio_mfcc(win_s, n_filters, n_coefs, samplerate);
            var read: uint_t = 0

            var dataStore = [smpl_t]()

                while (true) {
                    aubio_source_do(b, a, &read)
                    aubio_mfcc_do(c, iin, oout)

                    dataStore.append(fvec_get_data(oout).pointee)
                    total_frames += read

                    if (read < hop_size) { break }
                }

ただし、これはすべてのデータを取得するわけではなく、配列内の最初の値のみを取得します。while ループで比較すると、次のように呼び出すことができます。

 fvec_print(oout) // this prints out ALL values not just the first

...

これを行うcコードを見ると:

void fvec_print(const fvec_t *s) {
  uint_t j;
  for (j=0; j< s->length; j++) {
    AUBIO_MSG(AUBIO_SMPL_FMT " ", s->data[j]);
  }
  AUBIO_MSG("\n");
}

すべての値を Swift に取り込む方法についての提案は大歓迎です。

4

1 に答える 1