Giter VIP home page Giter VIP logo

Comments (14)

JavaCS3 avatar JavaCS3 commented on May 14, 2024

@SaekiRaku Updated

from vscode-rainbow-fart.

SaekiRaku avatar SaekiRaku commented on May 14, 2024

@JavaCS3 感谢!不过 60MB 对于一个插件来说确实不算小了。无论是整合进插件本身,还是启动后下载,个人感觉用户体验都没有很大的提升。因为在执行播放动作前,都需要用户进行操作或等待,并且为了稳定的网络访问,可能还需要镜像服务器。

BTW,我还发现了一个有趣的插件:https://github.com/auchenberg/vscode-browser-preview ,借助 Chrome Headless(本机仍需安装 Chrome,不过我感觉这几乎是大部分程序员的标配)在 VSCode 内嵌入一个全功能浏览器,这样也无需用户手动启动浏览器了,并且插件体积也比较容易接受(vscode-browser-preview 10MB)

from vscode-rainbow-fart.

JavaCS3 avatar JavaCS3 commented on May 14, 2024

@SaekiRaku 其实不需要ffplay打包到插件里。第一次启动插件的时候下载一次即可,只有第一次使用的时候体验会差一点。这个体验跟vscode一些language server插件一样都是运行时下载依赖包。我觉得可以接受。另外由于目前只需要播放音频,启动一个Chrome Headless感觉没啥必要额

from vscode-rainbow-fart.

SaekiRaku avatar SaekiRaku commented on May 14, 2024

@JavaCS3 Chrome Headless 的优势是不需要所有人都下载前置依赖,劣势是内存占用70MB,远大于 ffplay 的 6MB 内存。我觉得这里的问题是在于权衡用户是更能忍受 60MB 前置依赖的下载时间,还是更能忍受 70MB 的内存占用。

from vscode-rainbow-fart.

SaekiRaku avatar SaekiRaku commented on May 14, 2024

@JavaCS3 不知道还有没有更小一些的工具,ffplay 还内置了GUI/绘图等操作,而且还有一堆不太需要的解码器。实际情况下,我觉得只需要支持一小部分的音频格式就行了。


我觉得用 Golang 处理这件事不错,编写简单、容易维护还跨平台,单纯只解码播放MP3也许可以做到足够小巧。目前的一些简单的检索结果:

from vscode-rainbow-fart.

JavaCS3 avatar JavaCS3 commented on May 14, 2024

@SaekiRaku 如果你觉得目前的ffplay太大,可以在后续的版本自己重新编译去掉不必要的依赖。oto在不同的平台需要安装不同的依赖库。这种跟底层硬件打交道的东西必须是平台相关的,跟使用的语言无关,即使的语言本身是跨平台的。就像同样一个绘图指令在不同平台实现都是不一样的,需要分别编译,这个坑是绕不过去的。而且ffmpeg是个相对成熟的工具。

from vscode-rainbow-fart.

SaekiRaku avatar SaekiRaku commented on May 14, 2024

@JavaCS3 这个我理解,不过我不太了解 ffplay 的源码实现,不知道其剔除依赖的工作量有多大。我想的是将平台相关的播放部分和音频解码剥离开,播放部分单独找个小型库,解码部分单独找库,由 Golang 串联起来进行编译,这样可以尽可能的小一些,实现也不复杂,还有一部分自行定制的能力和空间。

from vscode-rainbow-fart.

zombie110year avatar zombie110year commented on May 14, 2024

为什么不让用户提前下好 ffplay,然后在插件配置中指定可执行文件的路径呢?根本不需要把这么大一个依赖和扩展一起安装吧。

Linux、macOS 都有包管理器可以用,还有国内镜像。Windows 有点麻烦,官网下载速度太慢了,60MB 在我这里得下一天。

from vscode-rainbow-fart.

fgheng avatar fgheng commented on May 14, 2024

@JavaCS3 感谢!不过 60MB 对于一个插件来说确实不算小了。无论是整合进插件本身,还是启动后下载,个人感觉用户体验都没有很大的提升。因为在执行播放动作前,都需要用户进行操作或等待,并且为了稳定的网络访问,可能还需要镜像服务器。

BTW,我还发现了一个有趣的插件:https://github.com/auchenberg/vscode-browser-preview ,借助 Chrome Headless(本机仍需安装 Chrome,不过我感觉这几乎是大部分程序员的标配)在 VSCode 内嵌入一个全功能浏览器,这样也无需用户手动启动浏览器了,并且插件体积也比较容易接受(vscode-browser-preview 10MB)

sdl2好像也可以播放音频吧?而且比较小?

from vscode-rainbow-fart.

songzhi avatar songzhi commented on May 14, 2024

我觉得最好是像其他基于LSP的VSCode插件那样,用一个原生语言比如C++,Rust写一个服务器,插件和它通信控制它播放声音。插件在安装的时候下载预编译的可执行文件,启动的时候启动它作为一个后台进程。

from vscode-rainbow-fart.

ouuan avatar ouuan commented on May 14, 2024

可以让用户自己设定播放音频的命令,然后在使用说明中提供一些解决方案?

from vscode-rainbow-fart.

muyichenfeng avatar muyichenfeng commented on May 14, 2024

绕过浏览器限制播放音频处理的怎么样了?

from vscode-rainbow-fart.

SaekiRaku avatar SaekiRaku commented on May 14, 2024

@muyichenfeng 就之前的讨论来看,个人目前比较倾向于 @ouuan 的方式,默认仍然通过浏览器进行播放(或 Chrome Headless),由不介意等待依赖下载和安装的用户自行配置希望使用的音频播放工具。

from vscode-rainbow-fart.

jadepeng avatar jadepeng commented on May 14, 2024

@muyichenfeng 就之前的讨论来看,个人目前比较倾向于 @ouuan 的方式,默认仍然通过浏览器进行播放(或 Chrome Headless),由不介意等待依赖下载和安装的用户自行配置希望使用的音频播放工具。

https://github.com/jadepeng/mp3player

这里用golang写了个demo,启动一个websocket服务器,可以接收{"command":"play","arg":"DIRECTORY\\built-in-voice-chinese\\await_01.mp3"}播放mp3
rainbow-fart的配置里,可以增加播放器配置(使用浏览器、使用播放服务器),以及配置播放服务器地址
如果使用播放服务器播放,播放的时候,通过ws发送一条播放命令即可

from vscode-rainbow-fart.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.