×

Arduino歌曲播放器

消耗积分:0 | 格式:zip | 大小:0.20 MB | 2022-11-11

分享资料个

描述

项目制作方法:

第一的:

当然是 Arduino。

第二:

你需要一个扬声器来插脚 8。

我在项目中使用了玩具中的扬声器。

编码:

#include "pitches.h" //includes pitches.h file
#include "arrays.h" //includes arrays.h file
#define Speaker1 8
volatile byte Break = false;// if the song should stop or not
void setup() {
 pinMode(Speaker1,OUTPUT);// defines port 8
}
void BreakTheSong()// the function used to stop any song
{
Break = true;//force the song to stop
}
void playSong(int song ,unsigned long repeatTimes){
 for(int t = 0; t < repeatTimes; t++){
  for(int i = starting_and_ending[ song-1 ] ; i < starting_and_ending[ song ] ; i++)// this loop will play notes in the songs
 {
  tone(Speaker1,tones[i] ,durations[i]); //play a note
  delay(delays[i]);// wait for the tone to stop
  if(Break == true) //when "Break" is activated, break the song
   {Break = false; //stop breaking other songs
    break;//stop the current song
   }
 }
 }
}
void playSongForever(int song){
 do{
  for(int i = starting_and_ending[ song-1 ] ; i < starting_and_ending[ song ] ; i++)// this loop will play note tones[0] to tones[31]
 {
  tone(Speaker1,tones[i] ,durations[i]); //plays a note
  delay(delays[i]);// makes the arduino wait for the tone to stop
  if(Break == true)break; //when the interrupt is activated
 }
 }while(Break == false);
 Break = false;
}
void loop() {
playSong(1,1);// play the first song (happy birth day)
 //repeated 1 times
 playSong(2,1);// play the second song (super mario bros)
// repeated 1 times
} 

数组.h

