ipyaudio 0.1.12__tar.gz → 0.1.16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. ipyaudio-0.1.16/.yarn/install-state.gz +0 -0
  2. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/PKG-INFO +10 -28
  3. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/README.md +8 -26
  4. ipyaudio-0.1.16/examples/Untitled.ipynb +84 -0
  5. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/_frontend.py +1 -1
  6. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/_version.py +1 -1
  7. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/configs/recorder.json +1 -1
  8. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/package.json +1 -1
  9. ipyaudio-0.1.16/ipyaudio/labextension/static/270.b6e7f47d313701fe1e56.js +1 -0
  10. ipyaudio-0.1.16/ipyaudio/labextension/static/58.1d71425dd409ae479079.js +1 -0
  11. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/third-party-licenses.json +2 -2
  12. ipyaudio-0.1.16/ipyaudio/nbextension/index.js +3 -0
  13. ipyaudio-0.1.16/ipyaudio/nbextension/index.js.map +1 -0
  14. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/player.py +23 -28
  15. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/recorder.py +30 -24
  16. ipyaudio-0.1.16/ipyaudio/timer.py +57 -0
  17. ipyaudio-0.1.16/ipyaudio/utils.py +32 -0
  18. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/package-lock.json +229 -4
  19. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/package.json +1 -1
  20. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/pyproject.toml +3 -3
  21. ipyaudio-0.1.16/src/chunk_queue.ts +75 -0
  22. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/recorder.ts +9 -14
  23. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/yarn.lock +239 -211
  24. ipyaudio-0.1.12/.yarn/install-state.gz +0 -0
  25. ipyaudio-0.1.12/examples/Untitled.ipynb +0 -103
  26. ipyaudio-0.1.12/ipyaudio/labextension/static/424.ca45437f3ff02b14458c.js +0 -1
  27. ipyaudio-0.1.12/ipyaudio/labextension/static/58.0e2f3d700c41688625fe.js +0 -1
  28. ipyaudio-0.1.12/ipyaudio/nbextension/index.js +0 -3
  29. ipyaudio-0.1.12/ipyaudio/nbextension/index.js.map +0 -1
  30. ipyaudio-0.1.12/ipyaudio/utils.py +0 -48
  31. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.coveragerc +0 -0
  32. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.eslintignore +0 -0
  33. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.eslintrc.js +0 -0
  34. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.gitignore +0 -0
  35. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.npmignore +0 -0
  36. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.prettierignore +0 -0
  37. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.prettierrc +0 -0
  38. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.yarn/releases/yarn-4.8.1.cjs +0 -0
  39. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/.yarnrc.yml +0 -0
  40. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/LICENSE.txt +0 -0
  41. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/MANIFEST.in +0 -0
  42. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/babel.config.js +0 -0
  43. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/codecov.yml +0 -0
  44. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/css/widget.css +0 -0
  45. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/Makefile +0 -0
  46. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/environment.yml +0 -0
  47. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/make.bat +0 -0
  48. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/_static/embed-bundle.js.LICENSE.txt +0 -0
  49. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/_static/helper.js +0 -0
  50. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/conf.py +0 -0
  51. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/develop-install.rst +0 -0
  52. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/examples/index.rst +0 -0
  53. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/examples/introduction.nblink +0 -0
  54. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/index.rst +0 -0
  55. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/installing.rst +0 -0
  56. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/docs/source/introduction.rst +0 -0
  57. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/examples/introduction.ipynb +0 -0
  58. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/examples/sam_altman.wav +0 -0
  59. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/install.json +0 -0
  60. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/__init__.py +0 -0
  61. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/configs/player.json +0 -0
  62. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/122.3700f0454aee82938e32.js +0 -0
  63. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/509.a9d6860fe38ae60aa71f.js +0 -0
  64. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/570.97f2a8196b7f1703e636.js +0 -0
  65. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/570.97f2a8196b7f1703e636.js.LICENSE.txt +0 -0
  66. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/labextension/static/style.js +0 -0
  67. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/nbextension/extension.js +0 -0
  68. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/nbextension/index.js.LICENSE.txt +0 -0
  69. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/tests/__init__.py +0 -0
  70. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/tests/conftest.py +0 -0
  71. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/tests/test_example.py +0 -0
  72. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/tests/test_nbextension_path.py +0 -0
  73. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio/widget.py +0 -0
  74. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/ipyaudio.json +0 -0
  75. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/jest.config.js +0 -0
  76. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/pytest.ini +0 -0
  77. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/readthedocs.yml +0 -0
  78. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/setup.py +0 -0
  79. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/__tests__/index.spec.ts +0 -0
  80. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/__tests__/utils.ts +0 -0
  81. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/extension.ts +0 -0
  82. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/index.ts +0 -0
  83. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/player.ts +0 -0
  84. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/plugin.ts +0 -0
  85. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/version.ts +0 -0
  86. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/wavesurfer/pcm_player.ts +0 -0
  87. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/wavesurfer/player.ts +0 -0
  88. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/wavesurfer/recorder.ts +0 -0
  89. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/src/wavesurfer/utils.ts +0 -0
  90. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/tsconfig.eslint.json +0 -0
  91. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/tsconfig.json +0 -0
  92. {ipyaudio-0.1.12 → ipyaudio-0.1.16}/webpack.config.js +0 -0
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipyaudio
3
- Version: 0.1.12
3
+ Version: 0.1.16
4
4
  Summary: A Custom Jupyter Widget Library
