无忧启动论坛

标题: 想做一个这样的程序,哪一种程序语言比较容易实现的? [打印本页]

作者: bjay2008xmy    时间: 2021-7-3 19:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-3 21:05
本帖最后由 nttwqz 于 2021-7-3 21:10 编辑

楼主还在研究“屠龙术”呢?当然,这个实现过程属于正经研究。

如果楼主不是非要GUI程序的话,批处理就可以实现。
GUI的话,AU3、PECMD、NSIS之类都能实现,主流的编程语言Python、Java等就更不用说了,哪个都能实现,你会哪个,擅长哪个就用哪个。

比如,批处理
  1. 请输入:
  2. c cc# ccc c# cc# j ccc# ccc
  3. 261.6256 500 554.3653 500 1046.5023 500 277.1826 500 554.3653 500 /s 150 1108.73
  4. 05 500 1046.5023 500

  5. 请按任意键继续. . .
复制代码


无非就是用到了个变量嵌套,至于代码吗,你得自己研究。


作者: bjay2008xmy    时间: 2021-7-3 21:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-3 21:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-3 21:56
本帖最后由 nttwqz 于 2021-7-3 21:57 编辑
bjay2008xmy 发表于 2021-7-3 21:26
我觉得批处理做不到我想要的功能,因为简谱很多人都见过,它有三种数字表示不同的音。数字顶上有一点表示 ...

难道我上面的批处理结果不对?我觉得批处理已经实现了。
c cc# ccc c# cc# j ccc# ccc
c C低音
cc# C#中音
ccc C高音
ccc# C#高音
j /s 150
作者: bjay2008xmy    时间: 2021-7-3 22:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-3 22:15
bjay2008xmy 发表于 2021-7-3 21:19
什么叫屠龙术,怎么听起来怪怪的?除了会一点批处理,其他的语言一窍不通。。。主要是想找点参考

你研究学习了一门技术,非常精通,但是现实中用不到,就像屠龙一样,你非常精通,对龙的结构一清二楚,屠龙的手法干净利落无可挑剔,但是现实中没有龙,你学的再好又有什么用呢?没有龙给你屠,这就叫屠龙术。

就像研究批处理蜂鸣器发音,奏乐,调用VBS朗读文字,个人认为基本上属于屠龙术,实际使用中,几乎很难用到这些,远不如背景颜色+文字等这种视觉提示来的好。蜂鸣器一般电脑中已经很少见到,你再精通,绝大多数电脑运行用蜂鸣器提示的脚本它都不响,精通又有何用?!

还有调用VBS朗读文字,相比很多人都知道Win10原版安装过程中有个小娜强制朗读文本,语音识别交互的步骤,相比很多人和我一样想让她赶紧闭嘴,讽刺的是进入桌面你会发现小娜默认不支持中文,原本是支持的。这些都充分说明了,至少现在电脑上文本语音交互并不受欢迎,一般人很少会对一台电脑喊来喊去。


与其研究这些更人性化的提示,不如先研究for if set call等的使用,先能写出正确执行结果达到你目的的批处理,再研究更好地提示也不迟。
作者: 邪恶海盗    时间: 2021-7-3 22:48
nttwqz 发表于 2021-7-3 22:15
你研究学习了一门技术,非常精通,但是现实中用不到,就像屠龙一样,你非常精通,对龙的结构一清二楚,屠 ...

精屁啊精屁...

作者: bjay2008xmy    时间: 2021-7-3 22:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-3 23:02
bjay2008xmy 发表于 2021-7-3 22:50
你说的有理,要想随心写出符合自己要求的批处理应该先打好基本功,这样就不用再处处求人了。我接触批处理 ...

先用心研究for if set call这几个命令,等你掌握了多重for if等嵌套,(多重)变量嵌套等,基本上就是高级水平了,批处理之家有详细的教程。

没学好是因为不够努力,学得少、练习的少,写的少,自然难以学会。
学编程没什么好方法,只看不练,或者少练,你觉得看了你会,一动手写你会发现可能就不是那么回事了。
作者: plusv    时间: 2021-7-4 04:39
能写 GUI 的程序语言都可以.

我用 Delphi.
功能 Do Only.






Demo.7z

