صفحه اصلی مقالات برنامه پیانو ساده در jQuery - jsRapPiano برای سایت

برنامه پیانو ساده در jQuery - jsRapPiano برای سایت

برنامه پیانو ساده در jQuery - jsRapPiano برای سایت

نویسنده :

jsRapPiano یک افزونه jQuery برای ایجاد یک برنامه پیانوی قابل تنظیم و قابل استفاده با استفاده از HTML ساده / CSS / JavaScript است. شما کاربران می توانید پیانو را با استفاده از

jsRapPiano یک افزونه jQuery برای ایجاد یک برنامه پیانوی قابل تنظیم و قابل استفاده با استفاده از HTML ساده / CSS / JavaScript است. شما کاربران می توانید پیانو را با استفاده از کلیک ماوس و لمس رویدادهای ضربه بزنید.
پرونده های JavaScript و CSS افزونه jQuery jsRapPiano را در سند وارد کنید.
 

index.css

body{background-color:grey;}
#divMain{
margin:auto;		
width:80%;
}
#divGitHub{
top:0px;
right:0px;
width:200px;
height:200px;
overflow:hidden;
position:absolute;
z-index:100;
pointer-events:none;
}
#GitHub{
background-color:#800;	
border:solid 2px black;	
color:white;
cursor:pointer;
font:bold 14px Arial,Helvetica,sans-serif;
height:20px;
padding-top:3px;
position:absolute;
right:60px;
text-align: center;
transform:translate(50%,-50%) rotate(45deg);
text-shadow: 0 0 8px black;
top:60px;
width:240px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
pointer-events:auto;
}
#GitHub:after{
content:'Star me on GitHub';
}
#GitHub:hover{
background-color:#f00;
}
#demo1{
margin:8px auto;
}

jsRapPiano.css

.rapPiano{
margin:0px auto;
white-space:nowrap;
}
.divKey {
display:inline-block;
height:100%;
position:relative;
margin:0 2px;
cursor:-webkit-grab;
cursor:grab;
}
.major {
background-color:white;
border:1px solid #000;
box-shadow:inset 0px 0px 4px #000;
display: block;
height:100%;
position:relative;
border-radius:8px;
}
.divKey .major:active{
box-shadow:inset 0px 0px 8px #000;
height:98%;
}
.minor{
box-shadow: inset 0 -1px 2px rgba(255, 255, 255, 0.5), 0 2px 3px rgba(0, 0, 0, 0.5);
background-color:black;
border-width:1px 3px 8px;
border-style:solid;
border-color:#666 #222 #111 #555;
height:50%;
width:70%;
position:absolute;
right:-39%;
top:0px;
width:60%;
z-index:1;
}
.divKey .minor:active{
border-bottom-width:3px;
top:0px;
}

jsRapPiano.js

$(window).resize(function () {
	$('.rapPiano').each(function () {
		this.Render();
	});
});

(function ($) {
	$.fn.jsRapPiano = function (options) {

		return this.each(function () {
			this.opt = $.extend({
				octave: 3,
				octaves: 2,
				waveType: 'square',
				envelope: {
					attack: 0.05,
					decay: 0.1,
					sustain: 0.1,
					release: 0.5,
					level: 0.5
				},
				onClick: null
			}, options);
			let base = this;
			let AudioContext = window.AudioContext || window.webkitAudioContext;
			this.audioContext = new AudioContext();
			this.oscillator = this.audioContext.createOscillator();
			this.gainMain = this.audioContext.createGain();
			this.gainMain.gain.value = 1;
			this.gainMain.connect(this.audioContext.destination);
			this.oscillator.start(0);
			this.oscillator.type = this.opt.waveType;
			this.oscillator.frequency.value = 50;

			this.Render = function () {
				$(this).empty();
				let w = $(this).width();
				w = w / (this.opt.octaves * 7);
				$(this).addClass('rapPiano').height(w * 5);
				let i = 12 * (this.opt.octave + 1);
				for (let o = 0; o < this.opt.octaves; o++)
					for (let x = 0; x < 7; x++) {
						let k = $('
').addClass('divKey').css({ width: w }).appendTo(this); $('
').addClass('major').prop('index', i++).appendTo(k); if ((x % 7 == 2) || (x % 7 == 6)) continue; $('
').addClass('minor').prop('index', i++).appendTo(k); } $('.major,.minor', this).bind({ mousedown: function (e) { let i = $(this).prop('index'); let f = 440 * Math.pow(2, (i - 69) / 12); base.PlaySound(f); if (base.opt.onClick) base.opt.onClick.call(base); } }); } this.PlaySound = function (frequency) { this.audioContext.resume(); let t = this.audioContext.currentTime; gainNode = this.audioContext.createGain(); gainNode.connect(this.gainMain); this.oscillator.connect(gainNode); gainNode.gain.setValueAtTime(0, t); this.oscillator.frequency.value = frequency; t += this.opt.envelope.attack; gainNode.gain.linearRampToValueAtTime(1, t); t += this.opt.envelope.decay; gainNode.gain.linearRampToValueAtTime(this.opt.envelope.level, t); t += this.opt.envelope.sustain; gainNode.gain.linearRampToValueAtTime(this.opt.envelope.level, t); t += this.opt.envelope.release; gainNode.gain.linearRampToValueAtTime(0, t); } this.Render(); }) } })(jQuery);




عامرتجارت خلیج فارس







 

سوالی دارید؟ از من بپرسید

سلام چطور میتونم کمکتون بکنم؟