Storyboard-fm/storycore

Audio corestore

Opened this issue · 4 comments

Description

Create a new Corestore for housing all data related to a single audio recording and all of its metadata and generated assets.

Acceptance Criteria

  • The main Corestore feed should be the audio data in PCMFloat32/AudioBuffer format. (See Wavecore or Sessioncore for examples.)
  • The Corestore should provide functionality to ingest all outputs from Storyboard's audio-functions.

Additional Notes

Beyond serving as a mere archive of our users' audio, this Corestore will serve as a means for extending our real-time and user-generated audio functionality. The sub-issues of this ticket will pursue this extended functionality.

@agrathwohl using a corestore makes sense here but we'll need to create a higher level hypercore backed datastructure that a corestore can use to aggregate the various lower level hyperobjects like sessioncore and the core produced by stream analyzer errors. This could be a Hyperbee or a Hyperdrive.

Tentatively:

class Audiostore {
  constructor (corestore, [key], [options]) {
    this.store = corestore
    this.db = new Hyperbee(this.store.get({ key }))
  }
  
  get sessioncore () { 
    return new Sessioncore(this.store.get({ key: await this.db.get('/key/sessioncore') }))
  }
  get transcript () { 
    return new Transcript(this.store.get({ key: await this.db.get('/key/transcript') }))
  }
  get analyzer () { 
    return new Analyzer(this.store.get({ key: await this.db.get('/key/analyzer') })))
  } 
}
  • we need to keep track of the sample rate used to generate the Sessioncore
  • initial alignment index is just second * sampleRate = offset into sessioncore where text begins/ends
  • need to test this alignment index