1.55 MB, 下载次数: 2, 下载积分: 无忧币 -2


作者: plusv    时间: 2021-7-4 08:36
nttwqz 发表于 2021-7-3 22:15
你研究学习了一门技术,非常精通,但是现实中用不到,就像屠龙一样,你非常精通,对龙的结构一清二楚,屠 ...

nttwqz>你研究学习了一门技术,非常精通,但是现实中用不到,就像屠龙一样,你非常精通,对龙的结构一清二楚,
nttwqz>屠龙的手法干净利落无可挑剔,但是现实中没有龙,你学的再好又有什么用呢?没有龙给你屠,这就叫屠龙术。

我有不同的看法.

如果会屠龙,但现在无龙,所学就无用吗 ?
那可以屠/猪/牛/羊,稍为学习不同之处,一样能上手.

我觉的技术是有延续性的.

举例:

1.
以前学 GWBasic,属于恐龙年代,现在也没人再用 GWBasic,
但它的逻辑依然适用于编写程序,
我的 批处理/程序语言 也是接着用.

2.
DOS 年代的 .EXE 有特定的格式,现在也没人再用 DOS,
但 DOS/Win32/Win64/Linux/MAC 可执行文件也大同小异,
只是格式变多指令变长,
如果改过 DOS .EXE 那么 Win32/Win64/Linux/MAC 也一样会改.

3.
DOS 年代就有 RAMDisk,现在 RAMDisk 也依然存在,
DOS 年代就有 实时压缩,现在 实时压缩 也依然存在,
DOS 年代就有 彩色文字/闪烁文字,现在 彩色文字/闪烁文字 也依然存在.

恐龙技术 也可以被 延续使用.



作者: bjay2008xmy    时间: 2021-7-4 09:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: tt911    时间: 2021-7-4 10:02
Delphi(或用本身的表格)+xls控件
读取、写入并以Excel表格的方式呈现,用不了几行代码。
难的和费脑子的是公式计算方法
作者: nttwqz    时间: 2021-7-4 10:52
plusv 发表于 2021-7-4 08:36
nttwqz>你研究学习了一门技术,非常精通,但是现实中用不到,就像屠龙一样,你非常精通,对龙的结构一清 ...

然而龙和猪牛羊到底是有区别的,与其费精力研究根本用不着的屠龙术,何不直接研究屠猪牛羊术?人的精力终究是有限的不是吗?

比如说,需要研究Win10系统,难道非要先精通Windows 3.1?虽然都是Windows,有相同的地方,但是区别肯定也不小,学习前者的部分知识肯定也能用于10,但是一步到位直接研究10肯定比研究3.1更能了解10,毕竟大家又不是研究历史的。
作者: dos时代菜鸟    时间: 2021-7-4 10:53
20多年前,DOS 环境下 , CCED 就有这个功能。
作者: bjay2008xmy    时间: 2021-7-4 11:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-4 11:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-4 11:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-4 14:03
bjay2008xmy 发表于 2021-7-4 11:45
个人的兴趣爱好罢了,喜欢什么就去研究什么,干嘛要去争辩呢?

世界之大,不可能指望一道菜每个人都爱吃。论坛本身就是交流和争论之地,只有这样才会有新的发现,天下观点都一样,你永远接触不到新东西。
他的观点基于从前到现在这个前提,说的是旧知识一部分同样适用于新知识,就比如DOS学好了肯定批处理就更好学了。又假设以前有龙,有人精通屠龙,他熟悉熟悉照样可以杀猪。
而我的观点以现在到从前为前提,拿杀猪来说,难道学杀猪得从屠龙术学起,等精通了屠龙术再熟悉龙和猪的区别,这样杀猪就好学了,那何不直接学杀猪?
前提的不同造成了不一样的观点,基于各自的前提,观点均正确。
作者: bjay2008xmy    时间: 2021-7-4 17:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-4 17:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-4 21:16
我也写个玩玩吧,用NSIS实现。





音符频率转换.7z (52.59 KB, 下载次数: 2)

作者: bjay2008xmy    时间: 2021-7-4 21:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-4 21:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: plusv    时间: 2021-7-5 18:19
bjay2008xmy 发表于 2021-7-4 17:33
plusv ,你这个delphi程序的261.6256按钮和自订时长按钮的代码能分享一下吗?因为本人确实不通delphi,程 ...




