This commit is contained in:
yumoqing 2024-01-24 16:21:02 +08:00
parent 86f6872006
commit df8e7f36dd
6 changed files with 70 additions and 25 deletions

BIN
bricks/.DS_Store vendored

Binary file not shown.

View File

@ -11,17 +11,19 @@ class AudioPlayer extends JsWidget {
super(options); super(options);
this.url = opt.url; this.url = opt.url;
this.audio = this._create('audio'); this.audio = this._create('audio');
// this.audio.autoplay = this.opts.autoplay;
this.audio.controls = true; this.audio.controls = true;
if (this.opts.autoplay){ if (this.opts.autoplay){
this.audio.addEventListener('canplay', this.play_audio.bind(this)); this.audio.addEventListener('canplay', this.play_audio.bind(this));
} }
this.audio.style.width = "100%" this.audio.style.width = "100%"
var s = this._create('source'); this.source = this._create('source');
s.src = this.opts.url; this.source.src = this.opts.url;
this.audio.appendChild(s); this.audio.appendChild(this.source);
this.dom_element.appendChild(this.audio); this.dom_element.appendChild(this.audio);
} }
set_source(url){
this.source.src = url;
}
toggle_play(){ toggle_play(){
if (this.audio.paused){ if (this.audio.paused){
this.audio.play(); this.audio.play();
@ -31,4 +33,62 @@ class AudioPlayer extends JsWidget {
} }
} }
class AudioRecorder extends HBox {
construction(opts){
super(opts);
this.start_icon = opts.start_icon || bricks_image('start_recording.png');
this.stop_icon = opts.stop_icon || bricks_image('stop_recording.png');
this.img = Image();
this.img.src = this.start_icon;
this.player = AudioPlayer();
this.add_widget(this.img);
this.add_widget(this.player);
this.img.addListener('click', this.btn_clicked.bind(this));
this.recorder = null;
this.chunks = [];
}
start_recording(){
if (!this.recorder){
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const mediaStreamSource = audioContext.createMediaStreamSource(stream);
this.recorder = new MediaRecorder(mediaStreamSource.stream, { mimeType: 'audio/wav' });
this.chunks = [];
this.recorder.addEventListener('dataavailable', event => {
this.chunks.push(event.data);
});
this.recorder.addEventListener('end', () => {
const blob = new Blob(chunks, { type: 'audio/wav' });
console.log('Audio recorded and saved as blob:', blob);
this.player.set_source(URL.createObjectURL(blob));
});
})
.catch(error => console.error('Error accessing the microphone:', error));
}
this.recorder.start();
}
stop_recording(){
if(this.recorder){
this.recorder.stop();
}
}
btn_clicked(){
if (!this.isRecording){
this.img.src = this.stop_icon;
this.isRecording = true;
this.start_recording();
} else {
this.img.src = this.start_icon;
this.isRecording = false;
this.stop_recording();
}
}
}
Factory.register('AudioPlayer', AudioPlayer); Factory.register('AudioPlayer', AudioPlayer);
Factory.register('AudioRecorder', AudioRecorder);

View File

@ -21,12 +21,13 @@ if [ ! -d ../dist/docs ];then
rm -rf ../dist/docs rm -rf ../dist/docs
mkdir ../dist/docs mkdir ../dist/docs
fi fi
if [ ! -d ../dist/imgs ];then
rm -rf ../dist/imgs
mkdir ../dist/imgs
fi
cp -a css/* ../dist/css cp -a css/* ../dist/css
cp -a imgs/* ../dist/imgs cp -a imgs/* ../dist/imgs
cp -a ../examples ../dist cp -a ../examples/* ../dist/examples
cp -a ../docs ../dist cp -a ../docs/* ../dist/docs
cp -a ../dist/* ~/www/wwwroot/bricks
# cd ../dist
# cp -a * ~/www/wwwroot/bricks

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,16 +0,0 @@
| 页面名称 | html文件 | js文件 | 说明文件是否完成 |
| ------------ | -------- | ------ | ---------------- |
| accordion | √ | √ | √ |
| audio | √ | √ | √ |
| aggrid | x | √ | x |
| button | √ | √ | √ |
| datagrid | √ | √ | x(html页面报错) |
| docs | √ | x | √ |
| editabletree | √ | √ | √ |
| error | √ | x | x(无html页面) |
| message | √ | √ | √ |
| tab | √ | √ | √ |
| toolbar | √ | √ | √ |
| tree | √ | √ | √ |
| video | √ | √ | √ |