搜索
bottom↓
回复: 258

有简单和_弦效果的音乐发生器

  [复制链接]

出0入0汤圆

发表于 2009-9-30 22:08:34 | 显示全部楼层 |阅读模式
很久以前发现在http://elm-chan.org/works/mxb/report.html上面一个音乐程序,我深深给它吸引了,就想自己也做一个。但是他的程序是汇编语言,并且我也不理解音乐的乐理,所以没有办法理解他的程序。上一周,无意中在电脑里又看到它,心里感觉到非常遗憾,突然间下定决心,要消化它,现在终于可以有安慰了。
   下面的程序,是使用GCC编译器,AVR Studio 4调试器,音乐和音乐效果以及程序框架和http://elm-chan.org/works/mxb/report.html提供的一样。程序除了中断程序之外,其他是C语言。由于中断程序的中断频率是32KHz,所以用汇编语言写,中断程序执行时间是24.5us左右。
   电路是使用M8,外接16MHz的晶振,PB1和PB2接喇叭的两个引脚。如果不接外面的晶振,可以使用内部8MHz RC振荡器,效果另有一番风味(要设置M8的熔丝).如果要改其他频率的晶振,则需要修改pitch_table里面的相位步进表数据。根据公式Fo=K*Fc/(2^15),其中K就是pitch_table里面的相位步进,Fc是中断程序中断频率(最好需要大于音符最大频率的5倍以上);2^15:这里的相位累加器是15位的。输出信号频率与PWM的频率没有关系,但是需要PWM的频率大于Fc(最好2倍以上);Fo就是输出音符的频率。
   由于不懂得音乐的乐理,所以很难自己根据简谱编写程序提供的tone表。
点击此处下载 ourdev_487453.rar(文件大小:1.04M) (原文件名:yinyue.rar)

出0入0汤圆

 楼主| 发表于 2009-9-30 22:14:58 | 显示全部楼层
