Skip to content

Advanced Stream Processing

Understanding Audio Streams

AudioX provides powerful stream processing capabilities for handling audio data efficiently. This guide covers advanced stream processing techniques and best practices.

Stream Types

Input Streams

typescript
import { audioWithStreamInput } from '@stacksjs/audiox'

// Process from input stream
const inputStream: ReadableStream<Uint8Array> = getAudioStream()
await audioWithStreamInput(inputStream, 'output.mp3', {
  codec: 'mp3',
  bitrate: '192k',
})

Output Streams

typescript
import { audioWithStreamOut } from '@stacksjs/audiox'

// Process to output stream
await audioWithStreamOut('input.mp3', {
  onProcessDataFlushed: (data) => {
    // Handle intermediate data chunks
  },
  onProcessDataEnd: (finalData) => {
    // Handle final processed data
  }
})

Bidirectional Streaming

typescript
import { audioWithStreamInputAndOut } from '@stacksjs/audiox'

// Process between streams
await audioWithStreamInputAndOut(inputStream, {
  onProcessDataEnd: (data) => {
    // Handle processed output
  }
})

Memory Management

Chunked Processing

  • Process large files in chunks to maintain memory efficiency
  • Handle backpressure automatically
  • Implement proper cleanup

Buffer Management

  • Use appropriate buffer sizes
  • Implement proper buffer pooling
  • Handle buffer overflow scenarios

Error Handling

Stream Errors

typescript
try {
  await audioWithStreamInput(inputStream, 'output.mp3', {
    onError: (error) => {
      // Handle stream-specific errors
      console.error('Stream processing error:', error)
    }
  })
}
catch (error) {
  // Handle general errors
}

Recovery Strategies

  • Implement retry logic
  • Handle interrupted streams
  • Clean up resources properly

Performance Optimization

Parallel Processing

  • Process multiple chunks simultaneously
  • Balance CPU usage
  • Monitor memory consumption

Caching Strategies

  • Implement smart caching
  • Handle temporary storage
  • Clean up cached data

Best Practices

Resource Management

  1. Always close streams when done
  2. Implement proper error boundaries
  3. Monitor memory usage
  4. Clean up temporary files

Configuration

  1. Set appropriate buffer sizes
  2. Configure proper timeouts
  3. Implement retry policies
  4. Monitor stream health

Advanced Use Cases

Real-time Processing

typescript
// Real-time audio processing
async function processInRealTime(stream: ReadableStream<Uint8Array>) {
  await audioWithStreamInputAndOut(stream, {
    onProcessDataFlushed: (chunk) => {
      // Process chunks as they arrive
      handleRealTimeAudio(chunk)
    },
    onProcessDataEnd: () => {
      // Cleanup after processing
    }
  })
}

Custom Stream Transformations

typescript
// Implement custom transformations
async function customTransform(inputStream: ReadableStream<Uint8Array>) {
  return audioWithStreamInputAndOut(inputStream, {
    codec: 'pcm_s16le',
    sampleRate: 16000,
    channels: 1,
    onProcessDataEnd: (data) => {
      // Apply custom transformations
      return transformAudioData(data)
    }
  })
}

Released under the MIT License.