Demo.rar

160.93 KB, 下载次数: 1, 下载积分: 无忧币 -2


作者: junyee    时间: 2021-7-5 19:57
bjay2008xmy 发表于 2021-7-3 22:50
你说的有理,要想随心写出符合自己要求的批处理应该先打好基本功,这样就不用再处处求人了。我接触批处理 ...

批处理我从04年接触的,学得好也不敢说。
100分考个8~90 该是有的。

学习不要太苛求悟性,这玩意可不是人人都有。
但肯多花些时间勤练,是能看到效果的。

学习的初期是茫然的,尤其是面对复杂的语法,看到 几十个关键字,几十几百个标准函数,数不清的API函数,更别提各种语言有些莫名其妙的语法糖了。

学学批处理,bash 这类脚本,反倒能在短时间得到成就感,激发起学习兴趣。




作者: junyee    时间: 2021-7-5 19:58
楼主这个要求,用 html + javascrip , 用浏览器开 F12 调试会比较简单。

作者: bjay2008xmy    时间: 2021-7-5 21:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-5 21:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-7-5 21:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-7-5 21:45
重新编译了一下,现在支持大约8190个字符,也就是相当于五六百个音符,相比足够你用了。

音符频率转换.7z (52.6 KB, 下载次数: 3)

作者: bjay2008xmy    时间: 2021-7-5 22:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 9zhmke    时间: 2021-7-5 22:46
可以简化为只记最基本的频率,高几个8度和低8度都用算法:
int music_array[8]={0,262,293,329,349,392,440,494};//基准音频率,第一个除开数组从0开始以便对应1-7的音

我多年前写的单片机激光琴程序代码片段:

  1. void Read_Laser(){//读竖横光柱以分析演奏者意图,play[i]的[0]是当前光柱值,[1-10]最后10次,11方向判断,12峰值位置,13峰值,14谷值位置,15谷值。程序段运行40毫秒左右,约30次/秒
  2.     //starttime = millis();
  3.     natural=analogRead(54);//54(A0)-正常无激光光柱时的环境光读数,无遮栏光值,暂时没想到用来做什么
  4.     play[i][13]=0;play[i][15]=0;//本轮演奏最小值、最大值
  5.     for(i=1;i<8;i++) {  //为便于理解,使用1-7而不是0-6
  6.         play[i][11]=0;   //这个位置是累计增加次数用来判断方向,10都向同一方向则为10,都为相反为-10,否则为其他数
  7.         tmp=analogRead(i+54);//55-61(A1-A7)竖光柱,//下面第3句读出8度到变量octave,默认优先最高音,因为下方有可能是衣袖挡住
  8.         play_current=(abs(tmp<300)*(300-tmp)+tmp-abs(tmp>681)*(tmp-681)-300)/3;//用0-127表达手挡的多少,低于300算300,高于681算681,381除以3刚好映射为0-127
  9.         octave=0;if (digitalRead(3)==HIGH) octave=1;if (digitalRead(4)==HIGH) octave=2;if (digitalRead(5)==HIGH) octave=3;if (digitalRead(6)==HIGH) octave=4;
  10.         if(test>0) {//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<测试才有
  11.           if(random(0,101)>0) octave=octave_last; else octave= random(0,5);//100分之1的机率产生随机数,100分之99与上次相同的8度
  12.         }
  13.         for(j=7;j>0;j--) {             //记录下光柱变化,并保存到数组中,数组记录最后10次的值,此处的循环用于移动变量形成队列
  14.             tmp=play[i][j]-play[i][j-1];//得出两数值之差,用于下一句的判断
  15.             play[i][11]=play[i][11]+(tmp>0)-(tmp<0);//如果前面一个值比后面一个值大,则tmp为1,相同为0,较小为-1
  16.             play[i][j]=play[i][j-1];//变量后移形成队列
  17.         }
  18.         if(play_current<play[i][13]) {play[i][12]=0;play[i][13]=play_current;} else play[i][12]++ ;//峰值随数组变动位置
  19.         if(play_current>play[i][15]) {play[i][14]=0;play[i][15]=play_current;} else play[i][14]++ ;//谷值随数组变动位置
  20.         play[i][0]=play_current;//55-61(A1-A7)竖光柱,54(A0)-环境光只在开机和适当的时候再读取,放入play[0][0]
  21.         play_wave=play[i][14]-play[i][12];//峰值到谷值的频率为抖动频率
  22.         //play_size=play[i][15]-play[i][13];//峰值到谷值的幅度为抖动幅度
  23.         channel=36+octave*12+i*2-2-(i>3);//把第几根光柱和八度换算成12度音阶数值代码以便后续调用
  24.         for(tmp=1;i<7;i++) if (play[tmp][1]>play_size) play_size=play[tmp][1];//最后几个数中的的最大值
  25.         play_size=play_size*3;if(play_size>126) play_size=127;//音量最大只能127
  26.         if (play_current<1)   //-----------------------------------------满激光,表示手伸出去了,没有手掌或手指挡住-------------------------------------
  27.             if (play[i][1]==0)  for(j=15;j>0;j--) play[i][j]=0;//上次就已经是0 则消除所有记录重新来
  28.             else{
  29.                 if (channel>35) {//有发声标志则发声,参数为光柱、8度、轻重、弯音<<<<<<<<<<<<<<唯一的发声入口
  30.                       mySerial.write(144);mySerial.write(channel);mySerial.write(play_size);
  31.                 }
  32.             }
  33.         else   {             //-----------------------------------------激光被阻挡,表示手伸进来了-------------------------------------
  34.             //if(play[i][11]== 10);//10个变量都渐变增大此为入
  35.             if(play[i][11]=7) {//最后7次都是向里面伸手,应该压低声音
  36.                 mySerial.write(128);mySerial.write(channel);mySerial.write(play_size);
  37.             }
  38.             else {//手已进来,但在抖动,应产生颤音
  39.                 //升半音或者降半音
  40.                 //跟随手指的抖动频率来升降半音
  41.             }
  42.         }
  43.         octave_last=octave;
  44.     } //Serial.print("Read_Laser: ");Serial.println(millis() - starttime);   delay(1000);//计算执行一次的时间
  45. }