音乐效果(与http://elm-chan.org/works/mxb/report.html里面提供一样)
将文件后缀名txt改为:mpeg
点击此处下载 ourdev_487457.txt(文件大小:995K) (原文件名:mg.txt)

出0入0汤圆

发表于 2009-9-30 22:19:57 | 显示全部楼层
真的很NB哦,至少我觉得。

出0入125汤圆

发表于 2009-9-30 22:27:11 | 显示全部楼层
嗯,我最近也在看这个
Kanon in Dourdev_487459.txt(文件大小:4K) (原文件名:mel3.txt)
纯手工转D大调卡农,attiny45通过,或许过两天可以写一个自动转换程序

出0入0汤圆

发表于 2009-9-30 22:28:08 | 显示全部楼层
效果真的很好.真的是单片机做出来的音效吗?

出0入125汤圆

发表于 2009-9-30 22:31:30 | 显示全部楼层
想起楼主不一定有PERL
点击此处下载 ourdev_487461.rar(文件大小:2K) (原文件名:melody.rar)

出0入0汤圆

发表于 2009-9-30 23:16:30 | 显示全部楼层
很早就看到elm-chan的这个和_弦发生,也一直有和lz一样的欲消化的想法,不过最终没有像lz一样去实现.
谢谢lz

出0入0汤圆

发表于 2009-9-30 23:23:44 | 显示全部楼层
顶,要是有个自动乐谱转换程序就好了

出0入0汤圆

发表于 2009-9-30 23:32:13 | 显示全部楼层
请问楼主乐谱是不是放在全局变量上?
我试过做过一个音乐盒,将乐谱数组记在全局变量上(方便编程)
结果存了三首歌后ram不够……

出0入0汤圆

发表于 2009-9-30 23:43:50 | 显示全部楼层
先顶一下,以后再看。

出0入0汤圆

 楼主| 发表于 2009-9-30 23:51:33 | 显示全部楼层
to:yqhpaladin123
乐谱放在ROM中,RAM只是存放一个54字节的结构体以及4个unsigned char 变量

出0入0汤圆

发表于 2009-10-1 00:14:33 | 显示全部楼层
声音效果不错

出0入0汤圆

发表于 2009-10-1 00:33:00 | 显示全部楼层
顶起来,前几天看到这个也想自己试试,有楼主的成功经验应该很容易了,谢谢楼主.希望有人能搞出乐谱转换程序.

出0入0汤圆

 楼主| 发表于 2009-10-1 01:15:12 | 显示全部楼层
to:【3楼】 iamseer
你提供的D大调卡农效果如下(将后缀名txt改为:mp3):
点击此处下载 ourdev_487499.txt(文件大小:2.22M) (原文件名:卡农.txt)

出0入0汤圆

发表于 2009-10-1 07:51:45 | 显示全部楼层
强。
本贴该置酷。

proteus仿真:

(原文件名:Image0162.JPG)
仿真用8M时钟,听起来感觉比16M要好。
点击此处下载 ourdev_487533.rar(文件大小:30K) (原文件名:vsm.rar)

出0入0汤圆

发表于 2009-10-1 08:04:58 | 显示全部楼层
效果不错

出0入125汤圆

发表于 2009-10-1 11:34:26 | 显示全部楼层
to LZ
你是用什么喇叭?
我用3V CR2450 ,attiny45,0.25w喇叭会爆音,2W喇叭还好但还是有沙沙声
后来顺便拿到实验课上滤波后接到B类功放上接20W喇叭,效果还不错

出0入0汤圆

发表于 2009-10-1 16:36:26 | 显示全部楼层
好东西

出0入0汤圆

发表于 2009-10-1 18:17:36 | 显示全部楼层
LZ厉害,可惜我不会AVR,更不懂音乐.请教LZ喇叭用蜂明器能响吗

出0入134汤圆

发表于 2009-10-1 21:04:02 | 显示全部楼层
效果有那么好?

出0入80汤圆

发表于 2009-10-2 02:26:51 | 显示全部楼层
很早以前就有51做的和_弦,我这还有电路图,可以做到8和_弦,程序不知道扔哪去了,实际效果比这个更好,可以有钢琴、风琴、小提琴、圆号、黑管等音色选择,用020可以存储1K多首歌

出0入0汤圆

发表于 2009-10-3 07:23:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-3 09:20:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-4 17:23:42 | 显示全部楼层
和_弦是什么意思?

到底是什么让 声音 听起来顺耳的?

出0入0汤圆

发表于 2009-10-4 22:16:18 | 显示全部楼层
把手上的AVR-USB稍加修改试了一下,很有意思,谢谢楼主共享。

但发现有破音,总觉有点缺憾。由于代码量不大,仔细阅读了代码。

发现楼主的isr.s程序文件中有一处错误,R8应为R18,可能是手误,破音就是因为这个产生。

出0入0汤圆

 楼主| 发表于 2009-10-5 15:32:41 | 显示全部楼层
to:【24楼】 hwbrat
你是正确的,谢谢你的指正。

出0入0汤圆

 楼主| 发表于 2009-10-5 19:05:50 | 显示全部楼层
to:【18楼】 lovely-teddy
我没有试过用蜂鸣器的,你可以尝试一下。我直接连接到15W左右的喇叭上。用耳塞也可以(小心耳朵)。

出0入0汤圆

 楼主| 发表于 2009-10-5 19:10:25 | 显示全部楼层
to:【20楼】 czzhouyun  
    你再细心找找,看看能否找到,如果我有机会看到你的,也许我就不需要折腾这么长时间了。我E文太差了,AVR的汇编是一边看指令一边写程序。如果是51单片机,我还是比较熟悉的。
   你说你的有多种音色,我到现在为止还不知道那个波表数据是怎样生成的,你能够给于指导?

出0入0汤圆

发表于 2009-10-5 20:47:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-5 21:06:21 | 显示全部楼层
【27楼】 lzf713

波表数据 表示音色。
你的程序里的波表数据实际就是一段简单的钢琴音的开始部分,起音部分是完整的(这个很重要),后面部分用一个周期的正弦波来表征,之后的忽略,要配合包罗波来产生持续音和音尾。
本程序的包罗波是简单的RC曲线,与实际的钢琴包罗波差别较大,但是音头是完整的,所以仍然听到类似于钢琴的音色。

出0入0汤圆

 楼主| 发表于 2009-10-5 21:16:09 | 显示全部楼层
to:【29楼】 coody
我能理解你意思。我不知道这个数据表是怎样得到的,是不是用软件录制?如果是,那么录制那个频率的音符?用什么采样频率去录制等等问题,我一直搞不清楚。

出0入0汤圆

发表于 2009-10-5 21:35:00 | 显示全部楼层
我不熟悉AVR的汇编,所以没详细看你ISR里的程序,否则我可以告诉你这个表是录的哪个音和采样频率。
我以前得到音色,直接将WAVE转成数据表的

出0入0汤圆

发表于 2009-10-5 21:36:16 | 显示全部楼层
之前也看过这个网站的程序,可惜看不明白,谢谢lz分享!

出0入0汤圆

发表于 2009-10-5 21:43:11 | 显示全部楼层
bucuo

出0入125汤圆

发表于 2009-10-5 22:31:03 | 显示全部楼层
这个程序并不是模仿钢琴,而是八音盒,声音分为attack 和 sustain 两部分(原文如此)

(原文件名:wt.png)

出0入0汤圆

 楼主| 发表于 2009-10-5 22:49:51 | 显示全部楼层
TO:【31楼】 coody  
在中断程序里面所使用数据表格就是【34楼】 iamseer 所示波形所对应的数据。
也就是wavetable.h文件中的wave_table[]数组

出0入0汤圆

发表于 2009-10-6 01:44:24 | 显示全部楼层
原作者提供好像还提供了两个PERL脚本把WAV文件转换成数据表.

出0入0汤圆

发表于 2009-10-6 09:49:47 | 显示全部楼层
很好听,不知道用51怎么实现?用51和蜂鸣器做过,效果忒差,改用喇叭声音也不好听……

出0入0汤圆

 楼主| 发表于 2009-10-6 11:59:43 | 显示全部楼层
to:【37楼】 chengpiaopiao
用51单片机,如果晶振频率是24MHz的,绝对可以,如果是12MHz,那么输出音频频率可能比较低一些。但是常见的51单片机没有PWM,所以一般用外接DAC或者用R2R电阻网络作DAC(这样的速度明显比AVR的PWM快,如果用R2R作为DAC,由于51单片机输出驱动能力很弱,所以中间需要数据缓冲器,如:74HC245)

出0入0汤圆

发表于 2009-10-6 13:30:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-6 13:53:43 | 显示全部楼层
也想做一个 请推荐一款 效果好 好买到的

喇叭

这个好像作者没有特别说明型号,在原理图中也只是用SP表示一下  

谢谢

出0入0汤圆

发表于 2009-10-6 15:12:11 | 显示全部楼层
to:【37楼】 chengpiaopiao

你那是单个方波的吧?所以不好听,LZ这个是等效于直接播放乐器的WAVE。。。

to 【38楼】 lzf713

有部分51,比如象STC这样的51,输出可以用PUSH-PULL,要不就用一片很便宜的立体声DAC(1元RMB左右)做输出。

出0入0汤圆

发表于 2009-10-6 15:20:52 | 显示全部楼层
好东西,有时间也搞一个

出0入0汤圆

 楼主| 发表于 2009-10-6 17:44:44 | 显示全部楼层
windows xp 下面有一个名字叫:gm.dls软波表,有许多音色,但是我不懂得它的内部结构(不知道那些音色对应那些数据),如果知道它的结构,那么就可以将需要音色数据找出来并用在这个音乐盒里面,这个音乐盒就不会如此单调了。
我现在准备做的就是将MIDI转换为该音乐盒能识别的音符代码。

出0入125汤圆

发表于 2009-10-6 17:57:24 | 显示全部楼层
to lz 前面的数字是指音符的起始时间,以10ms为单位
以卡农为例,4/4是指以四分音符为一拍,每小节4拍。80bpm指每分钟80拍。即每个四分音符750ms。对应该音乐盒75。
从简谱转换大体是
1        2        3        4        5        6        7
C3        D3        E3        F3        G3        A4        H4
elm-chan使用的是十二平均律定的音。具体可参阅mg.inc

出0入0汤圆

发表于 2009-10-6 20:51:14 | 显示全部楼层
很好玩,两个IO脚,是不是一个输出音色,一个输出包络?

出0入0汤圆

发表于 2009-10-6 23:00:05 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-10-6 23:12:18 | 显示全部楼层
效果不错, 比直接方波的效果好很多.

出0入0汤圆

发表于 2009-10-6 23:18:55 | 显示全部楼层
【44楼】 lzf713

MIDI数据解析很容易,关键是音色,还有多通道

出0入0汤圆

 楼主| 发表于 2009-10-6 23:35:04 | 显示全部楼层
to:【49楼】 coody
你说得没有错。我计划在原来基础上增加几个不同音阶对应的波表(我已经能在GM.DLS软波表里面提取出来,用awave软件提取),但是ROM又紧张了。至于多通道,我还没有考虑。

出0入0汤圆

 楼主| 发表于 2009-10-6 23:40:01 | 显示全部楼层
to:【46楼】 LRNAVR
不是你所说那样。两个脚输出反相的信号,至于衰减,在信号输出前已经通过运算处理好了。

出0入0汤圆

发表于 2009-10-7 08:08:37 | 显示全部楼层
很好
最好谁能介绍一下实现的原理

出0入0汤圆

发表于 2009-10-7 08:25:32 | 显示全部楼层
mark~

出0入0汤圆

发表于 2009-10-7 10:18:50 | 显示全部楼层
mark

出0入125汤圆

发表于 2009-10-7 10:54:38 | 显示全部楼层
何不外置存储器?应该制作电子琴也无妨

出0入0汤圆

发表于 2009-10-7 11:12:32 | 显示全部楼层
简单的电子琴很容易,不用音色波表,而是用音色的包络波来输出方波,效果还可以的,小孩玩的低档电子琴都是这样的多,TW的合适做这个的MCU一般是2、3元左右,可以2、4或8通道。

出0入0汤圆

发表于 2009-10-7 11:14:19 | 显示全部楼层
to 【50楼】 lzf713

“我已经能在GM.DLS软波表里面提取出来,用awave软件提取”。。。

方法能否说得详细些?我也试试看

出0入0汤圆

发表于 2009-10-7 11:15:28 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-10-7 11:24:00 | 显示全部楼层
记号

出0入0汤圆

 楼主| 发表于 2009-10-7 12:52:10 | 显示全部楼层
to:【57楼】 coody
下载“和谐版”的awave studio,然后安装。gm.dls在C:\WINDOWS\system32\drivers下面(我的系统是XP),然后用awave studio打开gm.dls(最好预先备份该文件),你就会看到许多音色数据(如果你E文不是很好,那么最好有翻译工具),选择你需要的音色数据,然后另存为*.wav格式就可以了。但是所保存的*.wav是16位的,你需要下载一个Cool Edit软件,用该软件打开你所得的wav文件,然后你将它保存为*.txt格式并且是8位的。

出0入0汤圆

发表于 2009-10-7 13:06:28 | 显示全部楼层
mark

出10入10汤圆

发表于 2009-10-7 13:09:38 | 显示全部楼层
不错,是个好东西。

有无大侠可以解决MIDI文件用M8播放?

出0入0汤圆

发表于 2009-10-7 14:31:39 | 显示全部楼层
to 【60楼】 lzf713

谢谢,我有cooledit,并且很熟悉

出0入0汤圆

发表于 2009-10-7 15:30:45 | 显示全部楼层
调试成功,开始用WINAVR 2005版本,编译出来不工作,和楼主的BIN相比,长度一样,但是有数十字节不一样,改用WINAVR2009编译,长度不一样了,不过能工作。修正了R8->R18,并用OSCCAL=0XFF将内部RC频率整定到最高,效果很好!

出0入0汤圆

发表于 2009-10-7 16:04:52 | 显示全部楼层
哪位详细说说原理,怎么用PWM实现?
我只做过R2R的。

出0入0汤圆

发表于 2009-10-8 21:48:13 | 显示全部楼层
这个要顶

出0入0汤圆

发表于 2009-10-10 22:40:26 | 显示全部楼层
需要用

出0入0汤圆

发表于 2009-10-13 11:01:15 | 显示全部楼层
学习

出0入0汤圆

 楼主| 发表于 2009-10-14 20:37:10 | 显示全部楼层
做了一个由MIDI解析出来的音符旋律程序,但是效果不理想,播放出来的效果与原来的差比较远。我无法忍受,不知道各位意见如何。
由该程序提取出来的童年:
(将后缀名txt改为h,然后替代原程序的tone.h,编译连接下载就可以了)
旋律输出表ourdev_491652.txt(文件大小:22K) (原文件名:tone.txt)
童年mid文件(将后缀名txt改为mid)
MID文件ourdev_491653.txt(文件大小:13K) (原文件名:童年.txt)
转换程序:
转换程序ourdev_491654.rar(文件大小:297K) (原文件名:MIDI旋律输出程序.rar)

出0入0汤圆

 楼主| 发表于 2009-10-14 20:43:12 | 显示全部楼层
打算自己编写一个类似钢琴琴键一样输入简谱的程序。但是我搞不清楚类似1=C调,1=D调,1=F调这些到底是什么,所以迟迟没有下手。由于用MIDI转换程序所输出的文件比较大,所以最多能装2首旋律,根本没有空间装其他音色了,如果有M128,或者M32就好了(可以将钢琴音色装进里面)。

出0入0汤圆

 楼主| 发表于 2009-10-14 21:13:53 | 显示全部楼层
提供用MIDI转换器转换出来旋律的播放效果,(将后缀名txt改为mp3)
点击此处下载 ourdev_491663.txt(文件大小:1.87M) (原文件名:童年.txt)

出0入0汤圆

发表于 2009-10-14 22:28:19 | 显示全部楼层
【70楼】 lzf713
1=C调,1=D调,1=F调

这是调式,表明歌曲的调高。

出0入0汤圆

 楼主| 发表于 2009-10-15 15:58:49 | 显示全部楼层
to:【72楼】 coody
单独知道知道这些还不够的。我在网络上找过,但是许多人认为这些是很基础的乐理,不屑一问(很多人建议买一本基础乐理书看看就知道了),所以我都不好意思公开发帖提问。
我现在理解的就是,C,D,E,F,G,A,B是音符的音名,是固定不变的(我认为其对应频率固定)。如果按全音和伴音描述,一个8度里面有:C,#C,D,#D,E,F,#F,G,#G,A,#A,B(假设中音符A的频率是440Hz,那么其他音符频率就可以推断出来,例如#A的频率=440×2^(1/12)),B的频率=440×2^(2/12),#G的频率=440/(2^(1/12))等。
假设中音符A的频率是440Hz,也许不是假设的,而是规定的。但是一般来说,人们常说低音,中音,高音等,是不是用C,#C,D,#D,E,F,#F,G,#G,A,#A,B表示一个8度里面的中音,C-1,#C-1,D-1,#D-1,E-1,F-1,#F-1,G-1,#G-1,A-1,#A-1,B-1表示比中音低8度的(也是所谓低音),C1,#C1,D1,#D1,E1,F1,#F1,G1,#G1,A1,#A1,B1表示比中音高8度的音符(也是所谓高音)?这些下标是否自由指定?例如我认为C1,#C1,D1,#D1,E1,F1,#F1,G1,#G1,A1,#A1,B1表示中音的音符而不是高8度音符,这样是否可以?

话说回来,在简谱上面经常用1=D,1=F这些,很多人就简单说一句,哦,这些是表示歌曲的调,到底是什么意思?妖,你怎么这么××的,那些就是唱这首个的调呀,你去买一本乐理的书看看,那么一大把。(没有艺术细胞的,特别难的,大哥你就别笑了)

现在我所理解的(不知道是否正确,希望各位指正),以1=C为例:
音符有音符名字,例如是C,#C,D,#D,E,F,#F,G,#G,A,#A,B,也有音符的唱名1,#1,2,#2,3,4,#4,5,#5,6,#6,7
这里1=C,表示:
唱名1对应音符C,
唱名#1对应音符#C,
     。
     。
     。
     。
     。
唱名7对应音符B
那么高8度的和低8度类似有相应对应关系,不知道我这样理解是否正确?
如果是1=D,那么:

唱名1对应音符名D
唱名#1对应音符名#D
唱名2对应音符名E
唱名#2对应音符名F
唱名3对应音符名#F
唱名4对应音符名G
唱名#4对应音符名#G
唱名5对应音符名A
唱名#5对应音符名#A
唱名6对应音符名B
唱名#6对应音符名C1(该C1表示比C高8度的)
唱名7对应音符名#C1(该#C1表示比#C高8度的)

他们好像固定音符名,然后将1=C调的唱名相对音符名向右平移2个半音位置。
同理1=F,就是固定音符名,然后将1=C调的唱名相对音符名向右平移5个伴音位置。
这样理解是否正确?

出0入0汤圆

 楼主| 发表于 2009-10-15 16:07:32 | 显示全部楼层
还有,什么大调小调的,学音乐的烦不烦,这么多抽象的概念,令门外汉像丈二的金钢,摸不到脑袋。

出0入0汤圆

发表于 2009-10-15 16:14:09 | 显示全部楼层
我试着改了音调,还能改,但是节拍啥的不会改,改一下全乱了。。。

出0入125汤圆

发表于 2009-10-15 16:22:10 | 显示全部楼层
唉。。。一年前上的音乐课现在基本全还给老师了。。。。

出0入0汤圆

发表于 2009-10-15 16:26:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-15 16:32:27 | 显示全部楼层
很简单,比如一首歌,女声的,是1=B,的,但是男声唱不下来,太高了。
如果改成1=C,则男声唱下来没有任何问题,注意,这时候,乐谱没有任何改变,仅仅改变了调高。

出0入0汤圆

发表于 2009-10-15 17:00:58 | 显示全部楼层
谁能介绍下原理啊

出0入4汤圆

发表于 2009-10-15 17:13:27 | 显示全部楼层
mark

出0入80汤圆

发表于 2009-10-16 02:36:42 | 显示全部楼层
CDEFGAB称音名,调则是将任何一个音高作为乐曲的主音,其他音是围绕这个主音形成一个体系,这个体系就叫调式
135称之为大三和_弦,由大三和_弦为主的调式称大调式
6.(下点无法表示,就这么凑合吧)  1 3 称小三和_弦,由小三和_弦为主的调式称小调式
分辨大调小调一般看结尾音,结尾是1是大调,结尾是6.是小调,还有其他方法就不多说了,旨在普及。
其实只要印象中有钢琴的黑白键就很能明白音乐到底是怎么回事。
相邻两个键之间是半音关系,注意这里中间的黑键也算一个键。
一组键有12个键,一般完整的钢琴为88键,每12个键称为一组,从左开始是大字二组、大字一组、大字组、小字组、小字一组。。。。小字五组。
我们平常所唱的1应在大字组的C。
乐曲中最重要的是拍子就是我们俗称的节奏,五线谱的调号后面有个分数,分母表示以几分音符为一拍,分子表示一小节有几拍。
乐曲可以错但节拍不能乱。
音乐好久不玩了,搜肠刮肚写些东西,可能有描述有误的地方,大家自己去找些资料。
另有空还是要学点音乐,一直认为汉人是没有节奏感的民族,主要是对音乐不重视,懂点音乐对生活和工作帮助很大,拙见别拍砖

出5入4汤圆

发表于 2009-10-16 08:57:27 | 显示全部楼层
mark一下,回去试试!

出0入0汤圆

 楼主| 发表于 2009-10-16 12:41:45 | 显示全部楼层
我想将问题简单化。
有下列唱名:
1(duo)
#1
2(lei)
#2
3(mi)
4(fa)
#4
5(suo)
#5
6(la)
#6
7(xi)
如果是1=C
那么上面唱名对应频率是多少?
如果是1=D
那么上面唱名对应频率又是多少?
如果是1=F
那么上面唱名对应频率又是多少?
各个调的唱名与频率有什么规律?

我想编写一个简谱转换程序,紧急需要知道上面唱名对应的频率,至于其他的乐理,以后再学习。

假定音名对频率如下:
音符        频率
a0        27.5
a#0        29.13523509
b0        30.86770633
c1        32.70319566
c#1        34.64782887
d1        36.70809599
d#1        38.89087297
e1        41.20344461
f1        43.65352893
f#1        46.24930284
g1        48.9994295
g#1        51.9130872
a1        55
a#1        58.27047019
b1        61.73541266
c2        65.40639133
c#2        69.29565774
d2        73.41619198
d#2        77.78174593
e2        82.40688923
f2        87.30705786
f#2        92.49860568
g2        97.998859
g#2        103.8261744
a2        110
a#2        116.5409404
b2        123.4708253
c3        130.8127827
c#3        138.5913155
d3        146.832384
d#3        155.5634919
e3        164.8137785
f3        174.6141157
f#3        184.9972114
g3        195.997718
g#3        207.6523488
a3        220
a#3        233.0818808
b3        246.9416506
c4        261.6255653
c#4        277.182631
d4        293.6647679
d#4        311.1269837
e4        329.6275569
f4        349.2282314
f#4        369.9944227
g4        391.995436
g#4        415.3046976
a4        440
a#4        466.1637615
b4        493.8833013
c5        523.2511306
c#5        554.365262
d5        587.3295358
d#5        622.2539674
e5        659.2551138
f5        698.4564629
f#5        739.9888454
g5        783.990872
g#5        830.6093952
a5        880
a#5        932.327523
b5        987.7666025
c6        1046.502261
c#6        1108.730524
d6        1174.659072
d#6        1244.507935
e6        1318.510228
f6        1396.912926
f#6        1479.977691
g6        1567.981744
g#6        1661.21879
a6        1760
a#6        1864.655046
b6        1975.533205
c7        2093.004522
c#7        2217.461048
d7        2349.318143
d#7        2489.01587
e7        2637.020455
f7        2793.825851
f#7        2959.955382
g7        3135.963488
g#7        3322.437581
a7        3520
a#7        3729.310092
b7        3951.06641
c8        4186.009045
c#8        4434.922096
d8        4698.636287
d#8        4978.03174
e8        5274.040911
f8        5587.651703
f#8        5919.910763
g8        6271.926976
g#8        6644.875161
a8        7040
a#8        7458.620184
b8        7902.13282

出0入80汤圆

发表于 2009-10-16 14:09:05 | 显示全部楼层
音调频率(HZ)=(15625*(2^音阶数))/(511-音调值)   
   
  音符   音调值   
  A   3   
  A#   31   
  B   58   
  C   83   
  C#   107   
  D   130   
  D#   151   
  E   172   
  F   191   
  F#   209   
  G   226   
  G#   242   
   
   
  音阶         范围(HZ)   
  0   31-61   
  1   61-122   
  2   122-244   
  3   244-488   
  4   489-977   
  5   978-1.95k   
  6   1.96-3.91k   
  7   3.910-7.81k
这是GOOGLE搜出来的,具体多少频率自己算下。
以下举例为假定值,如有错误盖不负责。
假定1=D,假定D的频率是164Hz,则1=164,#1=173.6。。。。。。。依次类推,
最简单的方法是将钢琴的每个键的频率都测定出来,假定1=D,就将1放在D键上然后234567依次往后一一对应即可

出0入80汤圆

发表于 2009-10-16 14:10:04 | 显示全部楼层
频率必须精准到小数点后一位数

出0入0汤圆

发表于 2009-10-16 15:21:55 | 显示全部楼层
to 【85楼】 czzhouyun

频率必须精准到小数点后一位数

==========================================

根本不需要这么准,一般的人,很难区分20个音分的间隔,专业人士也很难区分10个音分。

============================================

to 【83楼】 lzf713

比如1=C,则曲里的1就是C的频率,其他类推

出0入0汤圆

 楼主| 发表于 2009-10-16 18:22:32 | 显示全部楼层
【86楼】 coody
比如1=C,则曲里的1就是C的频率,其他类推
我不是很明白你的意思,希望更加具体一些。还是按83楼提出问题逐个回答吧(是不是要求太高了?)

出0入0汤圆

发表于 2009-10-16 20:57:28 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-10-16 22:25:51 | 显示全部楼层
音調   頻率   1=C(C大调) 1=D(D大调) 1=F(F大调)     1=C(C小调)
  C    262    低音 1                         5               1
  #C(bD)                       7
  D    294         2        低 1             6               2
  #D(bE)                                                     3
  E    330         3           2             7
  F    349         4                      低 1               4  
  #F(bG)                       3
  G    392         5           4             2               5
  #G(bA)                                                     6   
  A    440         6           5             3   
  #A(bB)                                     4                 
  B    494         7           6                             7   
  C    523    中音 1                         5               1
  #C                           7
  D    587         2        中 1             6               2
  #D                                                         3
  E    659         3           2             7
  F    698         4                      中 1               4  
  #F                           3
  G    784         5           4             2               5
  #G                                                         6
  A    880         6           5             3
  #A                                         4
  B    988         7           6                             7  
  C   1047    高音 1                         5               1
  #C                           7
  D   1175         2        高 1             6               2      
  #D                                                         3
  E   1319         3           2             7
  F   1397         4                      高 1               4   
  #F                           3
  G   1568         5           4             2               5
  #G                                                         6
  A   1760         6           5             3   
  #A                                         4
  B   1976         7           6                             7
=======================================================================

1。通常以C大调的低、中、高三个8度为基准。
2。半音的频率我没加上,你自己补充。
3。人的声音基本在这个频率段,音乐频率需要在两端扩展,规律相同。
4。小调唱歌比较少用,听上去不太和谐,通常是在音乐中使用,表示躁动、不安分等情绪或气氛等。

出0入0汤圆

发表于 2009-10-16 23:35:30 | 显示全部楼层
lz的工作非常好,我也早看过这个小的设计,只是手上没有合适的芯片,比如tiny45,所以没有去试一下效果。

LZ将其移值到M8上,我直接使用了你的HEX文件听了效果,确实感觉还不错。

设计该DD的日本人最近又推出了一个仅使用一片TINY45就能直接读取SD卡上的WAVE文件,并播放出来(还是双声道的),也是非常妙的东西。http://elm-chan.org/works/sd8p/report.html

这个东西如果效果可以的话,会有一定的应用前景的,可以做为许多场合的自动语音提示系统(播放人声的WAVE文件),成本非常低。

下面就几个问题说说我的看法。

通常一个HIFI系统的频率在20-20KHz,一般的人声最高也就3K,作为一般放音乐,定个频率上限为10K吧。

原设计采用TYNI45/85,主要是该芯片有1个250K的PWM功能(16M,PLL到64M,64M/256(8位) = 250k)。因此最高10K的频率的一个周期有25个点构成,而使用M8,它的PWM最高只能是16M/256 = 62.5k,这样最高10K的频率的一个周期就只有6个点构成,所以高频部分的效果就比较差了。

我认为是否可以使用AVR系列的AT90PWM2B,这是一片24PIN的芯片,也能产生高频的PWM,另外就是它有一个10位的DA,是否可以直接使用这个DA,而不使用PWM方式了?另外,24PIN的芯片,还有的I/O可以做通信口、接按键、LED指示等,可以构成一个小的完整的放音控制系统。

另外还应该考虑加上使用简单的模拟的LPF和功放电路,实际应用中音量还是需要放大的。

出0入0汤圆

 楼主| 发表于 2009-10-17 00:11:41 | 显示全部楼层
谢谢machao的指导!
http://elm-chan.org/works/sd8p/report.html 提供的程序,我粗略看了,自问在短时间内无法实现,原因我对FAT文件根本没有了解。

出0入0汤圆

发表于 2009-10-17 01:03:31 | 显示全部楼层
FAT是文件系统,PC操作硬盘、U盘、SD卡等都是基于FAT的。

应该要了解FAT,32位嵌入式的应用,手机、MP3、MP4、数码相框.....都需要FAT系统,这个系统基本上主要是软件实现的,网上有大量的介绍。

我已经推荐我的学生学习这个东西了,如果你是从事这个工作的,或者准备将来从事这方面的工作,学习FAT肯定有好处。不要放弃。

出0入0汤圆

发表于 2009-10-17 01:41:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-17 22:30:52 | 显示全部楼层
我也做过挺有意思!

出0入0汤圆

发表于 2009-10-18 19:51:52 | 显示全部楼层
收了

出0入0汤圆

 楼主| 发表于 2009-10-21 00:09:55 | 显示全部楼层
编写了一个手工输入简谱的程序。
界面如下:

界面截图 (原文件名:界面.GIF)
程序:
手工简谱输入转换程序ourdev_494022.rar(文件大小:269K) (原文件名:note.rar)

出0入0汤圆

发表于 2009-10-21 02:50:24 | 显示全部楼层
有新意,不错。

和_弦(多个键同时按下)如何输入?

输出文件中,节拍时间和音调的位置好象反了吧,好象原来时间在前面,音调在后面。

生成文件前面为何开始有2个0,时间吗?

出0入0汤圆

 楼主| 发表于 2009-10-21 11:53:30 | 显示全部楼层
本来打算设计多个键同时按下的,但是我发现输入简谱时候很少出现同时出现多个音符一起的,所以将它除掉了。如果要和_弦(多个键同时按下)如何输入,那么在音符-时间(MS)里面手工添加。
前面的两个0,表示从0时刻开始演奏。
“好象原来时间在前面,音调在后面。”,是不错。但是如果从另一方面去理解也可以,由于前面加了2个0,表示从0时刻开始演奏音符,而音符后面的时间减去前面开始时间的差就是这个音符演奏的时间。
下一个音符是从前面那个时间开始,持续时间是这个音符后那个时间值减去前面开始时间的差值。

出0入70汤圆

发表于 2009-10-22 22:29:33 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-10-23 01:04:17 | 显示全部楼层
mark,有空试试玩
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-1-29 23:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表