startPlayerFromStream method
Future<int>
startPlayerFromStream(
- FlutterSoundPlayerCallback callback, {
- Codec codec = Codec.pcm16,
- bool interleaved = true,
- int numChannels = 1,
- int sampleRate = 16000,
- int bufferSize = 8192,
})
Implementation
Future<int> startPlayerFromStream(
FlutterSoundPlayerCallback callback, {
Codec codec = Codec.pcm16,
bool interleaved = true,
int numChannels = 1,
int sampleRate = 16000,
int bufferSize = 8192,
//TWhenFinished? whenFinished,
}) async {
this.callback = callback;
this.interleaved = interleaved;
this.numChannels = numChannels;
this.sampleRate = sampleRate;
this.codec = codec;
callback.log(Level.debug, 'Start startPlayerFromStream to Stream');
//await AsyncWorkletNode.init();
assert(audioCtx == null);
AudioContextOptions audioCtxOptions = AudioContextOptions(
sampleRate: sampleRate,
);
audioCtx = AudioContext(audioCtxOptions);
if (!javascriptScriptLoaded) {
await audioCtx!.audioWorklet
.addModule(
"./assets/packages/flutter_sound_web/src/flutter_sound_stream_processor.js",
)
.toDart;
javascriptScriptLoaded = true;
}
AudioWorkletNodeOptions options = AudioWorkletNodeOptions(
channelCount: numChannels,
numberOfInputs: 0,
numberOfOutputs: 1,
outputChannelCount: [numChannels.toJS].toJS,
);
streamNode = AudioWorkletNode(
audioCtx!,
"flutter-sound-stream-processor",
options,
);
streamNode!.port.onmessage = (MessageEvent e) {
var x = e.type;
var y = e.origin;
var d = e.data;
var msg = d!.dartify() as Map;
var msgType = msg['msgType'];
switch (msgType) {
case 'NEED_SOME_FOOD':
callback.needSomeFood(0);
break;
case 'LOG':
logMsg(msg);
break;
case 'BUFFER_UNDERFLOW':
callback.audioPlayerFinished(1);
break;
case 'ERROR':
error(msg);
}
//int inputNo = (d!.getProperty('inputNo'.toJS) as JSNumber).toDartInt;
//print('zozo');
}.toJS;
JSObject obj = JSObject();
setProperty(obj, 'msgType', 'START_PLAYER');
setProperty(obj, 'isFloat32', codec == Codec.pcmFloat32);
setProperty(obj, 'nbrChannels', numChannels);
setProperty(obj, 'isInterleaved', interleaved);
streamNode!.port.postMessage(obj);
streamNode!.connect(audioCtx!.destination);
//streamNode!.onBufferUnderflow((int outputNo) {
//callback.needSomeFood(0);
//_logger.d('onBufferUnderflow($outputNo)');
//});
callback.startPlayerCompleted(1 /*PlayerState.playing.index*/, true, 0);
return 1; //PlayerState.playing.index; // PlayerState.isPlaying;
}