复制代码

作者: nttwqz    时间: 2021-7-5 23:08
bjay2008xmy 发表于 2021-7-5 22:45
程序很小巧实用,费心了。

这两天我去学习了一些面向对象的程序设计,也能自己做了一个程序出来了。 ...

还是自己写的更符合自己的心意,就是吧复杂的总是懒的去弄。。。
作者: bjay2008xmy    时间: 2021-7-6 09:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: junyee    时间: 2021-7-6 09:53
9zhmke 发表于 2021-7-5 22:46
可以简化为只记最基本的频率,高几个8度和低8度都用算法:
int music_array[8]={0,262,293,329,349,392,44 ...

  arduino 吧。


作者: plusv    时间: 2021-7-6 09:54
bjay2008xmy 发表于 2021-7-6 09:34
我在delphi7编译你的这个程序,编译通过了,右键点击按钮输出文本的功能没有反应。查过一些相关资料,好 ...

我上传的是 Delphi 7 完整源码 + 已编译后的 .EXE 没问题.

作者: bjay2008xmy    时间: 2021-7-6 14:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 9zhmke    时间: 2021-7-6 15:08
junyee 发表于 2021-7-6 09:53
arduino 吧。

是呀,你也玩这个?
作者: junyee    时间: 2021-7-6 15:45
9zhmke 发表于 2021-7-6 15:08
是呀,你也玩这个?

单片机玩了七八年。
从早期的 51,stm8,stm32 和一大堆的 cortex-mX 都玩了个遍。
pic/msp430,esp 这些也都玩

挺费钱的。...


作者: bjay2008xmy    时间: 2021-7-6 16:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: plusv    时间: 2021-7-6 17:05
bjay2008xmy 发表于 2021-7-6 16:52
单片机怎么还跟音律扯上了呢?

因为 单片机 也可以让 蜂鸣器 发声,
以前是 8048/51 ...
现在是 Arduino/Raspberry Pi ...

作者: bjay2008xmy    时间: 2021-7-6 18:57
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3