5
5
  Project-URL: Homepage, https://github.com/pengzhendong/ipyaudio
6
6
  Author-email: Zhendong Peng <pzd17@tsinghua.org.cn>
@@ -46,7 +46,7 @@ Classifier: Programming Language :: Python :: 3.10
46
46
  Classifier: Programming Language :: Python :: 3.11
47
47
  Classifier: Programming Language :: Python :: 3.12
48
48
  Requires-Python: >=3.9
49
- Requires-Dist: audiolab>=0.0.5
49
+ Requires-Dist: audiolab>=0.2.0
50
50
  Requires-Dist: ipydatawidgets>=4.3.5
51
51
  Requires-Dist: ipywidgets>=8.0.0
52
52
  Provides-Extra: docs
@@ -65,64 +65,46 @@ Requires-Dist: pytest-cov; extra == 'test'
65
65
  Requires-Dist: pytest>=6.0; extra == 'test'
66
66
  Description-Content-Type: text/markdown
67
67
 
68
-
69
68
  # ipyaudio
70
69
 
71
70
  [![Build Status](https://travis-ci.org/pengzhendong/ipyaudio.svg?branch=master)](https://travis-ci.org/pengzhendong/ipyaudio)
72
71
  [![codecov](https://codecov.io/gh/pengzhendong/ipyaudio/branch/master/graph/badge.svg)](https://codecov.io/gh/pengzhendong/ipyaudio)
73
72
 
74
-
75
73
  A Custom Jupyter Widget Library
76
74
 
77
75
  ## Installation
78
76
 
79
- You can install using `pip`:
80
-
81
77
  ```bash
82
78
  pip install ipyaudio
83
79
  ```
84
80
 
85
- If you are using Jupyter Notebook 5.2 or earlier, you may also need to enable
86
- the nbextension:
87
- ```bash
88
- jupyter nbextension enable --py [--sys-prefix|--user|--system] ipyaudio
89
- ```
90
-
91
81
  ## Development Installation
92
82
 
93
83
  Create a dev environment:
84
+
94
85
  ```bash
95
- conda create -n ipyaudio-dev -c conda-forge nodejs python jupyterlab=4.0.11
86
+ conda create -n ipyaudio-dev -c conda-forge nodejs python jupyterlab
96
87
  conda activate ipyaudio-dev
97
88
  ```
98
89
 
99
90
  Install the python. This will also build the TS package.
91
+
100
92
  ```bash
101
93
  pip install -e ".[test, examples]"
102
94
  ```
103
95
 
104
96
  When developing your extensions, you need to manually enable your extensions with the
105
- notebook / lab frontend. For lab, this is done by the command:
97
+ lab frontend.
106
98
 
107
- ```
99
+ ```bash
108
100
  jupyter labextension develop --overwrite .
109
101
  jlpm run build
110
102
  ```
111
103
 
112
- For classic notebook, you need to run:
113
-
114
- ```
115
- jupyter nbextension install --sys-prefix --symlink --overwrite --py ipyaudio
116
- jupyter nbextension enable --sys-prefix --py ipyaudio
117
- ```
118
-
119
- Note that the `--symlink` flag doesn't work on Windows, so you will here have to run
120
- the `install` command every time that you rebuild your extension. For certain installations
121
- you might also need another flag instead of `--sys-prefix`, but we won't cover the meaning
122
- of those flags here.
123
-
124
104
  ### How to see your changes
105
+
125
106
  #### Typescript:
107
+
126
108
  If you use JupyterLab to develop then you can watch the source directory and run JupyterLab at the same time in different
127
109
  terminals to watch for changes in the extension's source and automatically rebuild the widget.
128
110
 
@@ -136,6 +118,7 @@ jupyter lab
136
118
  After a change wait for the build to finish and then refresh your browser and the changes should take effect.
137
119
 
138
120
  #### Python:
121
+
139
122
  If you make a change to the python code then you will need to restart the notebook kernel to have it take effect.
140
123
 
141
124
  ## Updating the version
@@ -147,4 +130,3 @@ By default it will also create a tag.
147
130
  pip install tbump
148
131
  tbump <new-version>
149
132
  ```
150
-
@@ -1,61 +1,43 @@
1
-
2
1
  # ipyaudio
3
2
 
4
3
  [![Build Status](https://travis-ci.org/pengzhendong/ipyaudio.svg?branch=master)](https://travis-ci.org/pengzhendong/ipyaudio)
5
4
  [![codecov](https://codecov.io/gh/pengzhendong/ipyaudio/branch/master/graph/badge.svg)](https://codecov.io/gh/pengzhendong/ipyaudio)
6
5
 
7
-
8
6
  A Custom Jupyter Widget Library
9
7
 
10
8
  ## Installation
11
9
 
12
- You can install using `pip`:
13
-
14
10
  ```bash
15
11
  pip install ipyaudio
16
12
  ```
17
13
 
18
- If you are using Jupyter Notebook 5.2 or earlier, you may also need to enable
19
- the nbextension:
20
- ```bash
21
- jupyter nbextension enable --py [--sys-prefix|--user|--system] ipyaudio
22
- ```
23
-
24
14
  ## Development Installation
25
15
 
26
16
  Create a dev environment:
17
+
27
18
  ```bash
28
- conda create -n ipyaudio-dev -c conda-forge nodejs python jupyterlab=4.0.11
19
+ conda create -n ipyaudio-dev -c conda-forge nodejs python jupyterlab
29
20
  conda activate ipyaudio-dev
30
21
  ```
31
22
 
32
23
  Install the python. This will also build the TS package.
24
+
33
25
  ```bash
34
26
  pip install -e ".[test, examples]"
35
27
  ```
36
28
 
37
29
  When developing your extensions, you need to manually enable your extensions with the
38
- notebook / lab frontend. For lab, this is done by the command:
30
+ lab frontend.
39
31
 
40
- ```
32
+ ```bash
41
33
  jupyter labextension develop --overwrite .
42
34
  jlpm run build
43
35
  ```
44
36
 
45
- For classic notebook, you need to run:
46
-
47
- ```
48
- jupyter nbextension install --sys-prefix --symlink --overwrite --py ipyaudio
49
- jupyter nbextension enable --sys-prefix --py ipyaudio
50
- ```
51
-
52
- Note that the `--symlink` flag doesn't work on Windows, so you will here have to run
53
- the `install` command every time that you rebuild your extension. For certain installations
54
- you might also need another flag instead of `--sys-prefix`, but we won't cover the meaning
55
- of those flags here.
56
-
57
37
  ### How to see your changes
38
+
58
39
  #### Typescript:
40
+
59
41
  If you use JupyterLab to develop then you can watch the source directory and run JupyterLab at the same time in different
60
42
  terminals to watch for changes in the extension's source and automatically rebuild the widget.
61
43
 
@@ -69,6 +51,7 @@ jupyter lab
69
51
  After a change wait for the build to finish and then refresh your browser and the changes should take effect.
70
52
 
71
53
  #### Python:
54
+
72
55
  If you make a change to the python code then you will need to restart the notebook kernel to have it take effect.
73
56
 
74
57
  ## Updating the version
@@ -80,4 +63,3 @@ By default it will also create a tag.
80
63
  pip install tbump
81
64
  tbump <new-version>
82
65
  ```
83
-
@@ -0,0 +1,84 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "66603572-848a-4585-bd04-d2e8cec85ba0",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "data": {
11
+ "application/vnd.jupyter.widget-view+json": {
12
+ "model_id": "9f6ef65de7314cbb86e38e0149956a43",
13
+ "version_major": 2,
14
+ "version_minor": 0
15
+ },
16
+ "text/plain": [
17
+ "VBox(children=(Recorder(value=None, config={'options': {'backend': 'WebAudio', 'container': '', 'waveColor': '…"
18
+ ]
19
+ },
20
+ "metadata": {},
21
+ "output_type": "display_data"
22
+ }
23
+ ],
24
+ "source": [
25
+ "from ipyaudio import Recorder, play, Player\n",
26
+ "recorder = Recorder(verbose=True, sync=True)"
27
+ ]
28
+ },
29
+ {
30
+ "cell_type": "code",
31
+ "execution_count": 2,
32
+ "id": "3c8cc80a-6272-4f13-93ae-f437d45d7735",
33
+ "metadata": {},
34
+ "outputs": [
35
+ {
36
+ "data": {
37
+ "application/vnd.jupyter.widget-view+json": {
38
+ "model_id": "09c7d99599f94936970441f09d8cd938",
39
+ "version_major": 2,
40
+ "version_minor": 0
41
+ },
42
+ "text/plain": [
43
+ "Player(value=None, config={'options': {'autoScroll': True, 'backend': 'WebAudio', 'container': '', 'cursorColo…"
44
+ ]
45
+ },
46
+ "metadata": {},
47
+ "output_type": "display_data"
48
+ }
49
+ ],
50
+ "source": [
51
+ "play(recorder.audio, 16000)"
52
+ ]
53
+ },
54
+ {
55
+ "cell_type": "code",
56
+ "execution_count": null,
57
+ "id": "c4be39a0-516e-43db-bc9d-e15f36a51b1d",
58
+ "metadata": {},
59
+ "outputs": [],
60
+ "source": []
61
+ }
62
+ ],
63
+ "metadata": {
64
+ "kernelspec": {
65
+ "display_name": "Python 3 (ipykernel)",
66
+ "language": "python",
67
+ "name": "python3"
68
+ },
69
+ "language_info": {
70
+ "codemirror_mode": {
71
+ "name": "ipython",
72
+ "version": 3
73
+ },
74
+ "file_extension": ".py",
75
+ "mimetype": "text/x-python",
76
+ "name": "python",
77
+ "nbconvert_exporter": "python",
78
+ "pygments_lexer": "ipython3",
79
+ "version": "3.13.3"
80
+ }
81
+ },
82
+ "nbformat": 4,
83
+ "nbformat_minor": 5
84
+ }
@@ -9,4 +9,4 @@ Information about the frontend package of the widgets.
9
9
  """
10
10
 
11
11
  module_name = "ipyaudio"
12
- module_version = "^0.1.11"
12
+ module_version = "^0.1.16"
@@ -4,5 +4,5 @@
4
4
  # Copyright (c) Zhendong Peng.
5
5
  # Distributed under the terms of the Modified BSD License.
6
6
 
7
- version_info = (0, 1, 12)
7
+ version_info = (0, 1, 16)
8
8
  __version__ = ".".join(map(str, version_info))
@@ -8,6 +8,6 @@
8
8
  "renderRecordedAudio": false,
9
9
  "scrollingWaveform": true,
10
10
  "scrollingWaveformWindow": 10,
11
- "mediaRecorderTimeslice": 32
11
+ "mediaRecorderTimeslice": 20
12
12
  }
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ipyaudio",
3
- "version": "0.1.11",
3
+ "version": "0.1.16",
4
4
  "description": "A Custom Jupyter Widget Library",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkipyaudio=self.webpackChunkipyaudio||[]).push([[270],{311:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27%23212529%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e"},319:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function o(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,o)}l((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RecorderView=t.RecorderModel=void 0;const a=s(i(5364)),r=i(3459),o=i(3983),l=i(1797),c=s(i(1136)),u=s(i(8020));i(6378),i(1463);class d extends o.DOMWidgetModel{defaults(){return Object.assign(Object.assign({},super.defaults()),{_model_name:d.model_name,_model_module:d.model_module,_model_module_version:d.model_module_version,_view_name:d.view_name,_view_module:d.view_module,_view_module_version:d.view_module_version,chunk:new Uint8Array(0),rate:16e3,end:!1})}}t.RecorderModel=d,d.serializers=Object.assign(Object.assign({},o.DOMWidgetModel.serializers),{chunk:r.simplearray_serialization}),d.model_name="RecorderModel",d.model_module=l.MODULE_NAME,d.model_module_version=l.MODULE_VERSION,d.view_name="RecorderView",d.view_module=l.MODULE_NAME,d.view_module_version=l.MODULE_VERSION;class h extends o.DOMWidgetView{constructor(){super(...arguments),this._chunks=new c.default,this._isFirstChunk=!0,this._isCompleted=!1}_sendChunk(){var e;return n(this,void 0,void 0,(function*(){const t=yield this._chunks.dequeue(1e3+(null!==(e=this._recorder.timeSlice)&&void 0!==e?e:20));t.length>0&&(this.model.set("chunk",{array:t,shape:[t.length]}),this.model.save_changes()),this._isCompleted&&(this.model.set("completed",!0),this.model.save_changes())}))}render(){super.render(),this.displayed.then((()=>n(this,void 0,void 0,(function*(){const e=this.model.get("language");this._recorder=u.default.create((0,a.default)({},this.model.get("config"),{language:e}),(0,a.default)({},this.model.get("player_config"),{language:e})),this.el.appendChild(this._recorder.el),this.model.on("msg:custom",(e=>n(this,void 0,void 0,(function*(){"chunk_received"===e.msg_type&&this._sendChunk()})))),this._recorder.onRecordStart((()=>{this._isCompleted=!1,this._isFirstChunk=!0,this.model.set("completed",!1),this.model.set("rate",this._recorder.sampleRate),this.model.save_changes()})),this._recorder.onRecordChunk((e=>n(this,void 0,void 0,(function*(){this._chunks.enqueue(new Uint8Array(yield e.arrayBuffer())),this.model.get("sync")&&this._isFirstChunk&&(this._isFirstChunk=!1,this._sendChunk())})))),this._recorder.onRecordEnd((e=>n(this,void 0,void 0,(function*(){this._isCompleted=!0,this.model.get("sync")||(this.model.set("completed",!0),this.model.save_changes())}))))}))))}}t.RecorderView=h},644:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0%27/%3e%3c/svg%3e"},1136:function(e,t){var i=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function o(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{constructor(){this.queue=[],this.resolveDequeue=null,this.waitingDequeue=null}mergeAllChunks(){if(0===this.queue.length)return new Uint8Array(0);let e=0;for(const t of this.queue)e+=t.length;const t=new Uint8Array(e);let i=0;for(const e of this.queue)t.set(e,i),i+=e.length;return t}enqueue(e){if(this.queue.push(e),this.resolveDequeue){const e=this.mergeAllChunks();this.resolveDequeue(e),this.queue.length=0,this.resolveDequeue=null,this.waitingDequeue=null}}dequeue(e=0){return i(this,void 0,void 0,(function*(){if(this.queue.length>0){const e=this.mergeAllChunks();return this.queue.length=0,e}if(!this.waitingDequeue&&(this.waitingDequeue=new Promise((e=>{this.resolveDequeue=e})),e>0)){const t=setTimeout((()=>{this.resolveDequeue&&(this.resolveDequeue(new Uint8Array(0)),this.resolveDequeue=null,this.waitingDequeue=null)}),e);this.waitingDequeue.then((()=>{t&&clearTimeout(t)})).catch((()=>{t&&clearTimeout(t)}))}return this.waitingDequeue}))}get length(){return this.queue.length}}},1368:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708%27/%3e%3c/svg%3e"},1451:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27%23052c65%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e"},1463:(e,t,i)=>{i.r(t),i.d(t,{default:()=>v});var n=i(5072),s=i.n(n),a=i(7825),r=i.n(a),o=i(7659),l=i.n(o),c=i(5056),u=i.n(c),d=i(540),h=i.n(d),m=i(1113),p=i.n(m),g=i(4930),_={};_.styleTagTransform=p(),_.setAttributes=u(),_.insert=l().bind(null,"head"),_.domAPI=r(),_.insertStyleElement=h(),s()(g.A,_);const v=g.A&&g.A.locals?g.A.locals:void 0},1797:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MODULE_NAME=t.MODULE_VERSION=void 0;const n=i(8330);t.MODULE_VERSION=n.version,t.MODULE_NAME=n.name},2247:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%2833, 37, 41, 0.75%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e"},3385:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%272%27 fill=%27%23fff%27/%3e%3c/svg%3e"},4274:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27M6 10h8%27/%3e%3c/svg%3e"},4364:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function o(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,o)}l((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlayerView=t.PlayerModel=void 0;const a=s(i(5364)),r=i(3983),o=i(1797),l=s(i(9155));i(6378),i(1463);class c extends r.DOMWidgetModel{defaults(){return Object.assign(Object.assign({},super.defaults()),{_model_name:c.model_name,_model_module:c.model_module,_model_module_version:c.model_module_version,_view_name:c.view_name,_view_module:c.view_module,_view_module_version:c.view_module_version})}}t.PlayerModel=c,c.serializers=Object.assign({},r.DOMWidgetModel.serializers),c.model_name="PlayerModel",c.model_module=o.MODULE_NAME,c.model_module_version=o.MODULE_VERSION,c.view_name="PlayerView",c.view_module=o.MODULE_NAME,c.view_module_version=o.MODULE_VERSION;class u extends r.DOMWidgetView{render(){super.render(),this.displayed.then((()=>n(this,void 0,void 0,(function*(){const e={isStreaming:this.model.get("is_streaming"),language:this.model.get("language")};this._player=l.default.create((0,a.default)({},this.model.get("config"),e)),this.el.appendChild(this._player.el),this.model.on("change:audio",(()=>{this._player.sampleRate=this.model.get("rate"),this._player.load(this.model.get("audio"))})),this.model.on("change:is_done",(()=>{this._player.setDone()}))}))))}}t.PlayerView=u},4718:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27%23fff%27/%3e%3c/svg%3e"},4914:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%236ea8fe%27%3e%3cpath fill-rule=%27evenodd%27 d=%27M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708%27/%3e%3c/svg%3e"},4930:(e,t,i)=>{i.d(t,{A:()=>o});var n=i(1601),s=i.n(n),a=i(6314),r=i.n(a)()(s());r.push([e.id,".waveform {\n background-color: black;\n cursor: pointer;\n position: relative;\n width: 100%;\n}\n\n.duration, .time {\n background: rgba(0, 0, 0, 0.75);\n color: #DDDD;\n font-size: 11px;\n position: absolute;\n bottom: 0;\n z-index: 11;\n}\n\n.duration {\n right: 0;\n}\n\n.time {\n left: 0;\n}\n",""]);const o=r},5372:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e"},5419:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27m6 10 3 3 6-6%27/%3e%3c/svg%3e"},5531:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23343a40%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e"},5782:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27%2386b7fe%27/%3e%3c/svg%3e"},5967:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23000%27%3e%3cpath d=%27M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414%27/%3e%3c/svg%3e"},6366:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%28255, 255, 255, 0.55%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e"},7115:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23dee2e6%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e"},7154:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%280, 0, 0, 0.25%29%27/%3e%3c/svg%3e"},7997:(e,t)=>{function i(e){const t=e.numFrames,i=e.numChannels||2,n=e.sampleRate||44100,s=e.isFloat?4:2,a=e.isFloat?3:1,r=i*s,o=n*r,l=t*r,c=new ArrayBuffer(44),u=new DataView(c);let d=0;function h(e){for(let t=0;t<e.length;t++)u.setUint8(d+t,e.charCodeAt(t));d+=e.length}function m(e){u.setUint32(d,e,!0),d+=4}function p(e){u.setUint16(d,e,!0),d+=2}return h("RIFF"),m(l+36),h("WAVE"),h("fmt "),m(16),p(a),p(i),m(n),m(o),p(r),p(8*s),h("data"),m(l),new Uint8Array(c)}function n(e,t){if(!e)return new Uint8Array;let n,s;e instanceof ArrayBuffer?(n=i({isFloat:!1,numChannels:t.numChannels,sampleRate:t.sampleRate,numFrames:e.byteLength/Int16Array.BYTES_PER_ELEMENT}),s=new Uint8Array(e)):(n=i({isFloat:!1,numChannels:e.numberOfChannels,sampleRate:e.sampleRate,numFrames:e.length}),s=new Uint8Array(function(e){const{numberOfChannels:t,length:i}=e,n=new Int16Array(i*t);for(let s=0;s<t;s++){const a=e.getChannelData(s),r=a instanceof Float32Array;for(let e=0;e<i;e++)n[e*t+s]=r?32767*a[e]:a[e]}return n}(e).buffer));const a=new Uint8Array(n.length+s.length);return a.set(n,0),a.set(s,n.length),a}Object.defineProperty(t,"__esModule",{value:!0}),t.createObjectURL=t.formatTime=t.createElement=void 0,t.createElement=(e,t,i="")=>{const n=document.createElement(e);return n.className=t,n.innerHTML=i,n},t.formatTime=e=>`${Math.floor(e/60)}:${("0"+Math.round(e)%60).slice(-2)}`,t.createObjectURL=(e,t={numChannels:1,sampleRate:44100})=>{let i;return i=e instanceof AudioBuffer?n(e,{numChannels:e.numberOfChannels,sampleRate:e.sampleRate}):n(e,t),URL.createObjectURL(new Blob([i],{type:"audio/wav"}))}},8020:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function o(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,o)}l((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=s(i(423)),r=s(i(8429)),o=s(i(9155)),l=i(7997);class c{constructor(e,t){this.el=(0,l.createElement)("div","lm-Widget"),this._container=(0,l.createElement)("div","waveform"),this._currentTime=(0,l.createElement)("div","time","0:00"),this._container.append(this._currentTime),this._config=e,this._player=o.default.create(t)}get sampleRate(){return this._wavesurfer.options.sampleRate}get timeSlice(){var e;return null===(e=this._config.recordOptions)||void 0===e?void 0:e.mediaRecorderTimeslice}set sampleRate(e){this._wavesurfer.options.sampleRate=e,this._player.sampleRate=e}createWaveSurfer(){this._wavesurfer=a.default.create(Object.assign(Object.assign({},this._config.options),{container:this._container}))}createRateSelect(){this._rateSelect=(0,l.createElement)("select","form-select-sm d-inline-block me-3 my-3 w-25"),[8e3,16e3,22050,24e3,44100,48e3].forEach((e=>{const t=document.createElement("option");t.value=e.toString(),t.text=`${e} Hz`,16e3===e&&(t.selected=!0),this._rateSelect.appendChild(t)}))}createMicSelect(){this._micSelect=(0,l.createElement)("select","form-select-sm d-inline-block me-3 my-3 w-50"),navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then((e=>{r.default.getAvailableAudioDevices().then((e=>{e.forEach((e=>{const t=document.createElement("option");t.value=e.deviceId,t.text=e.label||e.deviceId,this._micSelect.appendChild(t)}))}))})).catch((e=>{const t="zh"===this._config.language?"访问麦克风失败":"Error accessing the microphone: ";throw new Error(t+e.message)}))}createPauseButton(){this._pauseButton=(0,l.createElement)("button","btn btn-outline-danger me-3 my-3",'<i class="fa fa-pause"></i>'),this._pauseButton.disabled=!0,this._pauseButton.onclick=()=>{this._recorder.isRecording()?(this._recorder.pauseRecording(),this._pauseButton.innerHTML='<i class="fa fa-play"></i>',this._container.style.display="none",this._player.el.style.display="block"):(this._recorder.resumeRecording(),this._pauseButton.innerHTML='<i class="fa fa-pause"></i>',this._container.style.display="block",this._player.el.style.display="none")}}createRecordButton(){this._recordButton=(0,l.createElement)("button","btn btn-danger me-3 my-3",'<i class="fa fa-microphone"></i>'),this._recordButton.onclick=()=>{this._recorder.isRecording()||this._recorder.isPaused()?(this._recorder.stopRecording(),this._container.style.display="none",this._player.el.style.display="block"):(this._wavesurfer.options.normalize=!1,this.sampleRate=parseInt(this._rateSelect.value),this._recorder.startRecording({deviceId:this._micSelect.value}).then((()=>{this._pauseButton.disabled=!1,this._rateSelect.disabled=!0,this._micSelect.disabled=!0,this._pauseButton.innerHTML='<i class="fa fa-pause"></i>',this._recordButton.innerHTML='<i class="fa fa-stop"></i>',this._container.style.display="block",this._player.el.style.display="none"})))}}onRecordStart(e){this._recorder.on("record-start",(()=>{e()}))}onRecordChunk(e){this._recorder.on("record-data-available",(t=>{e(t)}))}onRecordEnd(e){this._recorder.on("record-end",(t=>n(this,void 0,void 0,(function*(){this._player.load(URL.createObjectURL(t)),this._recordButton.disabled=!0,this._pauseButton.disabled=!0,yield e(t),this._recordButton.disabled=!1,this._pauseButton.disabled=!0,this._rateSelect.disabled=!1,this._micSelect.disabled=!1,this._pauseButton.innerHTML='<i class="fa fa-play"></i>',this._recordButton.innerHTML='<i class="fa fa-microphone"></i>'}))))}createRecorder(){this._wavesurfer.toggleInteraction(!1),this._recorder=this._wavesurfer.registerPlugin(r.default.create(this._config.recordOptions)),this.createRateSelect(),this.createMicSelect(),this.createPauseButton(),this.createRecordButton(),this._container.style.display="none",this._player.el.style.display="none",this.el.append(this._recordButton,this._pauseButton,this._rateSelect,this._micSelect,this._container,this._player.el),this._recorder.on("record-pause",(e=>{this._player.load(URL.createObjectURL(e))})),this._recorder.on("record-progress",(e=>{this._currentTime.textContent=(0,l.formatTime)(e/1e3)}))}static create(e,t){const i=new c(e,t);return i.createWaveSurfer(),i.createRecorder(),i}}t.default=c},8078:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function o(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.PCMPlayer=void 0;const s=i(7997);class a{constructor(e){this._isDone=!1,this._isPlaying=!0,this._samples=new Int16Array(0),this._allSamples=new Int16Array(0),this._options=Object.assign({channels:1,sampleRate:16e3,flushTime:100,language:"en"},e),this.playButton=(0,s.createElement)("button","btn btn-danger me-3 my-3",'<i class="fa fa-pause"></i>'),this.playButton.onclick=()=>{this._isPlaying=!this._isPlaying,this._isPlaying?this.play():this.pause(),this.playButton.innerHTML=`<i class="fa fa-${this._isPlaying?"pause":"play"}"></i>`},this._interval=window.setInterval(this.flush.bind(this),this._options.flushTime),this._audioCtx=new(window.AudioContext||window.webkitAudioContext),this._gainNode=this._audioCtx.createGain(),this._gainNode.gain.value=1,this._gainNode.connect(this._audioCtx.destination),this._startTime=this._audioCtx.currentTime}set sampleRate(e){this._options.sampleRate=e}setDone(){this._isDone=!0}feed(e){const t=atob(e),i=new ArrayBuffer(t.length),n=new Uint8Array(i);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);const s=new Int16Array(i);this._samples=new Int16Array([...this._samples,...s]),this._allSamples=new Int16Array([...this._allSamples,...s])}get url(){return(0,s.createObjectURL)(this._allSamples.buffer,{numChannels:this._options.channels,sampleRate:this._options.sampleRate})}flush(){if(!this._samples.length)return;const e=this._isDone,t=this._audioCtx.createBufferSource(),i=this._samples.length/this._options.channels,n=this._audioCtx.createBuffer(this._options.channels,i,this._options.sampleRate);for(let e=0;e<this._options.channels;e++){const t=n.getChannelData(e);let s=e;for(let e=0;e<i;e++)t[e]=this._samples[s]/32768,s+=this._options.channels}this._startTime=Math.max(this._startTime,this._audioCtx.currentTime),t.buffer=n,t.connect(this._gainNode),t.start(this._startTime),t.onended=()=>{this.playButton.disabled=!!e},this._startTime+=n.duration,this._samples=new Int16Array(0)}play(){return n(this,void 0,void 0,(function*(){yield this._audioCtx.resume()}))}pause(){return n(this,void 0,void 0,(function*(){yield this._audioCtx.suspend()}))}volume(e){this._gainNode.gain.value=e}destroy(){this._interval&&clearInterval(this._interval),this._samples=new Int16Array(0),this._audioCtx.close()}}t.PCMPlayer=a,t.default=a},8330:e=>{e.exports=JSON.parse('{"name":"ipyaudio","version":"0.1.16","description":"A Custom Jupyter Widget Library","keywords":["jupyter","jupyterlab","jupyterlab-extension","widgets"],"files":["lib/**/*.js","dist/*.js","css/*.css"],"homepage":"https://github.com/pengzhendong/ipyaudio","bugs":{"url":"https://github.com/pengzhendong/ipyaudio/issues"},"license":"BSD-3-Clause","author":{"name":"Zhendong Peng","email":"pzd17@tsinghua.org.cn"},"main":"lib/index.js","types":"./lib/index.d.ts","repository":{"type":"git","url":"git+https://github.com/pengzhendong/ipyaudio.git"},"scripts":{"build":"jlpm run build:lib && jlpm run build:nbextension && jlpm run build:labextension:dev","build:prod":"jlpm run build:lib && jlpm run build:nbextension && jlpm run build:labextension","build:labextension":"jupyter labextension build .","build:labextension:dev":"jupyter labextension build --development True .","build:lib":"tsc","build:nbextension":"webpack","clean":"jlpm run clean:lib && jlpm run clean:nbextension && jlpm run clean:labextension","clean:lib":"rimraf lib","clean:labextension":"rimraf ipyaudio/labextension","clean:nbextension":"rimraf ipyaudio/nbextension/static/index.js","lint":"eslint . --ext .ts,.tsx --fix","lint:check":"eslint . --ext .ts,.tsx","prepack":"jlpm run build:lib","test":"jest","watch":"npm-run-all -p \\"watch:*\\"","watch:lib":"tsc -w","watch:nbextension":"webpack --watch --mode=development","watch:labextension":"jupyter labextension watch ."},"dependencies":{"@jupyter-widgets/base":"^1.1.10 || ^2 || ^3 || ^4 || ^5 || ^6","bootstrap":"^5.3.3","jupyter-dataserializers":"^3.0.1","lodash.merge":"^4.6.2"},"devDependencies":{"@babel/core":"^7.23.7","@babel/preset-env":"^7.23.8","@jupyter-widgets/base-manager":"^1.0.7","@jupyterlab/builder":"^4.0.11","@lumino/application":"^2.3.0","@lumino/widgets":"^2.3.1","@types/jest":"^29.5.11","@types/webpack-env":"^1.18.4","@typescript-eslint/eslint-plugin":"^6.19.1","@typescript-eslint/parser":"^6.19.1","acorn":"^8.11.3","css-loader":"^6.9.1","eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","fs-extra":"^11.2.0","identity-obj-proxy":"^3.0.0","jest":"^29.7.0","mkdirp":"^3.0.1","npm-run-all":"^4.1.5","prettier":"^3.2.4","rimraf":"^5.0.5","source-map-loader":"^5.0.0","style-loader":"^3.3.4","ts-jest":"^29.1.2","ts-loader":"^9.5.1","typescript":"~5.3.3","wavesurfer.js":"^7.9.1","webpack":"^5.90.0","webpack-cli":"^5.1.4"},"devDependenciesComments":{"@jupyterlab/builder":"pinned to the latest JupyterLab 3.x release","@lumino/application":"pinned to the latest Lumino 1.x release","@lumino/widgets":"pinned to the latest Lumino 1.x release"},"jupyterlab":{"extension":"lib/plugin","outputDir":"ipyaudio/labextension/","sharedPackages":{"@jupyter-widgets/base":{"bundled":false,"singleton":true}}},"packageManager":"yarn@4.8.1"}')},8661:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3e%3cpath fill=%27%23198754%27 d=%27M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1%27/%3e%3c/svg%3e"},8734:e=>{e.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%28255, 255, 255, 0.25%29%27/%3e%3c/svg%3e"},9155:function(e,t,i){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=n(i(423)),a=n(i(980)),r=n(i(8659)),o=n(i(8541)),l=n(i(1427)),c=n(i(3875)),u=n(i(8078)),d=i(7997);class h{constructor(e){this.el=(0,d.createElement)("div","lm-Widget"),this._container=(0,d.createElement)("div","waveform"),this._duration=(0,d.createElement)("div","duration","0:00"),this._currentTime=(0,d.createElement)("div","time","0:00"),this._container.append(this._duration,this._currentTime),this.el.append(this._container),this._config=e}get url(){return this._config.isStreaming?this._pcmPlayer.url:(0,d.createObjectURL)(this._wavesurfer.getDecodedData())}set sampleRate(e){this._config.isStreaming&&(this._pcmPlayer.sampleRate=e),this._wavesurfer.options.sampleRate=e}load(e){this._config.isStreaming?(this._pcmPlayer.feed(e),this._wavesurfer.load(this.url)):this._wavesurfer.load(e)}setDone(){this._pcmPlayer.setDone()}createPCMPlayer(){this._config.isStreaming&&(this._pcmPlayer=new u.default({channels:1,sampleRate:this._config.options.sampleRate}),this.el.append(this._pcmPlayer.playButton))}createDownloadButton(){this._downloadButton=(0,d.createElement)("button","btn btn-success my-3");const e="zh"===this._config.language?"下载":"Download";this._downloadButton.innerHTML=`${e} <i class="fa fa-download"></i>`,this.el.append(this._downloadButton),this._downloadButton.onclick=()=>{const e=document.createElement("a");e.href=this.url,e.download="audio.wav",e.click()}}static createPlugins(e){var t;const i={hover:()=>{var t;return a.default.create(null===(t=e.pluginOptions)||void 0===t?void 0:t.hover)},minimap:()=>{var t,i;return r.default.create(Object.assign(Object.assign({},null===(t=e.pluginOptions)||void 0===t?void 0:t.minimap),{plugins:[a.default.create(Object.assign(Object.assign({},null===(i=e.pluginOptions)||void 0===i?void 0:i.hover),{lineWidth:1}))]}))},spectrogram:()=>{var t;return o.default.create(null===(t=e.pluginOptions)||void 0===t?void 0:t.spectrogram)},timeline:()=>{var t;return l.default.create(null===(t=e.pluginOptions)||void 0===t?void 0:t.timeline)},zoom:()=>{var t;return c.default.create(null===(t=e.pluginOptions)||void 0===t?void 0:t.zoom)}};return Array.from(null!==(t=e.plugins)&&void 0!==t?t:[]).map((e=>{var t;return null===(t=i[e])||void 0===t?void 0:t.call(i)})).filter(Boolean)}createWaveSurfer(){this._wavesurfer=s.default.create(Object.assign(Object.assign({},this._config.options),{container:this._container,plugins:h.createPlugins(this._config)})),this._wavesurfer.on("interaction",(()=>this._wavesurfer.playPause())),this._wavesurfer.on("decode",(e=>this._duration.textContent=(0,d.formatTime)(e))),this._wavesurfer.on("timeupdate",(e=>this._currentTime.textContent=(0,d.formatTime)(e)))}static create(e){const t=new h(e);return t.createWaveSurfer(),t.createPCMPlayer(),t.createDownloadButton(),t}}t.default=h}}]);