int starting_and_ending[] {0,25,123};// the number of the first and 
final note for each song
volatile int tones[] //the notes for every song (DON'T DELETE AT ALL!)
{
//HappyBirthDay tones:
/*1*/NOTE_D4,/*2*/NOTE_D4,/*3*/NOTE_E4,/*4*/NOTE_D4,/*5*/NOTE_G4,/*6*/NOTE_FS4,/*7*/NOTE_D4,
/*8*/NOTE_D4,/*9*/NOTE_E4,/*10*/NOTE_D4,/*11*/NOTE_A4,/*12*/NOTE_G4,/*13*/NOTE_D4,/*14*/NOTE_D4,/*15*/NOTE_D5,/*16*/NOTE_B4,
/*17*/NOTE_G4,/*18*/NOTE_FS4,/*19*/NOTE_E4,/*20*/NOTE_C5,/*21*/NOTE_C5,/*22*/NOTE_B4,/*23*/NOTE_G4,/*24*/NOTE_A4,/*25*/NOTE_G4,
// super mario bros tones:
/*26*/NOTE_E4,/*27*/NOTE_E4,/*28*/NOTE_E4,/*29*/NOTE_C4,/*30*/NOTE_E4,/*31*/NOTE_G4,/*32*/NOTE_G3,
/*33*/NOTE_C4,/*34*/NOTE_G3,/*35*/NOTE_E3,/*36*/NOTE_A3,/*37*/NOTE_B3,/*38*/NOTE_AS3,/*39*/NOTE_A3,/*40*/NOTE_G3,/*41*/NOTE_E4,
/*42*/NOTE_G4,/*43*/NOTE_A4,/*44*/NOTE_F4,/*45*/NOTE_G4,/*46*/NOTE_E4,/*47*/NOTE_C4,/*48*/NOTE_D4,/*49*/NOTE_B3,/*50*/NOTE_C4,
/*51*/NOTE_G3,/*52*/NOTE_E3,/*53*/NOTE_A3,/*54*/NOTE_B3,/*55*/NOTE_AS3,/*56*/NOTE_A3,/*57*/NOTE_G3,/*58*/NOTE_E4,/*59*/NOTE_G4,
/*60*/NOTE_A4,/*61*/NOTE_F4,/*62*/NOTE_G4,/*63*/NOTE_E4,/*64*/NOTE_C4,/*65*/NOTE_D4,/*66*/NOTE_B3,
/*67*/NOTE_G4,/*68*/NOTE_FS4,/*69*/NOTE_F4,
/*70*/NOTE_D4,/*71*/NOTE_E4,/*72*/NOTE_G3,/*73*/NOTE_A3,/*74*/NOTE_C4,/*75*/NOTE_A3,/*76*/NOTE_C4,
/*77*/NOTE_D4,/*78*/NOTE_G4,/*79*/NOTE_FS4,/*80*/NOTE_F4,/*81*/NOTE_D4,/*82*/NOTE_E4,/*83*/NOTE_C5,/*84*/NOTE_C5,
/*85*/NOTE_C5,
/*86*/NOTE_G4,/*87*/NOTE_FS4,/*88*/NOTE_F4,/*89*/NOTE_D4,/*90*/NOTE_E4,/*91*/NOTE_G3,
/*92*/NOTE_A3,/*93*/NOTE_C4,/*94*/NOTE_A3,/*95*/NOTE_C4,/*96*/NOTE_D4,/*97*/NOTE_DS4,/*98*/NOTE_D4,/*99*/NOTE_C4,
/*100*/NOTE_C4,
/*101*/NOTE_C4,/*102*/NOTE_C4,/*103*/NOTE_C4,/*104*/NOTE_D4,/*105*/NOTE_E4,/*106*/NOTE_C4,/*107*/NOTE_A3,
/*108*/NOTE_G3,/*109*/NOTE_C4,/*110*/NOTE_C4,/*111*/NOTE_C4,/*112*/NOTE_C4,/*113*/NOTE_D4,/*114*/NOTE_E4,/*115*/NOTE_C4,
/*116*/NOTE_C4,
/*117*/NOTE_C4,/*118*/NOTE_C4,/*120*/NOTE_D4,/*121*/NOTE_E4,/*122*/NOTE_C4,
/*123*/NOTE_A3,
};
volatile int delays[] //the delays for every song 
// (DON'T DELETE AT ALL!)
{
//HappyBirthDay delays:
/*1*/225,/*2*/200,/*3*/400,/*4*/400,/*5*/400,
/*6*/800,/*7*/225,/*8*/200,/*9*/400,/*10*/400,/*11*/400,/*12*/800,/*13*/225,/*14*/200,/*15*/400,/*16*/400,/*17*/400,/*18*/400,
/*19*/800,/*20*/225,/*21*/200,/*22*/400,/*23*/400,/*24*/400,/*25*/800,
// super mario bros tones:
/*26*/200,/*27*/300,/*28*/300,/*29*/200,/*30*/300,/*31*/600,/*32*/600 ,/*33*/450,/*34*/450,/*35*/450,/*36*/300,/*37*/300,/*38*/200
,/*39*/300,/*40*/200,/*41*/200,/*42*/200,/*43*/300,/*44*/200,/*45*/300,/*46*/300,/*47*/300,/*48*/200,/*49*/300
,/*50*/450,/*51*/450,/*52*/450,/*53*/300,/*54*/300,/*55*/200,/*56*/300,/*57*/200,/*58*/200,/*59*/200,/*60*/300,/*61*/200,/*62*/300
,/*63*/300,/*64*/300,/*65*/200,/*66*/1000,/*67*/200,/*68*/200,/*69*/200,/*70*/300,/*71*/300,/*72*/200,/*73*/200,/*74*/300,/*75*/200,
/*76*/200,/*77*/500,/*78*/200,/*79*/200,/*80*/200,/*81*/300,/*82*/300,/*83*/300,/*84*/200,/*85*/1000,
/*86*/200,/*87*/200,/*88*/200,/*89*/300,/*90*/300,/*91*/200,/*92*/200,/*93*/300,/*94*/200,/*95*/200,/*96*/500,/*97*/500,/*99*/500,
/*99*/1300,
/*100*/200,/*101*/300,/*102*/300,/*103*/200,/*104*/300,/*105*/200,/*106*/300,/*107*/200,
/*108*/700,/*109*/200,/*110*/300,/*111*/300,/*112*/200,/*113*/300,/*114*/1300,/*115*/200,/*116*/300,/*117*/300,
/*118*/200,/*119*/300,/*120*/200,/*121*/300,/*122*/200,/*123*/700 
};
volatile int durations[] //the durations for every song 
//(DON'T DELETE AT ALL!)
{
//HappyBirthDay durations:
/*2*/200,/*3*/200,/*4*/400,/*5*/400,/*6*/400,/*7*/400,/*8*/200,/*9*/200,/*10*/400,/*11*/400,/*12*/400,/*13*/400,/*14*/200,/*15*/200,
/*16*/400,/*17*/400,/*18*/400,/*19*/400,/*20*/400,/*21*/200,/*22*/200,/*23*/400,/*24*/400,/*25*/400,/*26*/400,
// super mario bros durations:
/*26*/200,/*27*/150,/*28*/150,/*29*/200,/*30*/150,/*31*/200,/*32*/200,/*33*/200,/*34*/200,/*35*/200,/*36*/200,/*37*/200,/*38*/200,
/*39*/200,/*40*/200,/*41*/200,/*42*/200,/*43*/200,/*44*/200,/*45*/200,/*46*/200,/*47*/200,/*48*/200,/*49*/200
,/*50*/200,/*51*/200,/*52*/200,/*53*/200,/*54*/200,/*55*/200,/*56*/200,/*57*/200,/*58*/200,/*59*/200,/*60*/200,/*61*/200,/*62*/200,
/*63*/200,/*64*/200,/*65*/200,/*66*/200
,/*67*/200,/*68*/200,/*69*/200,/*70*/200,/*71*/200,/*72*/200,/*73*/200,/*74*/200,/*75*/200,/*76*/200,/*77*/200,/*78*/200,/*79*/200,
/*80*/200,/*81*/200,/*82*/200,/*83*/200,/*84*/150,/*85*/200,
/*86*/200,/*87*/200,/*88*/200,/*89*/200,/*90*/200,/*91*/200,/*92*/200,/*93*/200,
/*94*/200,/*95*/200,/*96*/200,/*97*/200,/*98*/200,/*99*/200,
/*100*/200,/*101*/200,/*102*/200,/*103*/200,/*104*/200,/*105*/200,/*106*/200,/*107*/200,/*108*/200,/*109*/200,/*110*/200,/*111*/200,
/*112*/200,/*113*/200,/*114*/200,/*115*/200,/*116*/150,/*117*/200,
/*118*/200,/*119*/200,/*120*/200,/*121*/200,/*122*/200,/*123*/200,
}; 

球场.h

pitches.h 在项目的代码部分。

代码说明:

该代码在代码本身中进行了解释

如何播放歌曲:

使用这些功能之一:playSongForever("song's number"):

永远播放一首歌。

playSong("song's number","repeattimes"):播放带有服装重复编号的歌曲。

如何创作一首新歌:

  • 将歌曲的所有音符添加到tones[]array.h
  • 将歌曲的所有延迟添加到delays[]array.h
  • 将歌曲的所有持续时间添加到durations[]array.h
  • 如果新歌中第一个音符的编号不包含starting_and_ending[]array.h中,则包括第一个音符的编号和(最后一个音符的编号 + 1),否则只包括(最后一个音符的编号 + 1)。
  • 最后,播放歌曲!使用其中一个功能: playSongForever("song's number"):永远播放一首歌。 playSong("song's number","repeattimes"):播放带有服装重复编号的歌曲。
  • 就是这样!

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Arduino歌曲播放器',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);