From f0802b289a0181c1d43fca2b8f49edcd70aca2a9 Mon Sep 17 00:00:00 2001 From: Julian Lepinski Date: Fri, 24 Apr 2015 13:20:51 -0700 Subject: [PATCH] quick demo of configurable bitrate --- example.html | 8 +++++++- oggopus.js | 27 +++++++++++++++++++++++++++ recorder.js | 3 ++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/example.html b/example.html index 796fbee5..8514a4af 100644 --- a/example.html +++ b/example.html @@ -49,6 +49,11 @@

Options

+
+ + +
+

Commands

@@ -80,7 +85,8 @@

Log

numberOfChannels: numberOfChannels.value, bitDepth: bitDepth.options[ bitDepth.selectedIndex ].value, recordOpus: recordOpus.checked, - sampleRate: sampleRate.value + sampleRate: sampleRate.value, + bitRate: bitRate.value }); recorder.addEventListener( "start", function(e){ diff --git a/oggopus.js b/oggopus.js index 9e3df299..6c0504e2 100644 --- a/oggopus.js +++ b/oggopus.js @@ -8,6 +8,7 @@ var OggOpus = function( config ){ this.maxBuffersPerPage = config.recordOpus.maxBuffersPerPage || 40; // Limit latency for streaming this.encoderApplication = config.recordOpus.encoderApplication || 2049; // 2048 = Voice, 2049 = Full Band Audio, 2051 = Restricted Low Delay this.encoderFrameSize = config.recordOpus.encoderFrameSize || 20; // 20ms frame + this.bitRate = config.bitRate; this.wavepcm = new WavePCM( config ); this.pageIndex = 0; @@ -139,6 +140,32 @@ OggOpus.prototype.initChecksumTable = function(){ OggOpus.prototype.initCodec = function() { this.encoder = _opus_encoder_create( this.outputSampleRate, this.numberOfChannels, this.encoderApplication, allocate(4, 'i32', ALLOC_STACK) ); + + var bitrateLocation = _malloc(4); + HEAP32[bitrateLocation >>> 2] = this.bitRate; + _opus_encoder_ctl( + this.encoder, + 4002, // OPUS_SET_BITRATE_REQUEST + bitrateLocation) + ; + _free(bitrateLocation); + + + var resultLocation = _malloc(4); + var resultLocationLocation = _malloc(4); + HEAP32[resultLocationLocation >>> 2] = resultLocation; + + _opus_encoder_ctl( + this.encoder, + 4003, // OPUS_GET_BITRATE_REQUEST + resultLocationLocation + ); + + var result = HEAPU32[resultLocation >>> 2]; + _free(resultLocationLocation); + _free(resultLocation); + console.log("OPUS_GET_BITRATE=" + result); + this.encoderBufferIndex = 0; this.encoderSamplesPerChannelPerPacket = this.outputSampleRate * this.encoderFrameSize / 1000; this.encoderBufferLength = this.encoderSamplesPerChannelPerPacket * this.numberOfChannels; diff --git a/recorder.js b/recorder.js index f065b094..05f11820 100755 --- a/recorder.js +++ b/recorder.js @@ -147,7 +147,8 @@ Recorder.prototype.start = function(){ inputSampleRate: this.audioContext.sampleRate, numberOfChannels: this.config.numberOfChannels, outputSampleRate: this.config.sampleRate, - recordOpus: this.config.recordOpus + recordOpus: this.config.recordOpus, + bitRate: this.config.bitRate }); this.state = "recording";