![]() |
Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
|
#include "qwasmwebaudiosource_p.h"#include <emscripten.h>#include <emscripten/val.h>#include <QDebug>#include <QtMath>#include <QIODevice>Go to the source code of this file.
Classes | |
| class | QWasmAudioSourceDevice |
Functions | |
| EMSCRIPTEN_KEEPALIVE void | qt_onWorkletReady (int id) |
| EMSCRIPTEN_KEEPALIVE void | qt_onAudioFrameReady (int id) |
| EM_JS (void, qt_st_loadWorkletModule,(EM_VAL ctxHandle, int instanceId), { var ctx=Emval.toValue(ctxHandle);if(!Module._qtAudioData) Module._qtAudioData={};Module._qtAudioData[instanceId]=[];var code=[ 'class QtCapture extends AudioWorkletProcessor {', ' process(inputs) {', ' var input=inputs[0];', ' if(input &&input.length &&input[0] &&input[0].length) {', ' var numChannels=input.length, samplesPerChannel=input[0].length;', ' var buffer=new Float32Array(numChannels *samplesPerChannel);', ' for(var c=0;c< numChannels;c++) buffer.set(input[c], c *samplesPerChannel);', ' this.port.postMessage({ch:numChannels, spch:samplesPerChannel, buf:buffer.buffer},[buffer.buffer]);', ' }', ' return true;', ' }', '}', 'registerProcessor("qt-audio-capture", QtCapture);'].join('\n');var blob=new Blob([code], {type:'application/javascript'});var url=URL.createObjectURL(blob);ctx.audioWorklet.addModule(url).then(function() { URL.revokeObjectURL(url);Module._qt_onWorkletReady(instanceId);});}) | |
| EM_JS (EM_VAL, qt_st_createWorkletNode,(EM_VAL ctxHandle, int instanceId, int channelCount), { var node=new AudioWorkletNode(Emval.toValue(ctxHandle), 'qt-audio-capture', { numberOfInputs:1, numberOfOutputs:0, channelCount:channelCount, channelCountMode:'explicit' });node.port.onmessage=function(e) { Module._qtAudioData[instanceId].push(e.data);Module._qt_onAudioFrameReady(instanceId);};return Emval.toHandle(node);}) | |
| EM_JS (int, qt_st_readFrame,(int instanceId, float *heapPtr, int *outCh, int *outSpch), { var q=Module._qtAudioData &&Module._qtAudioData[instanceId];if(!q||!q.length) return 0;var frame=q.shift();var data=new Float32Array(frame.buf);HEAPF32.set(data, heapPtr > > 2);HEAP32[outCh > > 2]=frame.ch;HEAP32[outSpch > > 2]=frame.spch;return data.length;}) | |
| static void | convertFloatToPcm (const float *planarData, int numChannels, int samplesPerChannel, float volume, QAudioFormat::SampleFormat fmt, int bytesPerSample, char *out) |
Variables | |
| QT_BEGIN_NAMESPACE constexpr unsigned int | DEFAULT_BUFFER_DURATION = 250'000 |
| static QHash< int, QWasmAudioSource * > | s_registry |
|
static |
Definition at line 211 of file qwasmwebaudiosource.cpp.
| EM_JS | ( | EM_VAL | , |
| qt_st_createWorkletNode | , | ||
| (EM_VAL ctxHandle, int instanceId, int channelCount) | , | ||
| { var node=new AudioWorkletNode(Emval.toValue(ctxHandle), 'qt-audio-capture', { numberOfInputs:1, numberOfOutputs:0, channelCount:channelCount, channelCountMode:'explicit' });node.port.onmessage=function(e) { Module._qtAudioData[instanceId].push(e.data);Module._qt_onAudioFrameReady(instanceId);};return Emval.toHandle(node);} | ) |
| EM_JS | ( | int | , |
| qt_st_readFrame | , | ||
| (int instanceId, float *heapPtr, int *outCh, int *outSpch) | , | ||
| { var q=Module._qtAudioData &&Module._qtAudioData[instanceId];if(!q||!q.length) return 0;var frame=q.shift();var data=new Float32Array(frame.buf);HEAPF32.set(data, heapPtr > > 2);HEAP32[outCh > > 2]=frame.ch;HEAP32[outSpch > > 2]=frame.spch;return data.length;} | ) |
| EM_JS | ( | void | , |
| qt_st_loadWorkletModule | , | ||
| (EM_VAL ctxHandle, int instanceId) | , | ||
| { var ctx=Emval.toValue(ctxHandle);if(!Module._qtAudioData) Module._qtAudioData={};Module._qtAudioData[instanceId]=[];var code=[ 'class QtCapture extends AudioWorkletProcessor {', ' process(inputs) {', ' var input=inputs[0];', ' if(input &&input.length &&input[0] &&input[0].length) {', ' var numChannels=input.length, samplesPerChannel=input[0].length;', ' var buffer=new Float32Array(numChannels *samplesPerChannel);', ' for(var c=0;c< numChannels;c++) buffer.set(input[c], c *samplesPerChannel);', ' this.port.postMessage({ch:numChannels, spch:samplesPerChannel, buf:buffer.buffer},[buffer.buffer]);', ' }', ' return true;', ' }', '}', 'registerProcessor("qt-audio-capture", QtCapture);'].join('\n');var blob=new Blob([code], {type:'application/javascript'});var url=URL.createObjectURL(blob);ctx.audioWorklet.addModule(url).then(function() { URL.revokeObjectURL(url);Module._qt_onWorkletReady(instanceId);});} | ) |
| EMSCRIPTEN_KEEPALIVE void qt_onAudioFrameReady | ( | int | id | ) |
Definition at line 39 of file qwasmwebaudiosource.cpp.
References QWasmAudioSource::audioDataCallback().
| EMSCRIPTEN_KEEPALIVE void qt_onWorkletReady | ( | int | id | ) |
Definition at line 38 of file qwasmwebaudiosource.cpp.
References QWasmAudioSource::workletReadyCallback().
|
constexpr |
Definition at line 16 of file qwasmwebaudiosource.cpp.
|
static |
Definition at line 20 of file qwasmwebaudiosource.cpp.