text: import { isOwnedByContext } from '../helpers/is-owned-by-context';
  export const createConstantSourceNodeRendererFactory = (connectAudioParam, createNativeConstantSourceNode, getNativeAudioNode, renderAutomation, renderInputsOfAudioNode) => {
      return () => {
          const renderedNativeConstantSourceNodes = new WeakMap();
          let start = null;
          let stop = null;
          const createConstantSourceNode = async (proxy, nativeOfflineAudioContext, trace) => {
              let nativeConstantSourceNode = getNativeAudioNode(proxy);
              /*
               * If the initially used nativeConstantSourceNode was not constructed on the same OfflineAudioContext it needs to be created
               * again.
               */
              const nativeConstantSourceNodeIsOwnedByContext = isOwnedByContext(nativeConstantSourceNode, nativeOfflineAudioContext);
              if (!nativeConstantSourceNodeIsOwnedByContext) {
                  const options = {
                      channelCount: nativeConstantSourceNode.channelCount,
                      channelCountMode: nativeConstantSourceNode.channelCountMode,
                      channelInterpretation: nativeConstantSourceNode.channelInterpretation,
                      offset: nativeConstantSourceNode.offset.value
                  };
                  nativeConstantSourceNode = createNativeConstantSourceNode(nativeOfflineAudioContext, options);
                  if (start !== null) {
                      nativeConstantSourceNode.start(start);
                  }
                  if (stop !== null) {
                      nativeConstantSourceNode.stop(stop);
                  }
              }
              renderedNativeConstantSourceNodes.set(nativeOfflineAudioContext, nativeConstantSourceNode);
              if (!nativeConstantSourceNodeIsOwnedByContext) {
                  await renderAutomation(nativeOfflineAudioContext, proxy.offset, nativeConstantSourceNode.offset, trace);
              }
              else {
                  await connectAudioParam(nativeOfflineAudioContext, proxy.offset, nativeConstantSourceNode.offset, trace);
              }
              await renderInputsOfAudioNode(proxy, nativeOfflineAudioContext, nativeConstantSourceNode, trace);
              return nativeConstantSourceNode;
          };
          return {
              set start(value) {
                  start = value;
              },
              set stop(value) {
                  stop = value;
              },
              render(proxy, nativeOfflineAudioContext, trace) {
                  const renderedNativeConstantSourceNode = renderedNativeConstantSourceNodes.get(nativeOfflineAudioContext);
                  if (renderedNativeConstantSourceNode !== undefined) {
                      return Promise.resolve(renderedNativeConstantSourceNode);
                  }
                  return createConstantSourceNode(proxy, nativeOfflineAudioContext, trace);
              }
          };
      };
  };
  //# sourceMappingURL=constant-source-node-renderer-factory.js.map