├── README.md
├── SwitchBeat.png
├── SwitchBeat1.png
├── css
├── bootstrap-responsive.css
├── bootstrap.css
├── custom.css
├── font-awesome.css
└── font-mfizz.css
├── fonts
├── FontAwesome.otf
├── font-mfizz.eot
├── font-mfizz.svg
├── font-mfizz.ttf
├── font-mfizz.woff
├── fontawesome-webfont.eot
├── fontawesome-webfont.svg
├── fontawesome-webfont.ttf
├── fontawesome-webfont.woff
└── icons.json
├── images
├── EchoNest.png
├── github.png
└── jekyll.png
├── javascript
├── Chart.js
├── bootstrap.min.js
├── jquery.min.js
├── raphael-min.js
└── remix.js
└── switchbeat.html
/README.md:
--------------------------------------------------------------------------------
1 | # SwitchBeat
2 |
3 |
4 |
5 | ## Check it out
6 | kumarcode.com/switchbeat.html
7 | ## Examples
8 | kumarcode.com/switchbeatexamples.html
9 | ## Uses
10 |
11 | Raphaël.js
12 | Chart.js
13 |
14 |
15 | ## Description
16 | Takes any two songs that you supply and creates a mashup between them.
17 | ### How it works
18 | The program was inspired by the infinite jukebox. Music Analysis is done on
19 | the Echonest servers. SwitchBeat uses this analysis to compare the beats of
20 | both songs. Using this analysis it creates a normally distributed beat distance
21 | dataset. Then using the parameters you specify it generates connections
22 | between both songs.
23 | ### How to use it
24 | #### 1. Select the parameters
25 | `%` for music connections : Increasing this will increase the number of
26 | connections created. I have set the default to `5%`.
27 | `%` for connection jump : Increasing this will increase the chance that
28 | SwitchBeat will jump on this connection. I have set the default to `30%`.
29 | `#` for maximum connections per beat : Increasing this will increase max
30 | number of connections a beat can have. I have set the default to `4`.
31 | `on/off` for Infinite Mode : If it is on, when the program reaches the end
32 | of one song it will jump to the start of another. I have set the default to
33 | `on`.
34 | #### 2. Upload songs
35 | You will be asked to upload your songs one by one.
36 |
37 | Please upload a .mp3, .flacs, .m4a, or .opus will not be
38 | accepted
39 | Try to upload in good quality 320 kbps or V0 is fine
40 |
41 |
42 | #### 3. Wait for the analysis to finish
43 |
44 | #### 4. Play the Mashup!
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/SwitchBeat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/SwitchBeat.png
--------------------------------------------------------------------------------
/SwitchBeat1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/SwitchBeat1.png
--------------------------------------------------------------------------------
/css/bootstrap-responsive.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.1.0
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 | .clearfix {
12 | *zoom: 1;
13 | }
14 |
15 | .clearfix:before,
16 | .clearfix:after {
17 | display: table;
18 | line-height: 0;
19 | content: "";
20 | }
21 |
22 | .clearfix:after {
23 | clear: both;
24 | }
25 |
26 | .hide-text {
27 | font: 0/0 a;
28 | color: transparent;
29 | text-shadow: none;
30 | background-color: transparent;
31 | border: 0;
32 | }
33 |
34 | .input-block-level {
35 | display: block;
36 | width: 100%;
37 | min-height: 30px;
38 | -webkit-box-sizing: border-box;
39 | -moz-box-sizing: border-box;
40 | box-sizing: border-box;
41 | }
42 |
43 | .hidden {
44 | display: none;
45 | visibility: hidden;
46 | }
47 |
48 | .visible-phone {
49 | display: none !important;
50 | }
51 |
52 | .visible-tablet {
53 | display: none !important;
54 | }
55 |
56 | .hidden-desktop {
57 | display: none !important;
58 | }
59 |
60 | .visible-desktop {
61 | display: inherit !important;
62 | }
63 |
64 | @media (min-width: 768px) and (max-width: 979px) {
65 | .hidden-desktop {
66 | display: inherit !important;
67 | }
68 | .visible-desktop {
69 | display: none !important ;
70 | }
71 | .visible-tablet {
72 | display: inherit !important;
73 | }
74 | .hidden-tablet {
75 | display: none !important;
76 | }
77 | }
78 |
79 | @media (max-width: 767px) {
80 | .hidden-desktop {
81 | display: inherit !important;
82 | }
83 | .visible-desktop {
84 | display: none !important;
85 | }
86 | .visible-phone {
87 | display: inherit !important;
88 | }
89 | .hidden-phone {
90 | display: none !important;
91 | }
92 | }
93 |
94 | @media (min-width: 1200px) {
95 | .row {
96 | margin-left: -30px;
97 | *zoom: 1;
98 | }
99 | .row:before,
100 | .row:after {
101 | display: table;
102 | line-height: 0;
103 | content: "";
104 | }
105 | .row:after {
106 | clear: both;
107 | }
108 | [class*="span"] {
109 | float: left;
110 | margin-left: 30px;
111 | }
112 | .container,
113 | .navbar-static-top .container,
114 | .navbar-fixed-top .container,
115 | .navbar-fixed-bottom .container {
116 | width: 1170px;
117 | }
118 | .span12 {
119 | width: 1170px;
120 | }
121 | .span11 {
122 | width: 1070px;
123 | }
124 | .span10 {
125 | width: 970px;
126 | }
127 | .span9 {
128 | width: 870px;
129 | }
130 | .span8 {
131 | width: 770px;
132 | }
133 | .span7 {
134 | width: 670px;
135 | }
136 | .span6 {
137 | width: 570px;
138 | }
139 | .span5 {
140 | width: 470px;
141 | }
142 | .span4 {
143 | width: 370px;
144 | }
145 | .span3 {
146 | width: 270px;
147 | }
148 | .span2 {
149 | width: 170px;
150 | }
151 | .span1 {
152 | width: 70px;
153 | }
154 | .offset12 {
155 | margin-left: 1230px;
156 | }
157 | .offset11 {
158 | margin-left: 1130px;
159 | }
160 | .offset10 {
161 | margin-left: 1030px;
162 | }
163 | .offset9 {
164 | margin-left: 930px;
165 | }
166 | .offset8 {
167 | margin-left: 830px;
168 | }
169 | .offset7 {
170 | margin-left: 730px;
171 | }
172 | .offset6 {
173 | margin-left: 630px;
174 | }
175 | .offset5 {
176 | margin-left: 530px;
177 | }
178 | .offset4 {
179 | margin-left: 430px;
180 | }
181 | .offset3 {
182 | margin-left: 330px;
183 | }
184 | .offset2 {
185 | margin-left: 230px;
186 | }
187 | .offset1 {
188 | margin-left: 130px;
189 | }
190 | .row-fluid {
191 | width: 100%;
192 | *zoom: 1;
193 | }
194 | .row-fluid:before,
195 | .row-fluid:after {
196 | display: table;
197 | line-height: 0;
198 | content: "";
199 | }
200 | .row-fluid:after {
201 | clear: both;
202 | }
203 | .row-fluid [class*="span"] {
204 | display: block;
205 | float: left;
206 | width: 100%;
207 | min-height: 30px;
208 | margin-left: 2.564102564102564%;
209 | *margin-left: 2.5109110747408616%;
210 | -webkit-box-sizing: border-box;
211 | -moz-box-sizing: border-box;
212 | box-sizing: border-box;
213 | }
214 | .row-fluid [class*="span"]:first-child {
215 | margin-left: 0;
216 | }
217 | .row-fluid .span12 {
218 | width: 100%;
219 | *width: 99.94680851063829%;
220 | }
221 | .row-fluid .span11 {
222 | width: 91.45299145299145%;
223 | *width: 91.39979996362975%;
224 | }
225 | .row-fluid .span10 {
226 | width: 82.90598290598291%;
227 | *width: 82.8527914166212%;
228 | }
229 | .row-fluid .span9 {
230 | width: 74.35897435897436%;
231 | *width: 74.30578286961266%;
232 | }
233 | .row-fluid .span8 {
234 | width: 65.81196581196582%;
235 | *width: 65.75877432260411%;
236 | }
237 | .row-fluid .span7 {
238 | width: 57.26495726495726%;
239 | *width: 57.21176577559556%;
240 | }
241 | .row-fluid .span6 {
242 | width: 48.717948717948715%;
243 | *width: 48.664757228587014%;
244 | }
245 | .row-fluid .span5 {
246 | width: 40.17094017094017%;
247 | *width: 40.11774868157847%;
248 | }
249 | .row-fluid .span4 {
250 | width: 31.623931623931625%;
251 | *width: 31.570740134569924%;
252 | }
253 | .row-fluid .span3 {
254 | width: 23.076923076923077%;
255 | *width: 23.023731587561375%;
256 | }
257 | .row-fluid .span2 {
258 | width: 14.52991452991453%;
259 | *width: 14.476723040552828%;
260 | }
261 | .row-fluid .span1 {
262 | width: 5.982905982905983%;
263 | *width: 5.929714493544281%;
264 | }
265 | .row-fluid .offset12 {
266 | margin-left: 105.12820512820512%;
267 | *margin-left: 105.02182214948171%;
268 | }
269 | .row-fluid .offset12:first-child {
270 | margin-left: 102.56410256410257%;
271 | *margin-left: 102.45771958537915%;
272 | }
273 | .row-fluid .offset11 {
274 | margin-left: 96.58119658119658%;
275 | *margin-left: 96.47481360247316%;
276 | }
277 | .row-fluid .offset11:first-child {
278 | margin-left: 94.01709401709402%;
279 | *margin-left: 93.91071103837061%;
280 | }
281 | .row-fluid .offset10 {
282 | margin-left: 88.03418803418803%;
283 | *margin-left: 87.92780505546462%;
284 | }
285 | .row-fluid .offset10:first-child {
286 | margin-left: 85.47008547008548%;
287 | *margin-left: 85.36370249136206%;
288 | }
289 | .row-fluid .offset9 {
290 | margin-left: 79.48717948717949%;
291 | *margin-left: 79.38079650845607%;
292 | }
293 | .row-fluid .offset9:first-child {
294 | margin-left: 76.92307692307693%;
295 | *margin-left: 76.81669394435352%;
296 | }
297 | .row-fluid .offset8 {
298 | margin-left: 70.94017094017094%;
299 | *margin-left: 70.83378796144753%;
300 | }
301 | .row-fluid .offset8:first-child {
302 | margin-left: 68.37606837606839%;
303 | *margin-left: 68.26968539734497%;
304 | }
305 | .row-fluid .offset7 {
306 | margin-left: 62.393162393162385%;
307 | *margin-left: 62.28677941443899%;
308 | }
309 | .row-fluid .offset7:first-child {
310 | margin-left: 59.82905982905982%;
311 | *margin-left: 59.72267685033642%;
312 | }
313 | .row-fluid .offset6 {
314 | margin-left: 53.84615384615384%;
315 | *margin-left: 53.739770867430444%;
316 | }
317 | .row-fluid .offset6:first-child {
318 | margin-left: 51.28205128205128%;
319 | *margin-left: 51.175668303327875%;
320 | }
321 | .row-fluid .offset5 {
322 | margin-left: 45.299145299145295%;
323 | *margin-left: 45.1927623204219%;
324 | }
325 | .row-fluid .offset5:first-child {
326 | margin-left: 42.73504273504273%;
327 | *margin-left: 42.62865975631933%;
328 | }
329 | .row-fluid .offset4 {
330 | margin-left: 36.75213675213675%;
331 | *margin-left: 36.645753773413354%;
332 | }
333 | .row-fluid .offset4:first-child {
334 | margin-left: 34.18803418803419%;
335 | *margin-left: 34.081651209310785%;
336 | }
337 | .row-fluid .offset3 {
338 | margin-left: 28.205128205128204%;
339 | *margin-left: 28.0987452264048%;
340 | }
341 | .row-fluid .offset3:first-child {
342 | margin-left: 25.641025641025642%;
343 | *margin-left: 25.53464266230224%;
344 | }
345 | .row-fluid .offset2 {
346 | margin-left: 19.65811965811966%;
347 | *margin-left: 19.551736679396257%;
348 | }
349 | .row-fluid .offset2:first-child {
350 | margin-left: 17.094017094017094%;
351 | *margin-left: 16.98763411529369%;
352 | }
353 | .row-fluid .offset1 {
354 | margin-left: 11.11111111111111%;
355 | *margin-left: 11.004728132387708%;
356 | }
357 | .row-fluid .offset1:first-child {
358 | margin-left: 8.547008547008547%;
359 | *margin-left: 8.440625568285142%;
360 | }
361 | input,
362 | textarea,
363 | .uneditable-input {
364 | margin-left: 0;
365 | }
366 | .controls-row [class*="span"] + [class*="span"] {
367 | margin-left: 30px;
368 | }
369 | input.span12,
370 | textarea.span12,
371 | .uneditable-input.span12 {
372 | width: 1156px;
373 | }
374 | input.span11,
375 | textarea.span11,
376 | .uneditable-input.span11 {
377 | width: 1056px;
378 | }
379 | input.span10,
380 | textarea.span10,
381 | .uneditable-input.span10 {
382 | width: 956px;
383 | }
384 | input.span9,
385 | textarea.span9,
386 | .uneditable-input.span9 {
387 | width: 856px;
388 | }
389 | input.span8,
390 | textarea.span8,
391 | .uneditable-input.span8 {
392 | width: 756px;
393 | }
394 | input.span7,
395 | textarea.span7,
396 | .uneditable-input.span7 {
397 | width: 656px;
398 | }
399 | input.span6,
400 | textarea.span6,
401 | .uneditable-input.span6 {
402 | width: 556px;
403 | }
404 | input.span5,
405 | textarea.span5,
406 | .uneditable-input.span5 {
407 | width: 456px;
408 | }
409 | input.span4,
410 | textarea.span4,
411 | .uneditable-input.span4 {
412 | width: 356px;
413 | }
414 | input.span3,
415 | textarea.span3,
416 | .uneditable-input.span3 {
417 | width: 256px;
418 | }
419 | input.span2,
420 | textarea.span2,
421 | .uneditable-input.span2 {
422 | width: 156px;
423 | }
424 | input.span1,
425 | textarea.span1,
426 | .uneditable-input.span1 {
427 | width: 56px;
428 | }
429 | .thumbnails {
430 | margin-left: -30px;
431 | }
432 | .thumbnails > li {
433 | margin-left: 30px;
434 | }
435 | .row-fluid .thumbnails {
436 | margin-left: 0;
437 | }
438 | }
439 |
440 | @media (min-width: 768px) and (max-width: 979px) {
441 | .row {
442 | margin-left: -20px;
443 | *zoom: 1;
444 | }
445 | .row:before,
446 | .row:after {
447 | display: table;
448 | line-height: 0;
449 | content: "";
450 | }
451 | .row:after {
452 | clear: both;
453 | }
454 | [class*="span"] {
455 | float: left;
456 | margin-left: 20px;
457 | }
458 | .container,
459 | .navbar-static-top .container,
460 | .navbar-fixed-top .container,
461 | .navbar-fixed-bottom .container {
462 | width: 724px;
463 | }
464 | .span12 {
465 | width: 724px;
466 | }
467 | .span11 {
468 | width: 662px;
469 | }
470 | .span10 {
471 | width: 600px;
472 | }
473 | .span9 {
474 | width: 538px;
475 | }
476 | .span8 {
477 | width: 476px;
478 | }
479 | .span7 {
480 | width: 414px;
481 | }
482 | .span6 {
483 | width: 352px;
484 | }
485 | .span5 {
486 | width: 290px;
487 | }
488 | .span4 {
489 | width: 228px;
490 | }
491 | .span3 {
492 | width: 166px;
493 | }
494 | .span2 {
495 | width: 104px;
496 | }
497 | .span1 {
498 | width: 42px;
499 | }
500 | .offset12 {
501 | margin-left: 764px;
502 | }
503 | .offset11 {
504 | margin-left: 702px;
505 | }
506 | .offset10 {
507 | margin-left: 640px;
508 | }
509 | .offset9 {
510 | margin-left: 578px;
511 | }
512 | .offset8 {
513 | margin-left: 516px;
514 | }
515 | .offset7 {
516 | margin-left: 454px;
517 | }
518 | .offset6 {
519 | margin-left: 392px;
520 | }
521 | .offset5 {
522 | margin-left: 330px;
523 | }
524 | .offset4 {
525 | margin-left: 268px;
526 | }
527 | .offset3 {
528 | margin-left: 206px;
529 | }
530 | .offset2 {
531 | margin-left: 144px;
532 | }
533 | .offset1 {
534 | margin-left: 82px;
535 | }
536 | .row-fluid {
537 | width: 100%;
538 | *zoom: 1;
539 | }
540 | .row-fluid:before,
541 | .row-fluid:after {
542 | display: table;
543 | line-height: 0;
544 | content: "";
545 | }
546 | .row-fluid:after {
547 | clear: both;
548 | }
549 | .row-fluid [class*="span"] {
550 | display: block;
551 | float: left;
552 | width: 100%;
553 | min-height: 30px;
554 | margin-left: 2.7624309392265194%;
555 | *margin-left: 2.709239449864817%;
556 | -webkit-box-sizing: border-box;
557 | -moz-box-sizing: border-box;
558 | box-sizing: border-box;
559 | }
560 | .row-fluid [class*="span"]:first-child {
561 | margin-left: 0;
562 | }
563 | .row-fluid .span12 {
564 | width: 100%;
565 | *width: 99.94680851063829%;
566 | }
567 | .row-fluid .span11 {
568 | width: 91.43646408839778%;
569 | *width: 91.38327259903608%;
570 | }
571 | .row-fluid .span10 {
572 | width: 82.87292817679558%;
573 | *width: 82.81973668743387%;
574 | }
575 | .row-fluid .span9 {
576 | width: 74.30939226519337%;
577 | *width: 74.25620077583166%;
578 | }
579 | .row-fluid .span8 {
580 | width: 65.74585635359117%;
581 | *width: 65.69266486422946%;
582 | }
583 | .row-fluid .span7 {
584 | width: 57.18232044198895%;
585 | *width: 57.12912895262725%;
586 | }
587 | .row-fluid .span6 {
588 | width: 48.61878453038674%;
589 | *width: 48.56559304102504%;
590 | }
591 | .row-fluid .span5 {
592 | width: 40.05524861878453%;
593 | *width: 40.00205712942283%;
594 | }
595 | .row-fluid .span4 {
596 | width: 31.491712707182323%;
597 | *width: 31.43852121782062%;
598 | }
599 | .row-fluid .span3 {
600 | width: 22.92817679558011%;
601 | *width: 22.87498530621841%;
602 | }
603 | .row-fluid .span2 {
604 | width: 14.3646408839779%;
605 | *width: 14.311449394616199%;
606 | }
607 | .row-fluid .span1 {
608 | width: 5.801104972375691%;
609 | *width: 5.747913483013988%;
610 | }
611 | .row-fluid .offset12 {
612 | margin-left: 105.52486187845304%;
613 | *margin-left: 105.41847889972962%;
614 | }
615 | .row-fluid .offset12:first-child {
616 | margin-left: 102.76243093922652%;
617 | *margin-left: 102.6560479605031%;
618 | }
619 | .row-fluid .offset11 {
620 | margin-left: 96.96132596685082%;
621 | *margin-left: 96.8549429881274%;
622 | }
623 | .row-fluid .offset11:first-child {
624 | margin-left: 94.1988950276243%;
625 | *margin-left: 94.09251204890089%;
626 | }
627 | .row-fluid .offset10 {
628 | margin-left: 88.39779005524862%;
629 | *margin-left: 88.2914070765252%;
630 | }
631 | .row-fluid .offset10:first-child {
632 | margin-left: 85.6353591160221%;
633 | *margin-left: 85.52897613729868%;
634 | }
635 | .row-fluid .offset9 {
636 | margin-left: 79.8342541436464%;
637 | *margin-left: 79.72787116492299%;
638 | }
639 | .row-fluid .offset9:first-child {
640 | margin-left: 77.07182320441989%;
641 | *margin-left: 76.96544022569647%;
642 | }
643 | .row-fluid .offset8 {
644 | margin-left: 71.2707182320442%;
645 | *margin-left: 71.16433525332079%;
646 | }
647 | .row-fluid .offset8:first-child {
648 | margin-left: 68.50828729281768%;
649 | *margin-left: 68.40190431409427%;
650 | }
651 | .row-fluid .offset7 {
652 | margin-left: 62.70718232044199%;
653 | *margin-left: 62.600799341718584%;
654 | }
655 | .row-fluid .offset7:first-child {
656 | margin-left: 59.94475138121547%;
657 | *margin-left: 59.838368402492065%;
658 | }
659 | .row-fluid .offset6 {
660 | margin-left: 54.14364640883978%;
661 | *margin-left: 54.037263430116376%;
662 | }
663 | .row-fluid .offset6:first-child {
664 | margin-left: 51.38121546961326%;
665 | *margin-left: 51.27483249088986%;
666 | }
667 | .row-fluid .offset5 {
668 | margin-left: 45.58011049723757%;
669 | *margin-left: 45.47372751851417%;
670 | }
671 | .row-fluid .offset5:first-child {
672 | margin-left: 42.81767955801105%;
673 | *margin-left: 42.71129657928765%;
674 | }
675 | .row-fluid .offset4 {
676 | margin-left: 37.01657458563536%;
677 | *margin-left: 36.91019160691196%;
678 | }
679 | .row-fluid .offset4:first-child {
680 | margin-left: 34.25414364640884%;
681 | *margin-left: 34.14776066768544%;
682 | }
683 | .row-fluid .offset3 {
684 | margin-left: 28.45303867403315%;
685 | *margin-left: 28.346655695309746%;
686 | }
687 | .row-fluid .offset3:first-child {
688 | margin-left: 25.69060773480663%;
689 | *margin-left: 25.584224756083227%;
690 | }
691 | .row-fluid .offset2 {
692 | margin-left: 19.88950276243094%;
693 | *margin-left: 19.783119783707537%;
694 | }
695 | .row-fluid .offset2:first-child {
696 | margin-left: 17.12707182320442%;
697 | *margin-left: 17.02068884448102%;
698 | }
699 | .row-fluid .offset1 {
700 | margin-left: 11.32596685082873%;
701 | *margin-left: 11.219583872105325%;
702 | }
703 | .row-fluid .offset1:first-child {
704 | margin-left: 8.56353591160221%;
705 | *margin-left: 8.457152932878806%;
706 | }
707 | input,
708 | textarea,
709 | .uneditable-input {
710 | margin-left: 0;
711 | }
712 | .controls-row [class*="span"] + [class*="span"] {
713 | margin-left: 20px;
714 | }
715 | input.span12,
716 | textarea.span12,
717 | .uneditable-input.span12 {
718 | width: 710px;
719 | }
720 | input.span11,
721 | textarea.span11,
722 | .uneditable-input.span11 {
723 | width: 648px;
724 | }
725 | input.span10,
726 | textarea.span10,
727 | .uneditable-input.span10 {
728 | width: 586px;
729 | }
730 | input.span9,
731 | textarea.span9,
732 | .uneditable-input.span9 {
733 | width: 524px;
734 | }
735 | input.span8,
736 | textarea.span8,
737 | .uneditable-input.span8 {
738 | width: 462px;
739 | }
740 | input.span7,
741 | textarea.span7,
742 | .uneditable-input.span7 {
743 | width: 400px;
744 | }
745 | input.span6,
746 | textarea.span6,
747 | .uneditable-input.span6 {
748 | width: 338px;
749 | }
750 | input.span5,
751 | textarea.span5,
752 | .uneditable-input.span5 {
753 | width: 276px;
754 | }
755 | input.span4,
756 | textarea.span4,
757 | .uneditable-input.span4 {
758 | width: 214px;
759 | }
760 | input.span3,
761 | textarea.span3,
762 | .uneditable-input.span3 {
763 | width: 152px;
764 | }
765 | input.span2,
766 | textarea.span2,
767 | .uneditable-input.span2 {
768 | width: 90px;
769 | }
770 | input.span1,
771 | textarea.span1,
772 | .uneditable-input.span1 {
773 | width: 28px;
774 | }
775 | }
776 |
777 | @media (max-width: 767px) {
778 | body {
779 | padding-right: 20px;
780 | padding-left: 20px;
781 | }
782 | .navbar-fixed-top,
783 | .navbar-fixed-bottom {
784 | margin-right: -20px;
785 | margin-left: -20px;
786 | }
787 | .container-fluid {
788 | padding: 0;
789 | }
790 | .dl-horizontal dt {
791 | float: none;
792 | width: auto;
793 | clear: none;
794 | text-align: left;
795 | }
796 | .dl-horizontal dd {
797 | margin-left: 0;
798 | }
799 | .container {
800 | width: auto;
801 | }
802 | .row-fluid {
803 | width: 100%;
804 | }
805 | .row,
806 | .thumbnails {
807 | margin-left: 0;
808 | }
809 | .thumbnails > li {
810 | float: none;
811 | margin-left: 0;
812 | }
813 | [class*="span"],
814 | .row-fluid [class*="span"] {
815 | display: block;
816 | float: none;
817 | width: auto;
818 | margin-left: 0;
819 | }
820 | .span12,
821 | .row-fluid .span12 {
822 | width: 100%;
823 | -webkit-box-sizing: border-box;
824 | -moz-box-sizing: border-box;
825 | box-sizing: border-box;
826 | }
827 | .input-large,
828 | .input-xlarge,
829 | .input-xxlarge,
830 | input[class*="span"],
831 | select[class*="span"],
832 | textarea[class*="span"],
833 | .uneditable-input {
834 | display: block;
835 | width: 100%;
836 | min-height: 30px;
837 | -webkit-box-sizing: border-box;
838 | -moz-box-sizing: border-box;
839 | box-sizing: border-box;
840 | }
841 | .input-prepend input,
842 | .input-append input,
843 | .input-prepend input[class*="span"],
844 | .input-append input[class*="span"] {
845 | display: inline-block;
846 | width: auto;
847 | }
848 | .modal {
849 | position: fixed;
850 | top: 20px;
851 | right: 20px;
852 | left: 20px;
853 | width: auto;
854 | margin: 0;
855 | }
856 | .modal.fade.in {
857 | top: auto;
858 | }
859 | }
860 |
861 | @media (max-width: 480px) {
862 | .nav-collapse {
863 | -webkit-transform: translate3d(0, 0, 0);
864 | }
865 | .page-header h1 small {
866 | display: block;
867 | line-height: 20px;
868 | }
869 | input[type="checkbox"],
870 | input[type="radio"] {
871 | border: 1px solid #ccc;
872 | }
873 | .form-horizontal .control-group > label {
874 | float: none;
875 | width: auto;
876 | padding-top: 0;
877 | text-align: left;
878 | }
879 | .form-horizontal .controls {
880 | margin-left: 0;
881 | }
882 | .form-horizontal .control-list {
883 | padding-top: 0;
884 | }
885 | .form-horizontal .form-actions {
886 | padding-right: 10px;
887 | padding-left: 10px;
888 | }
889 | .modal {
890 | top: 10px;
891 | right: 10px;
892 | left: 10px;
893 | }
894 | .modal-header .close {
895 | padding: 10px;
896 | margin: -10px;
897 | }
898 | .carousel-caption {
899 | position: static;
900 | }
901 | }
902 |
903 | @media (max-width: 979px) {
904 | body {
905 | padding-top: 0;
906 | }
907 | .navbar-fixed-top,
908 | .navbar-fixed-bottom {
909 | position: static;
910 | }
911 | .navbar-fixed-top {
912 | margin-bottom: 20px;
913 | }
914 | .navbar-fixed-bottom {
915 | margin-top: 20px;
916 | }
917 | .navbar-fixed-top .navbar-inner,
918 | .navbar-fixed-bottom .navbar-inner {
919 | padding: 5px;
920 | }
921 | .navbar .container {
922 | width: auto;
923 | padding: 0;
924 | }
925 | .navbar .brand {
926 | padding-right: 10px;
927 | padding-left: 10px;
928 | margin: 0 0 0 -5px;
929 | }
930 | .nav-collapse {
931 | clear: both;
932 | }
933 | .nav-collapse .nav {
934 | float: none;
935 | margin: 0 0 10px;
936 | }
937 | .nav-collapse .nav > li {
938 | float: none;
939 | }
940 | .nav-collapse .nav > li > a {
941 | margin-bottom: 2px;
942 | }
943 | .nav-collapse .nav > .divider-vertical {
944 | display: none;
945 | }
946 | .nav-collapse .nav .nav-header {
947 | color: #555555;
948 | text-shadow: none;
949 | }
950 | .nav-collapse .nav > li > a,
951 | .nav-collapse .dropdown-menu a {
952 | padding: 9px 15px;
953 | font-weight: bold;
954 | color: #555555;
955 | -webkit-border-radius: 3px;
956 | -moz-border-radius: 3px;
957 | border-radius: 3px;
958 | }
959 | .nav-collapse .btn {
960 | padding: 4px 10px 4px;
961 | font-weight: normal;
962 | -webkit-border-radius: 4px;
963 | -moz-border-radius: 4px;
964 | border-radius: 4px;
965 | }
966 | .nav-collapse .dropdown-menu li + li a {
967 | margin-bottom: 2px;
968 | }
969 | .nav-collapse .nav > li > a:hover,
970 | .nav-collapse .dropdown-menu a:hover {
971 | background-color: #f2f2f2;
972 | }
973 | .navbar-inverse .nav-collapse .nav > li > a:hover,
974 | .navbar-inverse .nav-collapse .dropdown-menu a:hover {
975 | background-color: #111111;
976 | }
977 | .nav-collapse.in .btn-group {
978 | padding: 0;
979 | margin-top: 5px;
980 | }
981 | .nav-collapse .dropdown-menu {
982 | position: static;
983 | top: auto;
984 | left: auto;
985 | display: block;
986 | float: none;
987 | max-width: none;
988 | padding: 0;
989 | margin: 0 15px;
990 | background-color: transparent;
991 | border: none;
992 | -webkit-border-radius: 0;
993 | -moz-border-radius: 0;
994 | border-radius: 0;
995 | -webkit-box-shadow: none;
996 | -moz-box-shadow: none;
997 | box-shadow: none;
998 | }
999 | .nav-collapse .dropdown-menu:before,
1000 | .nav-collapse .dropdown-menu:after {
1001 | display: none;
1002 | }
1003 | .nav-collapse .dropdown-menu .divider {
1004 | display: none;
1005 | }
1006 | .nav-collapse .navbar-form,
1007 | .nav-collapse .navbar-search {
1008 | float: none;
1009 | padding: 10px 15px;
1010 | margin: 10px 0;
1011 | border-top: 1px solid #f2f2f2;
1012 | border-bottom: 1px solid #f2f2f2;
1013 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1014 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1015 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1016 | }
1017 | .navbar .nav-collapse .nav.pull-right {
1018 | float: none;
1019 | margin-left: 0;
1020 | }
1021 | .nav-collapse,
1022 | .nav-collapse.collapse {
1023 | height: 0;
1024 | overflow: hidden;
1025 | }
1026 | .navbar .btn-navbar {
1027 | display: block;
1028 | }
1029 | .navbar-static .navbar-inner {
1030 | padding-right: 10px;
1031 | padding-left: 10px;
1032 | }
1033 | }
1034 |
1035 | @media (min-width: 980px) {
1036 | .nav-collapse.collapse {
1037 | height: auto !important;
1038 | overflow: visible !important;
1039 | }
1040 | }
1041 |
--------------------------------------------------------------------------------
/css/custom.css:
--------------------------------------------------------------------------------
1 |
2 | #bottomTitle
3 | {
4 |
5 | color:#2aa198;
6 |
7 | }
8 |
9 | #name
10 | {
11 |
12 | color:#6c71c4;
13 |
14 |
15 | }
16 |
17 |
18 |
19 | .container{
20 |
21 | padding-top: 50px;
22 |
23 |
24 | }
25 |
26 | footer{
27 |
28 | position:absolute;
29 |
30 | }
31 | body{
32 | padding-top: 0px;
33 | background-color:#eee8d5;
34 | color: #114141;
35 |
36 |
37 | }
38 | .MusicStatus{
39 | background-color: #fdf6e3;
40 |
41 |
42 | height: 75px;
43 | width: 400px;
44 | -webkit-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
45 | -moz-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
46 | box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
47 | border-radius: 3px;
48 | padding-top: 5px;
49 |
50 | }
51 |
52 | #rangeInput
53 | {
54 |
55 |
56 | width: 85%;
57 |
58 |
59 |
60 | }
61 | #rangeInputJump
62 | {
63 |
64 |
65 | width: 85%;
66 |
67 |
68 |
69 | }
70 | #rangeInputConnection
71 | {
72 |
73 |
74 | width: 85%;
75 |
76 |
77 |
78 | }
79 |
80 | #musicTilesStatus
81 | {
82 |
83 | padding-left: 15px;
84 | padding-top: 10px;
85 |
86 |
87 |
88 | }
89 | #programTitle
90 | {
91 |
92 | font-family: 'Great Vibes', cursive;
93 | font-size: 50px;
94 | position:relative;
95 | top: -25px;
96 | color:#004C4C;
97 | }
98 | .musicAndCode
99 | {
100 |
101 | color:#b37400;
102 |
103 | }
104 | #programTitle i .musicAndCode
105 | {
106 |
107 | color:#004C4C;
108 | }
109 |
110 | #programDescrip
111 | {
112 |
113 | font-family:'Lato';
114 | position: relative;
115 | top: -25px;
116 | color:#004C4C;
117 |
118 |
119 |
120 | }
121 |
122 | #inputParem {
123 | width: 60%;
124 | background-color: #fdf6e3;
125 | padding-left: 40px;
126 | padding-right: 40px;
127 | padding-top: 25px;
128 | padding-bottom: 25px;
129 | -webkit-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
130 | -moz-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
131 | box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
132 | }
133 |
134 | #uploadParem {
135 | width: 60%;
136 | background-color: #fdf6e3;
137 | padding-left: 40px;
138 | padding-right: 40px;
139 | padding-top: 25px;
140 | padding-bottom: 25px;
141 | -webkit-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
142 | -moz-box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
143 | box-shadow: -3px -3px 10px 0px rgba(50, 50, 50, 0.79);
144 | }
145 |
146 |
147 |
148 | .onoffswitch {
149 | position: relative; width: 70px;
150 | -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none;
151 | }
152 | .onoffswitch-checkbox {
153 | display: none;
154 | }
155 | .onoffswitch-label {
156 | display: block; overflow: hidden; cursor: pointer;
157 | border: 2px solid #999999; border-radius: 18px;
158 | }
159 | .onoffswitch-inner {
160 | display: block; width: 200%; margin-left: -100%;
161 | -moz-transition: margin 0.3s ease-in 0s; -webkit-transition: margin 0.3s ease-in 0s;
162 | -o-transition: margin 0.3s ease-in 0s; transition: margin 0.3s ease-in 0s;
163 | }
164 | .onoffswitch-inner:before, .onoffswitch-inner:after {
165 | display: block; float: left; width: 50%; height: 18px; padding: 0; line-height: 18px;
166 | font-size: 14px; color: white; font-family: Trebuchet, Arial, sans-serif; font-weight: bold;
167 | -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
168 | }
169 | .onoffswitch-inner:before {
170 | content: "ON";
171 | padding-left: 10px;
172 | background-color: #34A7C1; color: #FFFFFF;
173 | }
174 | .onoffswitch-inner:after {
175 | content: "OFF";
176 | padding-right: 10px;
177 | background-color: #EEEEEE; color: #999999;
178 | text-align: right;
179 | }
180 | .onoffswitch-switch {
181 | display: block; width: 25px; margin: -3.5px;
182 | background: #FFFFFF;
183 | border: 2px solid #999999; border-radius: 18px;
184 | position: absolute; top: 0; bottom: 0; right: 48px;
185 | -moz-transition: all 0.3s ease-in 0s; -webkit-transition: all 0.3s ease-in 0s;
186 | -o-transition: all 0.3s ease-in 0s; transition: all 0.3s ease-in 0s;
187 | }
188 | .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
189 | margin-left: 0;
190 | }
191 | .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
192 | right: 0px;
193 | }
194 |
195 |
--------------------------------------------------------------------------------
/css/font-awesome.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 | /* FONT PATH
6 | * -------------------------- */
7 | @font-face {
8 | font-family: 'FontAwesome';
9 | src: url('../fonts/fontawesome-webfont.eot?v=4.2.0');
10 | src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
11 | font-weight: normal;
12 | font-style: normal;
13 | }
14 | .fa {
15 | display: inline-block;
16 | font: normal normal normal 14px/1 FontAwesome;
17 | font-size: inherit;
18 | text-rendering: auto;
19 | -webkit-font-smoothing: antialiased;
20 | -moz-osx-font-smoothing: grayscale;
21 | }
22 | /* makes the font 33% larger relative to the icon container */
23 | .fa-lg {
24 | font-size: 1.33333333em;
25 | line-height: 0.75em;
26 | vertical-align: -15%;
27 | }
28 | .fa-2x {
29 | font-size: 2em;
30 | }
31 | .fa-3x {
32 | font-size: 3em;
33 | }
34 | .fa-4x {
35 | font-size: 4em;
36 | }
37 | .fa-5x {
38 | font-size: 5em;
39 | }
40 | .fa-fw {
41 | width: 1.28571429em;
42 | text-align: center;
43 | }
44 | .fa-ul {
45 | padding-left: 0;
46 | margin-left: 2.14285714em;
47 | list-style-type: none;
48 | }
49 | .fa-ul > li {
50 | position: relative;
51 | }
52 | .fa-li {
53 | position: absolute;
54 | left: -2.14285714em;
55 | width: 2.14285714em;
56 | top: 0.14285714em;
57 | text-align: center;
58 | }
59 | .fa-li.fa-lg {
60 | left: -1.85714286em;
61 | }
62 | .fa-border {
63 | padding: .2em .25em .15em;
64 | border: solid 0.08em #eeeeee;
65 | border-radius: .1em;
66 | }
67 | .pull-right {
68 | float: right;
69 | }
70 | .pull-left {
71 | float: left;
72 | }
73 | .fa.pull-left {
74 | margin-right: .3em;
75 | }
76 | .fa.pull-right {
77 | margin-left: .3em;
78 | }
79 | .fa-spin {
80 | -webkit-animation: fa-spin 2s infinite linear;
81 | animation: fa-spin 2s infinite linear;
82 | }
83 | @-webkit-keyframes fa-spin {
84 | 0% {
85 | -webkit-transform: rotate(0deg);
86 | transform: rotate(0deg);
87 | }
88 | 100% {
89 | -webkit-transform: rotate(359deg);
90 | transform: rotate(359deg);
91 | }
92 | }
93 | @keyframes fa-spin {
94 | 0% {
95 | -webkit-transform: rotate(0deg);
96 | transform: rotate(0deg);
97 | }
98 | 100% {
99 | -webkit-transform: rotate(359deg);
100 | transform: rotate(359deg);
101 | }
102 | }
103 | .fa-rotate-90 {
104 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
105 | -webkit-transform: rotate(90deg);
106 | -ms-transform: rotate(90deg);
107 | transform: rotate(90deg);
108 | }
109 | .fa-rotate-180 {
110 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
111 | -webkit-transform: rotate(180deg);
112 | -ms-transform: rotate(180deg);
113 | transform: rotate(180deg);
114 | }
115 | .fa-rotate-270 {
116 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
117 | -webkit-transform: rotate(270deg);
118 | -ms-transform: rotate(270deg);
119 | transform: rotate(270deg);
120 | }
121 | .fa-flip-horizontal {
122 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
123 | -webkit-transform: scale(-1, 1);
124 | -ms-transform: scale(-1, 1);
125 | transform: scale(-1, 1);
126 | }
127 | .fa-flip-vertical {
128 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
129 | -webkit-transform: scale(1, -1);
130 | -ms-transform: scale(1, -1);
131 | transform: scale(1, -1);
132 | }
133 | :root .fa-rotate-90,
134 | :root .fa-rotate-180,
135 | :root .fa-rotate-270,
136 | :root .fa-flip-horizontal,
137 | :root .fa-flip-vertical {
138 | filter: none;
139 | }
140 | .fa-stack {
141 | position: relative;
142 | display: inline-block;
143 | width: 2em;
144 | height: 2em;
145 | line-height: 2em;
146 | vertical-align: middle;
147 | }
148 | .fa-stack-1x,
149 | .fa-stack-2x {
150 | position: absolute;
151 | left: 0;
152 | width: 100%;
153 | text-align: center;
154 | }
155 | .fa-stack-1x {
156 | line-height: inherit;
157 | }
158 | .fa-stack-2x {
159 | font-size: 2em;
160 | }
161 | .fa-inverse {
162 | color: #ffffff;
163 | }
164 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
165 | readers do not read off random characters that represent icons */
166 | .fa-glass:before {
167 | content: "\f000";
168 | }
169 | .fa-music:before {
170 | content: "\f001";
171 | }
172 | .fa-search:before {
173 | content: "\f002";
174 | }
175 | .fa-envelope-o:before {
176 | content: "\f003";
177 | }
178 | .fa-heart:before {
179 | content: "\f004";
180 | }
181 | .fa-star:before {
182 | content: "\f005";
183 | }
184 | .fa-star-o:before {
185 | content: "\f006";
186 | }
187 | .fa-user:before {
188 | content: "\f007";
189 | }
190 | .fa-film:before {
191 | content: "\f008";
192 | }
193 | .fa-th-large:before {
194 | content: "\f009";
195 | }
196 | .fa-th:before {
197 | content: "\f00a";
198 | }
199 | .fa-th-list:before {
200 | content: "\f00b";
201 | }
202 | .fa-check:before {
203 | content: "\f00c";
204 | }
205 | .fa-remove:before,
206 | .fa-close:before,
207 | .fa-times:before {
208 | content: "\f00d";
209 | }
210 | .fa-search-plus:before {
211 | content: "\f00e";
212 | }
213 | .fa-search-minus:before {
214 | content: "\f010";
215 | }
216 | .fa-power-off:before {
217 | content: "\f011";
218 | }
219 | .fa-signal:before {
220 | content: "\f012";
221 | }
222 | .fa-gear:before,
223 | .fa-cog:before {
224 | content: "\f013";
225 | }
226 | .fa-trash-o:before {
227 | content: "\f014";
228 | }
229 | .fa-home:before {
230 | content: "\f015";
231 | }
232 | .fa-file-o:before {
233 | content: "\f016";
234 | }
235 | .fa-clock-o:before {
236 | content: "\f017";
237 | }
238 | .fa-road:before {
239 | content: "\f018";
240 | }
241 | .fa-download:before {
242 | content: "\f019";
243 | }
244 | .fa-arrow-circle-o-down:before {
245 | content: "\f01a";
246 | }
247 | .fa-arrow-circle-o-up:before {
248 | content: "\f01b";
249 | }
250 | .fa-inbox:before {
251 | content: "\f01c";
252 | }
253 | .fa-play-circle-o:before {
254 | content: "\f01d";
255 | }
256 | .fa-rotate-right:before,
257 | .fa-repeat:before {
258 | content: "\f01e";
259 | }
260 | .fa-refresh:before {
261 | content: "\f021";
262 | }
263 | .fa-list-alt:before {
264 | content: "\f022";
265 | }
266 | .fa-lock:before {
267 | content: "\f023";
268 | }
269 | .fa-flag:before {
270 | content: "\f024";
271 | }
272 | .fa-headphones:before {
273 | content: "\f025";
274 | }
275 | .fa-volume-off:before {
276 | content: "\f026";
277 | }
278 | .fa-volume-down:before {
279 | content: "\f027";
280 | }
281 | .fa-volume-up:before {
282 | content: "\f028";
283 | }
284 | .fa-qrcode:before {
285 | content: "\f029";
286 | }
287 | .fa-barcode:before {
288 | content: "\f02a";
289 | }
290 | .fa-tag:before {
291 | content: "\f02b";
292 | }
293 | .fa-tags:before {
294 | content: "\f02c";
295 | }
296 | .fa-book:before {
297 | content: "\f02d";
298 | }
299 | .fa-bookmark:before {
300 | content: "\f02e";
301 | }
302 | .fa-print:before {
303 | content: "\f02f";
304 | }
305 | .fa-camera:before {
306 | content: "\f030";
307 | }
308 | .fa-font:before {
309 | content: "\f031";
310 | }
311 | .fa-bold:before {
312 | content: "\f032";
313 | }
314 | .fa-italic:before {
315 | content: "\f033";
316 | }
317 | .fa-text-height:before {
318 | content: "\f034";
319 | }
320 | .fa-text-width:before {
321 | content: "\f035";
322 | }
323 | .fa-align-left:before {
324 | content: "\f036";
325 | }
326 | .fa-align-center:before {
327 | content: "\f037";
328 | }
329 | .fa-align-right:before {
330 | content: "\f038";
331 | }
332 | .fa-align-justify:before {
333 | content: "\f039";
334 | }
335 | .fa-list:before {
336 | content: "\f03a";
337 | }
338 | .fa-dedent:before,
339 | .fa-outdent:before {
340 | content: "\f03b";
341 | }
342 | .fa-indent:before {
343 | content: "\f03c";
344 | }
345 | .fa-video-camera:before {
346 | content: "\f03d";
347 | }
348 | .fa-photo:before,
349 | .fa-image:before,
350 | .fa-picture-o:before {
351 | content: "\f03e";
352 | }
353 | .fa-pencil:before {
354 | content: "\f040";
355 | }
356 | .fa-map-marker:before {
357 | content: "\f041";
358 | }
359 | .fa-adjust:before {
360 | content: "\f042";
361 | }
362 | .fa-tint:before {
363 | content: "\f043";
364 | }
365 | .fa-edit:before,
366 | .fa-pencil-square-o:before {
367 | content: "\f044";
368 | }
369 | .fa-share-square-o:before {
370 | content: "\f045";
371 | }
372 | .fa-check-square-o:before {
373 | content: "\f046";
374 | }
375 | .fa-arrows:before {
376 | content: "\f047";
377 | }
378 | .fa-step-backward:before {
379 | content: "\f048";
380 | }
381 | .fa-fast-backward:before {
382 | content: "\f049";
383 | }
384 | .fa-backward:before {
385 | content: "\f04a";
386 | }
387 | .fa-play:before {
388 | content: "\f04b";
389 | }
390 | .fa-pause:before {
391 | content: "\f04c";
392 | }
393 | .fa-stop:before {
394 | content: "\f04d";
395 | }
396 | .fa-forward:before {
397 | content: "\f04e";
398 | }
399 | .fa-fast-forward:before {
400 | content: "\f050";
401 | }
402 | .fa-step-forward:before {
403 | content: "\f051";
404 | }
405 | .fa-eject:before {
406 | content: "\f052";
407 | }
408 | .fa-chevron-left:before {
409 | content: "\f053";
410 | }
411 | .fa-chevron-right:before {
412 | content: "\f054";
413 | }
414 | .fa-plus-circle:before {
415 | content: "\f055";
416 | }
417 | .fa-minus-circle:before {
418 | content: "\f056";
419 | }
420 | .fa-times-circle:before {
421 | content: "\f057";
422 | }
423 | .fa-check-circle:before {
424 | content: "\f058";
425 | }
426 | .fa-question-circle:before {
427 | content: "\f059";
428 | }
429 | .fa-info-circle:before {
430 | content: "\f05a";
431 | }
432 | .fa-crosshairs:before {
433 | content: "\f05b";
434 | }
435 | .fa-times-circle-o:before {
436 | content: "\f05c";
437 | }
438 | .fa-check-circle-o:before {
439 | content: "\f05d";
440 | }
441 | .fa-ban:before {
442 | content: "\f05e";
443 | }
444 | .fa-arrow-left:before {
445 | content: "\f060";
446 | }
447 | .fa-arrow-right:before {
448 | content: "\f061";
449 | }
450 | .fa-arrow-up:before {
451 | content: "\f062";
452 | }
453 | .fa-arrow-down:before {
454 | content: "\f063";
455 | }
456 | .fa-mail-forward:before,
457 | .fa-share:before {
458 | content: "\f064";
459 | }
460 | .fa-expand:before {
461 | content: "\f065";
462 | }
463 | .fa-compress:before {
464 | content: "\f066";
465 | }
466 | .fa-plus:before {
467 | content: "\f067";
468 | }
469 | .fa-minus:before {
470 | content: "\f068";
471 | }
472 | .fa-asterisk:before {
473 | content: "\f069";
474 | }
475 | .fa-exclamation-circle:before {
476 | content: "\f06a";
477 | }
478 | .fa-gift:before {
479 | content: "\f06b";
480 | }
481 | .fa-leaf:before {
482 | content: "\f06c";
483 | }
484 | .fa-fire:before {
485 | content: "\f06d";
486 | }
487 | .fa-eye:before {
488 | content: "\f06e";
489 | }
490 | .fa-eye-slash:before {
491 | content: "\f070";
492 | }
493 | .fa-warning:before,
494 | .fa-exclamation-triangle:before {
495 | content: "\f071";
496 | }
497 | .fa-plane:before {
498 | content: "\f072";
499 | }
500 | .fa-calendar:before {
501 | content: "\f073";
502 | }
503 | .fa-random:before {
504 | content: "\f074";
505 | }
506 | .fa-comment:before {
507 | content: "\f075";
508 | }
509 | .fa-magnet:before {
510 | content: "\f076";
511 | }
512 | .fa-chevron-up:before {
513 | content: "\f077";
514 | }
515 | .fa-chevron-down:before {
516 | content: "\f078";
517 | }
518 | .fa-retweet:before {
519 | content: "\f079";
520 | }
521 | .fa-shopping-cart:before {
522 | content: "\f07a";
523 | }
524 | .fa-folder:before {
525 | content: "\f07b";
526 | }
527 | .fa-folder-open:before {
528 | content: "\f07c";
529 | }
530 | .fa-arrows-v:before {
531 | content: "\f07d";
532 | }
533 | .fa-arrows-h:before {
534 | content: "\f07e";
535 | }
536 | .fa-bar-chart-o:before,
537 | .fa-bar-chart:before {
538 | content: "\f080";
539 | }
540 | .fa-twitter-square:before {
541 | content: "\f081";
542 | }
543 | .fa-facebook-square:before {
544 | content: "\f082";
545 | }
546 | .fa-camera-retro:before {
547 | content: "\f083";
548 | }
549 | .fa-key:before {
550 | content: "\f084";
551 | }
552 | .fa-gears:before,
553 | .fa-cogs:before {
554 | content: "\f085";
555 | }
556 | .fa-comments:before {
557 | content: "\f086";
558 | }
559 | .fa-thumbs-o-up:before {
560 | content: "\f087";
561 | }
562 | .fa-thumbs-o-down:before {
563 | content: "\f088";
564 | }
565 | .fa-star-half:before {
566 | content: "\f089";
567 | }
568 | .fa-heart-o:before {
569 | content: "\f08a";
570 | }
571 | .fa-sign-out:before {
572 | content: "\f08b";
573 | }
574 | .fa-linkedin-square:before {
575 | content: "\f08c";
576 | }
577 | .fa-thumb-tack:before {
578 | content: "\f08d";
579 | }
580 | .fa-external-link:before {
581 | content: "\f08e";
582 | }
583 | .fa-sign-in:before {
584 | content: "\f090";
585 | }
586 | .fa-trophy:before {
587 | content: "\f091";
588 | }
589 | .fa-github-square:before {
590 | content: "\f092";
591 | }
592 | .fa-upload:before {
593 | content: "\f093";
594 | }
595 | .fa-lemon-o:before {
596 | content: "\f094";
597 | }
598 | .fa-phone:before {
599 | content: "\f095";
600 | }
601 | .fa-square-o:before {
602 | content: "\f096";
603 | }
604 | .fa-bookmark-o:before {
605 | content: "\f097";
606 | }
607 | .fa-phone-square:before {
608 | content: "\f098";
609 | }
610 | .fa-twitter:before {
611 | content: "\f099";
612 | }
613 | .fa-facebook:before {
614 | content: "\f09a";
615 | }
616 | .fa-github:before {
617 | content: "\f09b";
618 | }
619 | .fa-unlock:before {
620 | content: "\f09c";
621 | }
622 | .fa-credit-card:before {
623 | content: "\f09d";
624 | }
625 | .fa-rss:before {
626 | content: "\f09e";
627 | }
628 | .fa-hdd-o:before {
629 | content: "\f0a0";
630 | }
631 | .fa-bullhorn:before {
632 | content: "\f0a1";
633 | }
634 | .fa-bell:before {
635 | content: "\f0f3";
636 | }
637 | .fa-certificate:before {
638 | content: "\f0a3";
639 | }
640 | .fa-hand-o-right:before {
641 | content: "\f0a4";
642 | }
643 | .fa-hand-o-left:before {
644 | content: "\f0a5";
645 | }
646 | .fa-hand-o-up:before {
647 | content: "\f0a6";
648 | }
649 | .fa-hand-o-down:before {
650 | content: "\f0a7";
651 | }
652 | .fa-arrow-circle-left:before {
653 | content: "\f0a8";
654 | }
655 | .fa-arrow-circle-right:before {
656 | content: "\f0a9";
657 | }
658 | .fa-arrow-circle-up:before {
659 | content: "\f0aa";
660 | }
661 | .fa-arrow-circle-down:before {
662 | content: "\f0ab";
663 | }
664 | .fa-globe:before {
665 | content: "\f0ac";
666 | }
667 | .fa-wrench:before {
668 | content: "\f0ad";
669 | }
670 | .fa-tasks:before {
671 | content: "\f0ae";
672 | }
673 | .fa-filter:before {
674 | content: "\f0b0";
675 | }
676 | .fa-briefcase:before {
677 | content: "\f0b1";
678 | }
679 | .fa-arrows-alt:before {
680 | content: "\f0b2";
681 | }
682 | .fa-group:before,
683 | .fa-users:before {
684 | content: "\f0c0";
685 | }
686 | .fa-chain:before,
687 | .fa-link:before {
688 | content: "\f0c1";
689 | }
690 | .fa-cloud:before {
691 | content: "\f0c2";
692 | }
693 | .fa-flask:before {
694 | content: "\f0c3";
695 | }
696 | .fa-cut:before,
697 | .fa-scissors:before {
698 | content: "\f0c4";
699 | }
700 | .fa-copy:before,
701 | .fa-files-o:before {
702 | content: "\f0c5";
703 | }
704 | .fa-paperclip:before {
705 | content: "\f0c6";
706 | }
707 | .fa-save:before,
708 | .fa-floppy-o:before {
709 | content: "\f0c7";
710 | }
711 | .fa-square:before {
712 | content: "\f0c8";
713 | }
714 | .fa-navicon:before,
715 | .fa-reorder:before,
716 | .fa-bars:before {
717 | content: "\f0c9";
718 | }
719 | .fa-list-ul:before {
720 | content: "\f0ca";
721 | }
722 | .fa-list-ol:before {
723 | content: "\f0cb";
724 | }
725 | .fa-strikethrough:before {
726 | content: "\f0cc";
727 | }
728 | .fa-underline:before {
729 | content: "\f0cd";
730 | }
731 | .fa-table:before {
732 | content: "\f0ce";
733 | }
734 | .fa-magic:before {
735 | content: "\f0d0";
736 | }
737 | .fa-truck:before {
738 | content: "\f0d1";
739 | }
740 | .fa-pinterest:before {
741 | content: "\f0d2";
742 | }
743 | .fa-pinterest-square:before {
744 | content: "\f0d3";
745 | }
746 | .fa-google-plus-square:before {
747 | content: "\f0d4";
748 | }
749 | .fa-google-plus:before {
750 | content: "\f0d5";
751 | }
752 | .fa-money:before {
753 | content: "\f0d6";
754 | }
755 | .fa-caret-down:before {
756 | content: "\f0d7";
757 | }
758 | .fa-caret-up:before {
759 | content: "\f0d8";
760 | }
761 | .fa-caret-left:before {
762 | content: "\f0d9";
763 | }
764 | .fa-caret-right:before {
765 | content: "\f0da";
766 | }
767 | .fa-columns:before {
768 | content: "\f0db";
769 | }
770 | .fa-unsorted:before,
771 | .fa-sort:before {
772 | content: "\f0dc";
773 | }
774 | .fa-sort-down:before,
775 | .fa-sort-desc:before {
776 | content: "\f0dd";
777 | }
778 | .fa-sort-up:before,
779 | .fa-sort-asc:before {
780 | content: "\f0de";
781 | }
782 | .fa-envelope:before {
783 | content: "\f0e0";
784 | }
785 | .fa-linkedin:before {
786 | content: "\f0e1";
787 | }
788 | .fa-rotate-left:before,
789 | .fa-undo:before {
790 | content: "\f0e2";
791 | }
792 | .fa-legal:before,
793 | .fa-gavel:before {
794 | content: "\f0e3";
795 | }
796 | .fa-dashboard:before,
797 | .fa-tachometer:before {
798 | content: "\f0e4";
799 | }
800 | .fa-comment-o:before {
801 | content: "\f0e5";
802 | }
803 | .fa-comments-o:before {
804 | content: "\f0e6";
805 | }
806 | .fa-flash:before,
807 | .fa-bolt:before {
808 | content: "\f0e7";
809 | }
810 | .fa-sitemap:before {
811 | content: "\f0e8";
812 | }
813 | .fa-umbrella:before {
814 | content: "\f0e9";
815 | }
816 | .fa-paste:before,
817 | .fa-clipboard:before {
818 | content: "\f0ea";
819 | }
820 | .fa-lightbulb-o:before {
821 | content: "\f0eb";
822 | }
823 | .fa-exchange:before {
824 | content: "\f0ec";
825 | }
826 | .fa-cloud-download:before {
827 | content: "\f0ed";
828 | }
829 | .fa-cloud-upload:before {
830 | content: "\f0ee";
831 | }
832 | .fa-user-md:before {
833 | content: "\f0f0";
834 | }
835 | .fa-stethoscope:before {
836 | content: "\f0f1";
837 | }
838 | .fa-suitcase:before {
839 | content: "\f0f2";
840 | }
841 | .fa-bell-o:before {
842 | content: "\f0a2";
843 | }
844 | .fa-coffee:before {
845 | content: "\f0f4";
846 | }
847 | .fa-cutlery:before {
848 | content: "\f0f5";
849 | }
850 | .fa-file-text-o:before {
851 | content: "\f0f6";
852 | }
853 | .fa-building-o:before {
854 | content: "\f0f7";
855 | }
856 | .fa-hospital-o:before {
857 | content: "\f0f8";
858 | }
859 | .fa-ambulance:before {
860 | content: "\f0f9";
861 | }
862 | .fa-medkit:before {
863 | content: "\f0fa";
864 | }
865 | .fa-fighter-jet:before {
866 | content: "\f0fb";
867 | }
868 | .fa-beer:before {
869 | content: "\f0fc";
870 | }
871 | .fa-h-square:before {
872 | content: "\f0fd";
873 | }
874 | .fa-plus-square:before {
875 | content: "\f0fe";
876 | }
877 | .fa-angle-double-left:before {
878 | content: "\f100";
879 | }
880 | .fa-angle-double-right:before {
881 | content: "\f101";
882 | }
883 | .fa-angle-double-up:before {
884 | content: "\f102";
885 | }
886 | .fa-angle-double-down:before {
887 | content: "\f103";
888 | }
889 | .fa-angle-left:before {
890 | content: "\f104";
891 | }
892 | .fa-angle-right:before {
893 | content: "\f105";
894 | }
895 | .fa-angle-up:before {
896 | content: "\f106";
897 | }
898 | .fa-angle-down:before {
899 | content: "\f107";
900 | }
901 | .fa-desktop:before {
902 | content: "\f108";
903 | }
904 | .fa-laptop:before {
905 | content: "\f109";
906 | }
907 | .fa-tablet:before {
908 | content: "\f10a";
909 | }
910 | .fa-mobile-phone:before,
911 | .fa-mobile:before {
912 | content: "\f10b";
913 | }
914 | .fa-circle-o:before {
915 | content: "\f10c";
916 | }
917 | .fa-quote-left:before {
918 | content: "\f10d";
919 | }
920 | .fa-quote-right:before {
921 | content: "\f10e";
922 | }
923 | .fa-spinner:before {
924 | content: "\f110";
925 | }
926 | .fa-circle:before {
927 | content: "\f111";
928 | }
929 | .fa-mail-reply:before,
930 | .fa-reply:before {
931 | content: "\f112";
932 | }
933 | .fa-github-alt:before {
934 | content: "\f113";
935 | }
936 | .fa-folder-o:before {
937 | content: "\f114";
938 | }
939 | .fa-folder-open-o:before {
940 | content: "\f115";
941 | }
942 | .fa-smile-o:before {
943 | content: "\f118";
944 | }
945 | .fa-frown-o:before {
946 | content: "\f119";
947 | }
948 | .fa-meh-o:before {
949 | content: "\f11a";
950 | }
951 | .fa-gamepad:before {
952 | content: "\f11b";
953 | }
954 | .fa-keyboard-o:before {
955 | content: "\f11c";
956 | }
957 | .fa-flag-o:before {
958 | content: "\f11d";
959 | }
960 | .fa-flag-checkered:before {
961 | content: "\f11e";
962 | }
963 | .fa-terminal:before {
964 | content: "\f120";
965 | }
966 | .fa-code:before {
967 | content: "\f121";
968 | }
969 | .fa-mail-reply-all:before,
970 | .fa-reply-all:before {
971 | content: "\f122";
972 | }
973 | .fa-star-half-empty:before,
974 | .fa-star-half-full:before,
975 | .fa-star-half-o:before {
976 | content: "\f123";
977 | }
978 | .fa-location-arrow:before {
979 | content: "\f124";
980 | }
981 | .fa-crop:before {
982 | content: "\f125";
983 | }
984 | .fa-code-fork:before {
985 | content: "\f126";
986 | }
987 | .fa-unlink:before,
988 | .fa-chain-broken:before {
989 | content: "\f127";
990 | }
991 | .fa-question:before {
992 | content: "\f128";
993 | }
994 | .fa-info:before {
995 | content: "\f129";
996 | }
997 | .fa-exclamation:before {
998 | content: "\f12a";
999 | }
1000 | .fa-superscript:before {
1001 | content: "\f12b";
1002 | }
1003 | .fa-subscript:before {
1004 | content: "\f12c";
1005 | }
1006 | .fa-eraser:before {
1007 | content: "\f12d";
1008 | }
1009 | .fa-puzzle-piece:before {
1010 | content: "\f12e";
1011 | }
1012 | .fa-microphone:before {
1013 | content: "\f130";
1014 | }
1015 | .fa-microphone-slash:before {
1016 | content: "\f131";
1017 | }
1018 | .fa-shield:before {
1019 | content: "\f132";
1020 | }
1021 | .fa-calendar-o:before {
1022 | content: "\f133";
1023 | }
1024 | .fa-fire-extinguisher:before {
1025 | content: "\f134";
1026 | }
1027 | .fa-rocket:before {
1028 | content: "\f135";
1029 | }
1030 | .fa-maxcdn:before {
1031 | content: "\f136";
1032 | }
1033 | .fa-chevron-circle-left:before {
1034 | content: "\f137";
1035 | }
1036 | .fa-chevron-circle-right:before {
1037 | content: "\f138";
1038 | }
1039 | .fa-chevron-circle-up:before {
1040 | content: "\f139";
1041 | }
1042 | .fa-chevron-circle-down:before {
1043 | content: "\f13a";
1044 | }
1045 | .fa-html5:before {
1046 | content: "\f13b";
1047 | }
1048 | .fa-css3:before {
1049 | content: "\f13c";
1050 | }
1051 | .fa-anchor:before {
1052 | content: "\f13d";
1053 | }
1054 | .fa-unlock-alt:before {
1055 | content: "\f13e";
1056 | }
1057 | .fa-bullseye:before {
1058 | content: "\f140";
1059 | }
1060 | .fa-ellipsis-h:before {
1061 | content: "\f141";
1062 | }
1063 | .fa-ellipsis-v:before {
1064 | content: "\f142";
1065 | }
1066 | .fa-rss-square:before {
1067 | content: "\f143";
1068 | }
1069 | .fa-play-circle:before {
1070 | content: "\f144";
1071 | }
1072 | .fa-ticket:before {
1073 | content: "\f145";
1074 | }
1075 | .fa-minus-square:before {
1076 | content: "\f146";
1077 | }
1078 | .fa-minus-square-o:before {
1079 | content: "\f147";
1080 | }
1081 | .fa-level-up:before {
1082 | content: "\f148";
1083 | }
1084 | .fa-level-down:before {
1085 | content: "\f149";
1086 | }
1087 | .fa-check-square:before {
1088 | content: "\f14a";
1089 | }
1090 | .fa-pencil-square:before {
1091 | content: "\f14b";
1092 | }
1093 | .fa-external-link-square:before {
1094 | content: "\f14c";
1095 | }
1096 | .fa-share-square:before {
1097 | content: "\f14d";
1098 | }
1099 | .fa-compass:before {
1100 | content: "\f14e";
1101 | }
1102 | .fa-toggle-down:before,
1103 | .fa-caret-square-o-down:before {
1104 | content: "\f150";
1105 | }
1106 | .fa-toggle-up:before,
1107 | .fa-caret-square-o-up:before {
1108 | content: "\f151";
1109 | }
1110 | .fa-toggle-right:before,
1111 | .fa-caret-square-o-right:before {
1112 | content: "\f152";
1113 | }
1114 | .fa-euro:before,
1115 | .fa-eur:before {
1116 | content: "\f153";
1117 | }
1118 | .fa-gbp:before {
1119 | content: "\f154";
1120 | }
1121 | .fa-dollar:before,
1122 | .fa-usd:before {
1123 | content: "\f155";
1124 | }
1125 | .fa-rupee:before,
1126 | .fa-inr:before {
1127 | content: "\f156";
1128 | }
1129 | .fa-cny:before,
1130 | .fa-rmb:before,
1131 | .fa-yen:before,
1132 | .fa-jpy:before {
1133 | content: "\f157";
1134 | }
1135 | .fa-ruble:before,
1136 | .fa-rouble:before,
1137 | .fa-rub:before {
1138 | content: "\f158";
1139 | }
1140 | .fa-won:before,
1141 | .fa-krw:before {
1142 | content: "\f159";
1143 | }
1144 | .fa-bitcoin:before,
1145 | .fa-btc:before {
1146 | content: "\f15a";
1147 | }
1148 | .fa-file:before {
1149 | content: "\f15b";
1150 | }
1151 | .fa-file-text:before {
1152 | content: "\f15c";
1153 | }
1154 | .fa-sort-alpha-asc:before {
1155 | content: "\f15d";
1156 | }
1157 | .fa-sort-alpha-desc:before {
1158 | content: "\f15e";
1159 | }
1160 | .fa-sort-amount-asc:before {
1161 | content: "\f160";
1162 | }
1163 | .fa-sort-amount-desc:before {
1164 | content: "\f161";
1165 | }
1166 | .fa-sort-numeric-asc:before {
1167 | content: "\f162";
1168 | }
1169 | .fa-sort-numeric-desc:before {
1170 | content: "\f163";
1171 | }
1172 | .fa-thumbs-up:before {
1173 | content: "\f164";
1174 | }
1175 | .fa-thumbs-down:before {
1176 | content: "\f165";
1177 | }
1178 | .fa-youtube-square:before {
1179 | content: "\f166";
1180 | }
1181 | .fa-youtube:before {
1182 | content: "\f167";
1183 | }
1184 | .fa-xing:before {
1185 | content: "\f168";
1186 | }
1187 | .fa-xing-square:before {
1188 | content: "\f169";
1189 | }
1190 | .fa-youtube-play:before {
1191 | content: "\f16a";
1192 | }
1193 | .fa-dropbox:before {
1194 | content: "\f16b";
1195 | }
1196 | .fa-stack-overflow:before {
1197 | content: "\f16c";
1198 | }
1199 | .fa-instagram:before {
1200 | content: "\f16d";
1201 | }
1202 | .fa-flickr:before {
1203 | content: "\f16e";
1204 | }
1205 | .fa-adn:before {
1206 | content: "\f170";
1207 | }
1208 | .fa-bitbucket:before {
1209 | content: "\f171";
1210 | }
1211 | .fa-bitbucket-square:before {
1212 | content: "\f172";
1213 | }
1214 | .fa-tumblr:before {
1215 | content: "\f173";
1216 | }
1217 | .fa-tumblr-square:before {
1218 | content: "\f174";
1219 | }
1220 | .fa-long-arrow-down:before {
1221 | content: "\f175";
1222 | }
1223 | .fa-long-arrow-up:before {
1224 | content: "\f176";
1225 | }
1226 | .fa-long-arrow-left:before {
1227 | content: "\f177";
1228 | }
1229 | .fa-long-arrow-right:before {
1230 | content: "\f178";
1231 | }
1232 | .fa-apple:before {
1233 | content: "\f179";
1234 | }
1235 | .fa-windows:before {
1236 | content: "\f17a";
1237 | }
1238 | .fa-android:before {
1239 | content: "\f17b";
1240 | }
1241 | .fa-linux:before {
1242 | content: "\f17c";
1243 | }
1244 | .fa-dribbble:before {
1245 | content: "\f17d";
1246 | }
1247 | .fa-skype:before {
1248 | content: "\f17e";
1249 | }
1250 | .fa-foursquare:before {
1251 | content: "\f180";
1252 | }
1253 | .fa-trello:before {
1254 | content: "\f181";
1255 | }
1256 | .fa-female:before {
1257 | content: "\f182";
1258 | }
1259 | .fa-male:before {
1260 | content: "\f183";
1261 | }
1262 | .fa-gittip:before {
1263 | content: "\f184";
1264 | }
1265 | .fa-sun-o:before {
1266 | content: "\f185";
1267 | }
1268 | .fa-moon-o:before {
1269 | content: "\f186";
1270 | }
1271 | .fa-archive:before {
1272 | content: "\f187";
1273 | }
1274 | .fa-bug:before {
1275 | content: "\f188";
1276 | }
1277 | .fa-vk:before {
1278 | content: "\f189";
1279 | }
1280 | .fa-weibo:before {
1281 | content: "\f18a";
1282 | }
1283 | .fa-renren:before {
1284 | content: "\f18b";
1285 | }
1286 | .fa-pagelines:before {
1287 | content: "\f18c";
1288 | }
1289 | .fa-stack-exchange:before {
1290 | content: "\f18d";
1291 | }
1292 | .fa-arrow-circle-o-right:before {
1293 | content: "\f18e";
1294 | }
1295 | .fa-arrow-circle-o-left:before {
1296 | content: "\f190";
1297 | }
1298 | .fa-toggle-left:before,
1299 | .fa-caret-square-o-left:before {
1300 | content: "\f191";
1301 | }
1302 | .fa-dot-circle-o:before {
1303 | content: "\f192";
1304 | }
1305 | .fa-wheelchair:before {
1306 | content: "\f193";
1307 | }
1308 | .fa-vimeo-square:before {
1309 | content: "\f194";
1310 | }
1311 | .fa-turkish-lira:before,
1312 | .fa-try:before {
1313 | content: "\f195";
1314 | }
1315 | .fa-plus-square-o:before {
1316 | content: "\f196";
1317 | }
1318 | .fa-space-shuttle:before {
1319 | content: "\f197";
1320 | }
1321 | .fa-slack:before {
1322 | content: "\f198";
1323 | }
1324 | .fa-envelope-square:before {
1325 | content: "\f199";
1326 | }
1327 | .fa-wordpress:before {
1328 | content: "\f19a";
1329 | }
1330 | .fa-openid:before {
1331 | content: "\f19b";
1332 | }
1333 | .fa-institution:before,
1334 | .fa-bank:before,
1335 | .fa-university:before {
1336 | content: "\f19c";
1337 | }
1338 | .fa-mortar-board:before,
1339 | .fa-graduation-cap:before {
1340 | content: "\f19d";
1341 | }
1342 | .fa-yahoo:before {
1343 | content: "\f19e";
1344 | }
1345 | .fa-google:before {
1346 | content: "\f1a0";
1347 | }
1348 | .fa-reddit:before {
1349 | content: "\f1a1";
1350 | }
1351 | .fa-reddit-square:before {
1352 | content: "\f1a2";
1353 | }
1354 | .fa-stumbleupon-circle:before {
1355 | content: "\f1a3";
1356 | }
1357 | .fa-stumbleupon:before {
1358 | content: "\f1a4";
1359 | }
1360 | .fa-delicious:before {
1361 | content: "\f1a5";
1362 | }
1363 | .fa-digg:before {
1364 | content: "\f1a6";
1365 | }
1366 | .fa-pied-piper:before {
1367 | content: "\f1a7";
1368 | }
1369 | .fa-pied-piper-alt:before {
1370 | content: "\f1a8";
1371 | }
1372 | .fa-drupal:before {
1373 | content: "\f1a9";
1374 | }
1375 | .fa-joomla:before {
1376 | content: "\f1aa";
1377 | }
1378 | .fa-language:before {
1379 | content: "\f1ab";
1380 | }
1381 | .fa-fax:before {
1382 | content: "\f1ac";
1383 | }
1384 | .fa-building:before {
1385 | content: "\f1ad";
1386 | }
1387 | .fa-child:before {
1388 | content: "\f1ae";
1389 | }
1390 | .fa-paw:before {
1391 | content: "\f1b0";
1392 | }
1393 | .fa-spoon:before {
1394 | content: "\f1b1";
1395 | }
1396 | .fa-cube:before {
1397 | content: "\f1b2";
1398 | }
1399 | .fa-cubes:before {
1400 | content: "\f1b3";
1401 | }
1402 | .fa-behance:before {
1403 | content: "\f1b4";
1404 | }
1405 | .fa-behance-square:before {
1406 | content: "\f1b5";
1407 | }
1408 | .fa-steam:before {
1409 | content: "\f1b6";
1410 | }
1411 | .fa-steam-square:before {
1412 | content: "\f1b7";
1413 | }
1414 | .fa-recycle:before {
1415 | content: "\f1b8";
1416 | }
1417 | .fa-automobile:before,
1418 | .fa-car:before {
1419 | content: "\f1b9";
1420 | }
1421 | .fa-cab:before,
1422 | .fa-taxi:before {
1423 | content: "\f1ba";
1424 | }
1425 | .fa-tree:before {
1426 | content: "\f1bb";
1427 | }
1428 | .fa-spotify:before {
1429 | content: "\f1bc";
1430 | }
1431 | .fa-deviantart:before {
1432 | content: "\f1bd";
1433 | }
1434 | .fa-soundcloud:before {
1435 | content: "\f1be";
1436 | }
1437 | .fa-database:before {
1438 | content: "\f1c0";
1439 | }
1440 | .fa-file-pdf-o:before {
1441 | content: "\f1c1";
1442 | }
1443 | .fa-file-word-o:before {
1444 | content: "\f1c2";
1445 | }
1446 | .fa-file-excel-o:before {
1447 | content: "\f1c3";
1448 | }
1449 | .fa-file-powerpoint-o:before {
1450 | content: "\f1c4";
1451 | }
1452 | .fa-file-photo-o:before,
1453 | .fa-file-picture-o:before,
1454 | .fa-file-image-o:before {
1455 | content: "\f1c5";
1456 | }
1457 | .fa-file-zip-o:before,
1458 | .fa-file-archive-o:before {
1459 | content: "\f1c6";
1460 | }
1461 | .fa-file-sound-o:before,
1462 | .fa-file-audio-o:before {
1463 | content: "\f1c7";
1464 | }
1465 | .fa-file-movie-o:before,
1466 | .fa-file-video-o:before {
1467 | content: "\f1c8";
1468 | }
1469 | .fa-file-code-o:before {
1470 | content: "\f1c9";
1471 | }
1472 | .fa-vine:before {
1473 | content: "\f1ca";
1474 | }
1475 | .fa-codepen:before {
1476 | content: "\f1cb";
1477 | }
1478 | .fa-jsfiddle:before {
1479 | content: "\f1cc";
1480 | }
1481 | .fa-life-bouy:before,
1482 | .fa-life-buoy:before,
1483 | .fa-life-saver:before,
1484 | .fa-support:before,
1485 | .fa-life-ring:before {
1486 | content: "\f1cd";
1487 | }
1488 | .fa-circle-o-notch:before {
1489 | content: "\f1ce";
1490 | }
1491 | .fa-ra:before,
1492 | .fa-rebel:before {
1493 | content: "\f1d0";
1494 | }
1495 | .fa-ge:before,
1496 | .fa-empire:before {
1497 | content: "\f1d1";
1498 | }
1499 | .fa-git-square:before {
1500 | content: "\f1d2";
1501 | }
1502 | .fa-git:before {
1503 | content: "\f1d3";
1504 | }
1505 | .fa-hacker-news:before {
1506 | content: "\f1d4";
1507 | }
1508 | .fa-tencent-weibo:before {
1509 | content: "\f1d5";
1510 | }
1511 | .fa-qq:before {
1512 | content: "\f1d6";
1513 | }
1514 | .fa-wechat:before,
1515 | .fa-weixin:before {
1516 | content: "\f1d7";
1517 | }
1518 | .fa-send:before,
1519 | .fa-paper-plane:before {
1520 | content: "\f1d8";
1521 | }
1522 | .fa-send-o:before,
1523 | .fa-paper-plane-o:before {
1524 | content: "\f1d9";
1525 | }
1526 | .fa-history:before {
1527 | content: "\f1da";
1528 | }
1529 | .fa-circle-thin:before {
1530 | content: "\f1db";
1531 | }
1532 | .fa-header:before {
1533 | content: "\f1dc";
1534 | }
1535 | .fa-paragraph:before {
1536 | content: "\f1dd";
1537 | }
1538 | .fa-sliders:before {
1539 | content: "\f1de";
1540 | }
1541 | .fa-share-alt:before {
1542 | content: "\f1e0";
1543 | }
1544 | .fa-share-alt-square:before {
1545 | content: "\f1e1";
1546 | }
1547 | .fa-bomb:before {
1548 | content: "\f1e2";
1549 | }
1550 | .fa-soccer-ball-o:before,
1551 | .fa-futbol-o:before {
1552 | content: "\f1e3";
1553 | }
1554 | .fa-tty:before {
1555 | content: "\f1e4";
1556 | }
1557 | .fa-binoculars:before {
1558 | content: "\f1e5";
1559 | }
1560 | .fa-plug:before {
1561 | content: "\f1e6";
1562 | }
1563 | .fa-slideshare:before {
1564 | content: "\f1e7";
1565 | }
1566 | .fa-twitch:before {
1567 | content: "\f1e8";
1568 | }
1569 | .fa-yelp:before {
1570 | content: "\f1e9";
1571 | }
1572 | .fa-newspaper-o:before {
1573 | content: "\f1ea";
1574 | }
1575 | .fa-wifi:before {
1576 | content: "\f1eb";
1577 | }
1578 | .fa-calculator:before {
1579 | content: "\f1ec";
1580 | }
1581 | .fa-paypal:before {
1582 | content: "\f1ed";
1583 | }
1584 | .fa-google-wallet:before {
1585 | content: "\f1ee";
1586 | }
1587 | .fa-cc-visa:before {
1588 | content: "\f1f0";
1589 | }
1590 | .fa-cc-mastercard:before {
1591 | content: "\f1f1";
1592 | }
1593 | .fa-cc-discover:before {
1594 | content: "\f1f2";
1595 | }
1596 | .fa-cc-amex:before {
1597 | content: "\f1f3";
1598 | }
1599 | .fa-cc-paypal:before {
1600 | content: "\f1f4";
1601 | }
1602 | .fa-cc-stripe:before {
1603 | content: "\f1f5";
1604 | }
1605 | .fa-bell-slash:before {
1606 | content: "\f1f6";
1607 | }
1608 | .fa-bell-slash-o:before {
1609 | content: "\f1f7";
1610 | }
1611 | .fa-trash:before {
1612 | content: "\f1f8";
1613 | }
1614 | .fa-copyright:before {
1615 | content: "\f1f9";
1616 | }
1617 | .fa-at:before {
1618 | content: "\f1fa";
1619 | }
1620 | .fa-eyedropper:before {
1621 | content: "\f1fb";
1622 | }
1623 | .fa-paint-brush:before {
1624 | content: "\f1fc";
1625 | }
1626 | .fa-birthday-cake:before {
1627 | content: "\f1fd";
1628 | }
1629 | .fa-area-chart:before {
1630 | content: "\f1fe";
1631 | }
1632 | .fa-pie-chart:before {
1633 | content: "\f200";
1634 | }
1635 | .fa-line-chart:before {
1636 | content: "\f201";
1637 | }
1638 | .fa-lastfm:before {
1639 | content: "\f202";
1640 | }
1641 | .fa-lastfm-square:before {
1642 | content: "\f203";
1643 | }
1644 | .fa-toggle-off:before {
1645 | content: "\f204";
1646 | }
1647 | .fa-toggle-on:before {
1648 | content: "\f205";
1649 | }
1650 | .fa-bicycle:before {
1651 | content: "\f206";
1652 | }
1653 | .fa-bus:before {
1654 | content: "\f207";
1655 | }
1656 | .fa-ioxhost:before {
1657 | content: "\f208";
1658 | }
1659 | .fa-angellist:before {
1660 | content: "\f209";
1661 | }
1662 | .fa-cc:before {
1663 | content: "\f20a";
1664 | }
1665 | .fa-shekel:before,
1666 | .fa-sheqel:before,
1667 | .fa-ils:before {
1668 | content: "\f20b";
1669 | }
1670 | .fa-meanpath:before {
1671 | content: "\f20c";
1672 | }
1673 |
--------------------------------------------------------------------------------
/css/font-mfizz.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Font Mfizz v1.2
3 | * Copyright 2013 Mfizz Inc, Joe Lauer
4 | * MIT License
5 | *
6 | * Project: http://mfizz.com/oss/font-mfizz
7 | *
8 | * The font designed for technology and software geeks representing programming
9 | * languages, operating systems, software engineering, and technology.
10 | *
11 | * Mfizz Inc
12 | * Web: http://mfizz.com/
13 | * Twitter: http://twitter.com/mfizz_inc
14 | *
15 | * Joe Lauer
16 | * Web: http://lauer.bz/
17 | * Twitter: http://twitter.com/jjlauer
18 | */
19 |
20 | @font-face {
21 | font-family: "FontMfizz";
22 | src: url("../fonts/font-mfizz.eot");
23 | src: url("../fonts/font-mfizz.eot?#iefix") format("embedded-opentype"),
24 | url("../fonts/font-mfizz.woff") format("woff"),
25 | url("../fonts/font-mfizz.ttf") format("truetype"),
26 | url("../fonts/font-mfizz.svg#font-mfizz") format("svg");
27 | font-weight: normal;
28 | font-style: normal;
29 | }
30 |
31 | .icon-microscope:before,
32 | .icon-cplusplus:before,
33 | .icon-wireless:before,
34 | .icon-fire-alt:before,
35 | .icon-mobile-device:before,
36 | .icon-objc:before,
37 | .icon-redhat:before,
38 | .icon-freebsd:before,
39 | .icon-heroku:before,
40 | .icon-python:before,
41 | .icon-java:before,
42 | .icon-satellite:before,
43 | .icon-debian:before,
44 | .icon-grails:before,
45 | .icon-c:before,
46 | .icon-postgres:before,
47 | .icon-database-alt2:before,
48 | .icon-raspberrypi:before,
49 | .icon-nginx:before,
50 | .icon-ruby-on-rails:before,
51 | .icon-redis:before,
52 | .icon-scala:before,
53 | .icon-gnome:before,
54 | .icon-perl:before,
55 | .icon-mysql:before,
56 | .icon-fedora:before,
57 | .icon-ghost:before,
58 | .icon-google:before,
59 | .icon-netbsd:before,
60 | .icon-aws:before,
61 | .icon-bomb:before,
62 | .icon-looking:before,
63 | .icon-ruby:before,
64 | .icon-mysql-alt:before,
65 | .icon-playframework-alt:before,
66 | .icon-osx:before,
67 | .icon-database:before,
68 | .icon-database-alt:before,
69 | .icon-shell:before,
70 | .icon-script:before,
71 | .icon-antenna:before,
72 | .icon-coffee-bean:before,
73 | .icon-scala-alt:before,
74 | .icon-platter:before,
75 | .icon-java-duke:before,
76 | .icon-iphone:before,
77 | .icon-script-alt:before,
78 | .icon-google-alt:before,
79 | .icon-haskell:before,
80 | .icon-mariadb:before,
81 | .icon-phone-retro:before,
82 | .icon-phone-alt:before,
83 | .icon-csharp:before,
84 | .icon-php:before,
85 | .icon-postgres-alt:before,
86 | .icon-html:before,
87 | .icon-mfizz:before,
88 | .icon-apache:before,
89 | .icon-hadoop:before,
90 | .icon-ruby-on-rails-alt:before,
91 | .icon-mobile-phone-broadcast:before,
92 | .icon-css:before,
93 | .icon-playframework:before,
94 | .icon-clojure:before,
95 | .icon-mobile-phone-alt:before,
96 | .icon-suse:before,
97 | .icon-java-bold:before,
98 | .icon-nginx-alt:before,
99 | .icon-nginx-alt2:before,
100 | .icon-linux-mint:before,
101 | .icon-dreamhost:before,
102 | .icon-blackberry:before,
103 | .icon-javascript:before,
104 | .icon-ubuntu:before,
105 | .icon-php-alt:before,
106 | .icon-centos:before,
107 | .icon-nodejs:before,
108 | .icon-splatter:before,
109 | .icon-3dprint:before,
110 | .icon-line-graph:before,
111 | .icon-cassandra:before,
112 | .icon-solaris:before,
113 | .icon-jetty:before,
114 | .icon-tomcat:before,
115 | .icon-oracle:before,
116 | .icon-oracle-alt:before,
117 | .icon-mssql:before,
118 | .icon-google-developers:before,
119 | .icon-google-code:before,
120 | .icon-kde:before,
121 | .icon-grails-alt:before {
122 | font-family: "FontMfizz";
123 | font-style: normal;
124 | font-weight: normal;
125 | font-variant: normal;
126 | text-transform: none;
127 | line-height: 1;
128 | -webkit-font-smoothing: antialiased;
129 | display: inline-block;
130 | text-decoration: inherit;
131 | }
132 |
133 | .icon-microscope:before { content: "\f100"; }
134 | .icon-cplusplus:before { content: "\f101"; }
135 | .icon-wireless:before { content: "\f102"; }
136 | .icon-fire-alt:before { content: "\f103"; }
137 | .icon-mobile-device:before { content: "\f104"; }
138 | .icon-objc:before { content: "\f105"; }
139 | .icon-redhat:before { content: "\f106"; }
140 | .icon-freebsd:before { content: "\f107"; }
141 | .icon-heroku:before { content: "\f108"; }
142 | .icon-python:before { content: "\f109"; }
143 | .icon-java:before { content: "\f10a"; }
144 | .icon-satellite:before { content: "\f10b"; }
145 | .icon-debian:before { content: "\f10c"; }
146 | .icon-grails:before { content: "\f10d"; }
147 | .icon-c:before { content: "\f10e"; }
148 | .icon-postgres:before { content: "\f10f"; }
149 | .icon-database-alt2:before { content: "\f110"; }
150 | .icon-raspberrypi:before { content: "\f111"; }
151 | .icon-nginx:before { content: "\f112"; }
152 | .icon-ruby-on-rails:before { content: "\f113"; }
153 | .icon-redis:before { content: "\f114"; }
154 | .icon-scala:before { content: "\f115"; }
155 | .icon-gnome:before { content: "\f116"; }
156 | .icon-perl:before { content: "\f117"; }
157 | .icon-mysql:before { content: "\f118"; }
158 | .icon-fedora:before { content: "\f119"; }
159 | .icon-ghost:before { content: "\f11a"; }
160 | .icon-google:before { content: "\f11b"; }
161 | .icon-netbsd:before { content: "\f11c"; }
162 | .icon-aws:before { content: "\f11d"; }
163 | .icon-bomb:before { content: "\f11e"; }
164 | .icon-looking:before { content: "\f11f"; }
165 | .icon-ruby:before { content: "\f120"; }
166 | .icon-mysql-alt:before { content: "\f121"; }
167 | .icon-playframework-alt:before { content: "\f122"; }
168 | .icon-osx:before { content: "\f123"; }
169 | .icon-database:before { content: "\f124"; }
170 | .icon-database-alt:before { content: "\f125"; }
171 | .icon-shell:before { content: "\f126"; }
172 | .icon-script:before { content: "\f127"; }
173 | .icon-antenna:before { content: "\f128"; }
174 | .icon-coffee-bean:before { content: "\f129"; }
175 | .icon-scala-alt:before { content: "\f12a"; }
176 | .icon-platter:before { content: "\f12b"; }
177 | .icon-java-duke:before { content: "\f12c"; }
178 | .icon-iphone:before { content: "\f12d"; }
179 | .icon-script-alt:before { content: "\f12e"; }
180 | .icon-google-alt:before { content: "\f12f"; }
181 | .icon-haskell:before { content: "\f130"; }
182 | .icon-mariadb:before { content: "\f131"; }
183 | .icon-phone-retro:before { content: "\f132"; }
184 | .icon-phone-alt:before { content: "\f133"; }
185 | .icon-csharp:before { content: "\f134"; }
186 | .icon-php:before { content: "\f135"; }
187 | .icon-postgres-alt:before { content: "\f136"; }
188 | .icon-html:before { content: "\f137"; }
189 | .icon-mfizz:before { content: "\f138"; }
190 | .icon-apache:before { content: "\f139"; }
191 | .icon-hadoop:before { content: "\f13a"; }
192 | .icon-ruby-on-rails-alt:before { content: "\f13b"; }
193 | .icon-mobile-phone-broadcast:before { content: "\f13c"; }
194 | .icon-css:before { content: "\f13d"; }
195 | .icon-playframework:before { content: "\f13e"; }
196 | .icon-clojure:before { content: "\f13f"; }
197 | .icon-mobile-phone-alt:before { content: "\f140"; }
198 | .icon-suse:before { content: "\f141"; }
199 | .icon-java-bold:before { content: "\f142"; }
200 | .icon-nginx-alt:before { content: "\f143"; }
201 | .icon-nginx-alt2:before { content: "\f144"; }
202 | .icon-linux-mint:before { content: "\f145"; }
203 | .icon-dreamhost:before { content: "\f146"; }
204 | .icon-blackberry:before { content: "\f147"; }
205 | .icon-javascript:before { content: "\f148"; }
206 | .icon-ubuntu:before { content: "\f149"; }
207 | .icon-php-alt:before { content: "\f14a"; }
208 | .icon-centos:before { content: "\f14b"; }
209 | .icon-nodejs:before { content: "\f14c"; }
210 | .icon-splatter:before { content: "\f14d"; }
211 | .icon-3dprint:before { content: "\f14e"; }
212 | .icon-line-graph:before { content: "\f14f"; }
213 | .icon-cassandra:before { content: "\f150"; }
214 | .icon-solaris:before { content: "\f151"; }
215 | .icon-jetty:before { content: "\f152"; }
216 | .icon-tomcat:before { content: "\f153"; }
217 | .icon-oracle:before { content: "\f154"; }
218 | .icon-oracle-alt:before { content: "\f155"; }
219 | .icon-mssql:before { content: "\f156"; }
220 | .icon-google-developers:before { content: "\f157"; }
221 | .icon-google-code:before { content: "\f158"; }
222 | .icon-kde:before { content: "\f159"; }
223 | .icon-grails-alt:before { content: "\f15a"; }
224 |
225 | /* These classes only added to fix FontFamily to display FontMfizz during debug/inspection */
226 | .icon-osx,
227 | .icon-bomb,
228 | .icon-mobile-phone-broadcast,
229 | .icon-objc,
230 | .icon-nginx-alt2,
231 | .icon-mysql,
232 | .icon-phone-retro,
233 | .icon-netbsd,
234 | .icon-mobile-device,
235 | .icon-ruby-on-rails,
236 | .icon-phone-alt,
237 | .icon-line-graph,
238 | .icon-postgres,
239 | .icon-playframework,
240 | .icon-python,
241 | .icon-ruby-on-rails-alt,
242 | .icon-nginx,
243 | .icon-database-alt2,
244 | .icon-google-alt,
245 | .icon-microscope,
246 | .icon-blackberry,
247 | .icon-dreamhost,
248 | .icon-google,
249 | .icon-centos,
250 | .icon-kde,
251 | .icon-csharp,
252 | .icon-scala,
253 | .icon-redis,
254 | .icon-looking,
255 | .icon-database-alt,
256 | .icon-javascript,
257 | .icon-postgres-alt,
258 | .icon-linux-mint,
259 | .icon-ubuntu,
260 | .icon-apache,
261 | .icon-script-alt,
262 | .icon-mssql,
263 | .icon-c,
264 | .icon-gnome,
265 | .icon-java-duke,
266 | .icon-scala-alt,
267 | .icon-clojure,
268 | .icon-oracle-alt,
269 | .icon-redhat,
270 | .icon-haskell,
271 | .icon-3dprint,
272 | .icon-mariadb,
273 | .icon-java,
274 | .icon-script,
275 | .icon-cplusplus,
276 | .icon-jetty,
277 | .icon-perl,
278 | .icon-heroku,
279 | .icon-nginx-alt,
280 | .icon-iphone,
281 | .icon-splatter,
282 | .icon-shell,
283 | .icon-mysql-alt,
284 | .icon-wireless,
285 | .icon-ruby,
286 | .icon-playframework-alt,
287 | .icon-raspberrypi,
288 | .icon-suse,
289 | .icon-nodejs,
290 | .icon-java-bold,
291 | .icon-google-developers,
292 | .icon-mobile-phone-alt,
293 | .icon-grails-alt,
294 | .icon-coffee-bean,
295 | .icon-cassandra,
296 | .icon-google-code,
297 | .icon-fedora,
298 | .icon-antenna,
299 | .icon-hadoop,
300 | .icon-solaris,
301 | .icon-html,
302 | .icon-css,
303 | .icon-satellite,
304 | .icon-aws,
305 | .icon-mfizz,
306 | .icon-php,
307 | .icon-debian,
308 | .icon-ghost,
309 | .icon-php-alt,
310 | .icon-tomcat,
311 | .icon-database,
312 | .icon-grails,
313 | .icon-freebsd,
314 | .icon-oracle,
315 | .icon-fire-alt,
316 | .icon-platter{
317 | font-family: "FontMfizz";
318 | }
319 |
--------------------------------------------------------------------------------
/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/fonts/font-mfizz.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/font-mfizz.eot
--------------------------------------------------------------------------------
/fonts/font-mfizz.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/font-mfizz.ttf
--------------------------------------------------------------------------------
/fonts/font-mfizz.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/font-mfizz.woff
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/fonts/icons.json:
--------------------------------------------------------------------------------
1 | ["3dprint","antenna","apache","aws","blackberry","bomb","c","cassandra","centos","clojure","coffee-bean","cplusplus","csharp","css","database","database-alt","database-alt2","debian","dreamhost","fedora","fire-alt","freebsd","ghost","gnome","google","google-alt","google-code","google-developers","grails","grails-alt","hadoop","haskell","heroku","html","iphone","java","java-bold","java-duke","javascript","jetty","kde","line-graph","linux-mint","looking","mariadb","mfizz","microscope","mobile-device","mobile-phone-alt","mobile-phone-broadcast","mssql","mysql","mysql-alt","netbsd","nginx","nginx-alt","nginx-alt2","nodejs","objc","oracle","oracle-alt","osx","perl","phone-alt","phone-retro","php","php-alt","platter","playframework","playframework-alt","postgres","postgres-alt","python","raspberrypi","redhat","redis","ruby","ruby-on-rails","ruby-on-rails-alt","satellite","scala","scala-alt","script","script-alt","shell","solaris","splatter","suse","tomcat","ubuntu","wireless"]
2 |
--------------------------------------------------------------------------------
/images/EchoNest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/images/EchoNest.png
--------------------------------------------------------------------------------
/images/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/images/github.png
--------------------------------------------------------------------------------
/images/jekyll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikhil/SwitchBeat/208933030832ec852c7d588bc52cae27f443f03c/images/jekyll.png
--------------------------------------------------------------------------------
/javascript/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap.js by @fat & @mdo
3 | * Copyright 2012 Twitter, Inc.
4 | * http://www.apache.org/licenses/LICENSE-2.0.txt
5 | */
6 | !function(e){e(function(){"use strict";e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()},e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e(function(){e("body").on("click.alert.data-api",t,n.prototype.close)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.parent('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")},e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e(function(){e("body").on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=n,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}},e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),t.preventDefault()})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning)return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning)return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=typeof n=="object"&&n;i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e(function(){e("body").on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})})}(window.jQuery),!function(e){"use strict";function r(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,"")),r=e(n),r.length||(r=t.parent()),r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a ').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,e.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e(function(){e("body").on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this))),this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]:s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}e.css(o).addClass(s).addClass("in")}},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content > *")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.content),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:''})}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}},e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active a").last()[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}},e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e(function(){e("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length"+t+""})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'',item:' ',minLength:1},e.fn.typeahead.Constructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))},e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
7 |
--------------------------------------------------------------------------------
/javascript/remix.js:
--------------------------------------------------------------------------------
1 | // Remix.js
2 | // Thor Kell & Paul Lamere, 12/2012
3 | // Based on Paul Lamere's Infinite Jukebox and assorted other javascript projects
4 | var jsonRetryCount = 9;
5 | var jsonRetryInterval = 3000;
6 |
7 | function createJRemixer(context, jquery, apiKey) {
8 | var $ = jquery;
9 | $.ajaxSetup({ cache: false });
10 |
11 | var remixer = {
12 | // If you have an EN TRack ID and the location of the audio.
13 | remixTrackById: function(trackID, trackURL, callback) {
14 | var track;
15 | var url = 'http://developer.echonest.com/api/v4/track/profile?format=json&bucket=audio_summary'
16 |
17 | var retryCount = 3;
18 | var retryInterval = 3000;
19 |
20 | function lookForAnalysis(trackID, trackURL, callback) {
21 | $.getJSON(url, {id:trackID, api_key:apiKey}, function(data) {
22 | var analysisURL = data.response.track.audio_summary.analysis_url;
23 | track = data.response.track;
24 |
25 | // This call is proxied through the yahoo query engine.
26 | // This is temporary, but works.
27 | $.getJSON("http://query.yahooapis.com/v1/public/yql",
28 | { q: "select * from json where url=\"" + analysisURL + "\"", format: "json"},
29 | function(data) {
30 | console.log(data);
31 | if (data.query.results != null) {
32 | track.analysis = data.query.results.json;
33 | console.log("Analysis obtained...");
34 | remixer.remixTrack(track, trackURL, callback);
35 | }
36 | else {
37 | retryCount = retryCount - 1;
38 | retryInterval = retryInterval + retryInterval;
39 | if (retryCount > 0) {
40 | console.log('Analysis pending, trying again')
41 | callback(track, "Analysis pending, retrying - 0");
42 | setTimeout(function () {
43 | lookForAnalysis(trackID, trackURL, callback);
44 | }, retryInterval);
45 | } else {
46 | callback(track, "Error: no analysis data returned for that track - 0");
47 | console.log('error', 'No analysis data returned: try again, or try another trackID');
48 | }
49 | }
50 | }) // end yahoo proxy getJson
51 | .fail(function()
52 | {
53 | console.log("retrying json request");
54 | jsonRetryCount = jsonRetryCount -1;
55 | if(jsonRetryCount >0)
56 | {
57 | setTimeout(function () {
58 | lookForAnalysis(trackID, trackURL, callback);
59 | }, jsonRetryInterval);
60 |
61 |
62 |
63 | }
64 |
65 | });
66 |
67 | });
68 |
69 |
70 |
71 | } // end lookForAnalysis
72 | lookForAnalysis(trackID, trackURL, callback);
73 | },
74 |
75 | // If you have a SoundCloud URL.
76 | remixTrackBySoundCloudURL: function(soundCloudURL, soundClouddClientID, callback) {
77 | var bridgeURL = "http://labs.echonest.com/SCAnalyzer/analyze?id=" + soundCloudURL;
78 | var retryCount = 3;
79 | var retryInterval = 2000;
80 |
81 | function lookForTrackID(bridgeURL, soundClouddClientID, callback) {
82 | $.getJSON(bridgeURL, function(data) {
83 | if (data.status == "OK") {
84 | var trackID = data.trid;
85 | var scResolveURL = 'http://api.soundcloud.com/resolve.json'
86 | $.getJSON(scResolveURL, {client_id:soundClouddClientID, url:soundCloudURL}, function(data) {
87 | var downloadURL = data.stream_url + '?client_id=' + soundClouddClientID;
88 | console.log('got all data from SoundCloud, about to start remix');
89 | remixer.remixTrackById(trackID, downloadURL, callback);
90 | });
91 | } else {
92 | retryCount = retryCount - 1;
93 | retryInterval = retryInterval + retryInterval;
94 | if (retryCount > 0) {
95 | setTimeout(function () {
96 | lookForTrackID(bridgeURL, soundClouddClientID, callback);
97 | }, retryInterval);
98 | } else {
99 | callback(track, "Error: no trackID returned.");
100 | console.log('error', 'no trackID returned.');
101 | }
102 | } // end else
103 | });
104 | }
105 | lookForTrackID(bridgeURL, soundClouddClientID, callback);
106 | },
107 |
108 | // If you have the analysis URL already, or if you've cached it in your app.
109 | // Be *very* careful when searching for analysis URL by song: it may not match the track being used.
110 | remixTrackByURL: function(analysisURL, trackURL, callback) {
111 | var track = new Object();
112 | $.getJSON(analysisURL, function(data) {
113 | track.analysis = data;
114 | track.status = "complete";
115 | remixer.remixTrack(track, trackURL, callback);
116 |
117 | });
118 | },
119 |
120 | remixTrack : function(track, trackURL, callback) {
121 | function fetchAudio(url) {
122 | var request = new XMLHttpRequest();
123 | trace("fetchAudio " + url);
124 | track.buffer = null;
125 | request.open("GET", url, true);
126 | request.responseType = "arraybuffer";
127 | this.request = request;
128 |
129 | request.onload = function() {
130 |
131 | trace('audio loaded');
132 | if (false) {
133 | track.buffer = context.createBuffer(request.response, false);
134 | track.status = 'ok'
135 | } else {
136 | context.decodeAudioData(request.response,
137 | function(buffer) { // completed function
138 | track.buffer = buffer;
139 | track.status = 'ok';
140 | callback(track, 100);
141 | },
142 | function(e) { // error function
143 | track.status = 'error: loading audio'
144 | console.log('audio error', e);
145 | }
146 | );
147 | }
148 | }
149 | request.onerror = function(e) {
150 | trace('error loading loaded');
151 | track.status = 'error: loading audio'
152 | }
153 | request.onprogress = function(e) {
154 | var percent = Math.round(e.loaded * 100 / e.total);
155 | callback(track, percent);
156 | }
157 | request.send();
158 | }
159 |
160 | function preprocessTrack(track) {
161 | trace('preprocessTrack');
162 | var types = ['sections', 'bars', 'beats', 'tatums', 'segments'];
163 |
164 | for (var i in types) {
165 | var type = types[i];
166 | trace('preprocessTrack ' + type);
167 | for (var j in track.analysis[type]) {
168 | var qlist = track.analysis[type]
169 | j = parseInt(j)
170 | var q = qlist[j]
171 |
172 | q.start = parseFloat(q.start);
173 | q.duration = parseFloat(q.duration);
174 | q.confidence = parseFloat(q.confidence);
175 | if (type == 'segments') {
176 | q.loudness_max = parseFloat(q.loudness_max);
177 | q.loudness_max_time = parseFloat(q.loudness_max_time);
178 | q.loudness_start = parseFloat(q.loudness_start);
179 |
180 | for (var k = 0; k < q.pitches.length; k++) {
181 | q.pitches[k] = parseFloat(q.pitches[k]);
182 | }
183 | for (var k = 0; k < q.timbre.length; k++) {
184 | q.timbre[k] = parseFloat(q.timbre[k]);
185 | }
186 | }
187 | q.track = track;
188 | q.which = j;
189 | if (j > 0) {
190 | q.prev = qlist[j-1];
191 | } else {
192 | q.prev = null
193 | }
194 |
195 | if (j < qlist.length - 1) {
196 | q.next = qlist[j+1];
197 | } else {
198 | q.next = null
199 | }
200 | }
201 | }
202 |
203 | connectQuanta(track, 'sections', 'bars');
204 | connectQuanta(track, 'bars', 'beats');
205 | connectQuanta(track, 'beats', 'tatums');
206 | connectQuanta(track, 'tatums', 'segments');
207 |
208 | connectFirstOverlappingSegment(track, 'bars');
209 | connectFirstOverlappingSegment(track, 'beats');
210 | connectFirstOverlappingSegment(track, 'tatums');
211 |
212 | connectAllOverlappingSegments(track, 'bars');
213 | connectAllOverlappingSegments(track, 'beats');
214 | connectAllOverlappingSegments(track, 'tatums');
215 |
216 | filterSegments(track);
217 | }
218 |
219 | function filterSegments(track) {
220 | var threshold = .3;
221 | var fsegs = [];
222 | fsegs.push(track.analysis.segments[0]);
223 | for (var i = 1; i < track.analysis.segments.length; i++) {
224 | var seg = track.analysis.segments[i];
225 | var last = fsegs[fsegs.length - 1];
226 | if (isSimilar(seg, last) && seg.confidence < threshold) {
227 | fsegs[fsegs.length -1].duration += seg.duration;
228 | } else {
229 | fsegs.push(seg);
230 | }
231 | }
232 | track.analysis.fsegments = fsegs;
233 | }
234 |
235 | function isSimilar(seg1, seg2) {
236 | var threshold = 1;
237 | var distance = timbral_distance(seg1, seg2);
238 | return (distance < threshold);
239 | }
240 |
241 | function connectQuanta(track, parent, child) {
242 | var last = 0;
243 | var qparents = track.analysis[parent];
244 | var qchildren = track.analysis[child];
245 |
246 | for (var i in qparents) {
247 | var qparent = qparents[i]
248 | qparent.children = [];
249 |
250 | for (var j = last; j < qchildren.length; j++) {
251 | var qchild = qchildren[j];
252 | if (qchild.start >= qparent.start
253 | && qchild.start < qparent.start + qparent.duration) {
254 | qchild.parent = qparent;
255 | qchild.indexInParent = qparent.children.length;
256 | qparent.children.push(qchild);
257 | last = j;
258 | } else if (qchild.start > qparent.start) {
259 | break;
260 | }
261 | }
262 | }
263 | }
264 |
265 | // connects a quanta with the first overlapping segment
266 | function connectFirstOverlappingSegment(track, quanta_name) {
267 | var last = 0;
268 | var quanta = track.analysis[quanta_name];
269 | var segs = track.analysis.segments;
270 |
271 | for (var i = 0; i < quanta.length; i++) {
272 | var q = quanta[i]
273 |
274 | for (var j = last; j < segs.length; j++) {
275 | var qseg = segs[j];
276 | if (qseg.start >= q.start) {
277 | q.oseg = qseg;
278 | last = j;
279 | break
280 | }
281 | }
282 | }
283 | }
284 |
285 | function connectAllOverlappingSegments(track, quanta_name) {
286 | var last = 0;
287 | var quanta = track.analysis[quanta_name];
288 | var segs = track.analysis.segments;
289 |
290 | for (var i = 0; i < quanta.length; i++) {
291 | var q = quanta[i]
292 | q.overlappingSegments = [];
293 |
294 | for (var j = last; j < segs.length; j++) {
295 | var qseg = segs[j];
296 | // seg starts before quantum so no
297 | if (parseFloat(qseg.start) + parseFloat(qseg.duration) < parseFloat(q.start)) {
298 | continue;
299 | }
300 | // seg starts after quantum so no
301 | if (parseFloat(qseg.start) > parseFloat(q.start) + parseFloat(q.duration)) {
302 | break;
303 | }
304 | last = j;
305 | q.overlappingSegments.push(qseg);
306 | }
307 | }
308 | }
309 |
310 |
311 | if (track.status == 'complete') {
312 | preprocessTrack(track);
313 | fetchAudio(trackURL);
314 | } else {
315 | track.status = 'error: incomplete analysis';
316 | }
317 | },
318 |
319 | getPlayer : function(effects) {
320 | var queueTime = 0;
321 | var audioGain = context.createGain();
322 | var curAudioSource = null;
323 | var currentlyQueued = new Array();
324 | var curQ = null;
325 | var onPlayCallback = null;
326 | var afterPlayCallback = null;
327 | var currentTriggers = new Array();
328 | audioGain.gain.value = 1;
329 |
330 | // Connect effects
331 | effects = effects || [];
332 | effects.unshift(audioGain);
333 | for (var i = 0; i < effects.length -1; i++) {
334 | effects[i].connect(effects[i + 1]);
335 | }
336 | effects[i].connect(context.destination);
337 |
338 | function queuePlay(when, q) {
339 | audioGain.gain.value = 1;
340 | if (isAudioBuffer(q)) {
341 | var audioSource = context.createBufferSource();
342 | audioSource.buffer = q;
343 | audioSource.connect(audioGain);
344 | currentlyQueued.push(audioSource);
345 | audioSource.start(when);
346 | if (onPlayCallback != null) {
347 | theTime = (when - context.currentTime) * 1000;
348 | currentTriggers.push(setTimeout(onPlayCallback, theTime));
349 | }
350 | if (afterPlayCallback != null) {
351 | theTime = (when - context.currentTime + parseFloat(q.duration)) * 1000;
352 | currentTriggers.push(setTimeout(afterPlayCallback, theTime));
353 | }
354 | return when + parseFloat(q.duration);
355 | } else if ($.isArray(q)) {
356 | // Correct for load times
357 | if (when == 0) {
358 | when = context.currentTime;
359 | }
360 | for (var i = 0; i < q.length; i++) {
361 | when = queuePlay(when, q[i]);
362 | }
363 | return when;
364 | } else if (isQuantum(q)) {
365 | var audioSource = context.createBufferSource();
366 | audioSource.buffer = q.track.buffer;
367 | audioSource.connect(audioGain);
368 | q.audioSource = audioSource;
369 | currentlyQueued.push(audioSource);
370 | audioSource.start(when, q.start, q.duration);
371 |
372 | // I need to clean up all these ifs
373 | if ("syncBuffer" in q) {
374 | var audioSource = context.createBufferSource();
375 | audioSource.buffer = q.syncBuffer;
376 | audioSource.connect(audioGain);
377 | currentlyQueued.push(audioSource);
378 | audioSource.start(when);
379 | }
380 |
381 | if (onPlayCallback != null) {
382 | theTime = (when - context.currentTime) * 1000;
383 | currentTriggers.push(setTimeout(onPlayCallback, theTime));
384 | }
385 | if (afterPlayCallback != null) {
386 | theTime = (when - context.currentTime + parseFloat(q.duration)) * 1000;
387 | currentTriggers.push(setTimeout(afterPlayCallback, theTime));
388 | }
389 | return (when + parseFloat(q.duration));
390 | }
391 | else if (isSilence(q)) {
392 | return (when + parseFloat(q.duration));
393 | }
394 | else {
395 | error("can't play " + q);
396 | return when;
397 | }
398 | }
399 |
400 | function error(s) {
401 | console.log(s);
402 | }
403 |
404 | var player = {
405 | play: function(when, q) {
406 | return queuePlay(0, q);
407 | },
408 |
409 | addOnPlayCallback: function(callback) {
410 | onPlayCallback = callback;
411 | },
412 |
413 | addAfterPlayCallback: function(callback) {
414 | afterPlayCallback = callback;
415 | },
416 |
417 | queue: function(q) {
418 | var now = context.currentTime;
419 | if (now > queueTime) {
420 | queueTime = now;
421 | }
422 | queueTime = queuePlay(queueTime, q);
423 | },
424 |
425 | queueRest: function(duration) {
426 | queueTime += duration;
427 | },
428 |
429 | stop: function() {
430 | for (var i = 0; i < currentlyQueued.length; i++) {
431 | if (currentlyQueued[i] != null) {
432 | currentlyQueued[i].stop();
433 | }
434 | }
435 | currentlyQueued = new Array();
436 |
437 | if (currentTriggers.length > 0) {
438 | for (var i = 0; i < currentTriggers.length; i++) {
439 | clearTimeout(currentTriggers[i])
440 | }
441 | currentTriggers = new Array();
442 | }
443 | },
444 |
445 | curTime: function() {
446 | return context.currentTime;
447 | },
448 | }
449 | return player;
450 | },
451 |
452 | fetchSound : function(audioURL, callback) {
453 | var request = new XMLHttpRequest();
454 |
455 | trace("fetchSound " + audioURL);
456 | request.open("GET", audioURL, true);
457 | request.responseType = "arraybuffer";
458 | this.request = request;
459 |
460 | request.onload = function() {
461 | var buffer = context.createBuffer(request.response, false);
462 | callback(true, buffer);
463 | }
464 |
465 | request.onerror = function(e) {
466 | callback(false, null);
467 | }
468 | request.send();
469 | },
470 |
471 | // Saves the remixed audio using the HTML 5 temporary filesystem
472 | saveRemixLocally : function(fs, remixed, callback) {
473 | fs.root.getFile('my-remix.wav', {create: true}, function(fileEntry) {
474 | fileEntry.createWriter(function(fileWriter) {
475 | fileWriter.onwriteend = function(e) {
476 | console.log('Write completed.');
477 | callback(fileEntry.toURL());
478 | };
479 | fileWriter.onerror = function(e) {
480 | console.log('Write failed: ' + e.toString());
481 | };
482 |
483 | var blob = new Blob([Wav.createWaveFileData(remixed)], {type: 'binary'});
484 |
485 | fileWriter.write(blob);
486 | }, fileErrorHandler);
487 | }, fileErrorHandler);
488 | },
489 |
490 | };
491 |
492 | function isQuantum(a) {
493 | return 'start' in a && 'duration' in a;
494 | }
495 |
496 | function isAudioBuffer(a) {
497 | return 'getChannelData' in a;
498 | }
499 |
500 | function isSilence(a) {
501 | return 'isSilence' in a;
502 | }
503 |
504 | function trace(text) {
505 | if (false) {
506 | console.log(text);
507 | }
508 | }
509 |
510 | return remixer;
511 | }
512 |
513 |
514 | function euclidean_distance(v1, v2) {
515 | var sum = 0;
516 | for (var i = 0; i < 3; i++) {
517 | var delta = v2[i] - v1[i];
518 | sum += delta * delta;
519 | }
520 | return Math.sqrt(sum);
521 | }
522 |
523 | function timbral_distance(s1, s2) {
524 | return euclidean_distance(s1.timbre, s2.timbre);
525 | }
526 |
527 | function clusterSegments(track, numClusters, fieldName, vecName) {
528 | var vname = vecName || 'timbre';
529 | var fname = fieldName || 'cluster';
530 | var maxLoops = 1000;
531 |
532 | function zeroArray(size) {
533 | var arry = [];
534 | for (var i = 0; i < size; i++) {
535 | arry.push(0);
536 | }
537 | return arry;
538 | }
539 |
540 | function reportClusteringStats() {
541 | var counts = zeroArray(numClusters);
542 | for (var i = 0; i < track.analysis.segments.length; i++) {
543 | var cluster = track.analysis.segments[i][fname];
544 | counts[cluster]++;
545 | }
546 | //console.log('clustering stats');
547 | for (var i = 0; i < counts.length; i++) {
548 | //console.log('clus', i, counts[i]);
549 | }
550 | }
551 |
552 | function sumArray(v1, v2) {
553 | for (var i = 0; i < v1.length; i++) {
554 | v1[i] += v2[i];
555 | }
556 | return v1;
557 | }
558 |
559 | function divArray(v1, scalar) {
560 | for (var i = 0; i < v1.length; i++) {
561 | v1[i] /= scalar
562 | }
563 | return v1;
564 | }
565 | function getCentroid(cluster) {
566 | var count = 0;
567 | var segs = track.analysis.segments;
568 | var vsum = zeroArray(segs[0][vname].length);
569 |
570 | for (var i = 0; i < segs.length; i++) {
571 | if (segs[i][fname] === cluster) {
572 | count++;
573 | vsum = sumArray(vsum, segs[i][vname]);
574 | }
575 | }
576 |
577 | vsum = divArray(vsum, count);
578 | return vsum;
579 | }
580 |
581 | function findNearestCluster(clusters, seg) {
582 | var shortestDistance = Number.MAX_VALUE;
583 | var bestCluster = -1;
584 |
585 | for (var i = 0; i < clusters.length; i++) {
586 | var distance = euclidean_distance(clusters[i], seg[vname]);
587 | if (distance < shortestDistance) {
588 | shortestDistance = distance;
589 | bestCluster = i;
590 | }
591 | }
592 | return bestCluster;
593 | }
594 |
595 | // kmeans clusterer
596 | // use random initial assignments
597 | for (var i = 0; i < track.analysis.segments.length; i++) {
598 | track.analysis.segments[i][fname] = Math.floor(Math.random() * numClusters);
599 | }
600 |
601 | reportClusteringStats();
602 |
603 | while (maxLoops-- > 0) {
604 | // calculate cluster centroids
605 | var centroids = [];
606 | for (var i = 0; i < numClusters; i++) {
607 | centroids[i] = getCentroid(i);
608 | }
609 | // reassign segs to clusters
610 | var switches = 0;
611 | for (var i = 0; i < track.analysis.segments.length; i++) {
612 | var seg = track.analysis.segments[i];
613 | var oldCluster = seg[fname];
614 | var newCluster = findNearestCluster(centroids, seg);
615 | if (oldCluster !== newCluster) {
616 | switches++;
617 | seg[fname] = newCluster;
618 | }
619 | }
620 | //console.log("loopleft", maxLoops, 'switches', switches);
621 | if (switches == 0) {
622 | break;
623 | }
624 | }
625 | reportClusteringStats();
626 | }
627 |
628 | // Helper functions for handling uploads with Echo Nest support
629 | function endsWith(str, suffix) {
630 | return str.indexOf(suffix, str.length - suffix.length) !== -1;
631 | }
632 |
633 | function fixFileName(name) {
634 | name = name.replace(/c:\\fakepath\\/i, '');
635 | name = name.replace(/[^A-Z0-9.\-]+/gi, ' ');
636 | name = Math.floor(Math.random(10000) * 10000) + ".mp3";
637 | return 'remix_audio/' + apiKey + '/' + new Date().getTime() + '/' + name;
638 | }
639 |
640 | function fetchSignature() {
641 | var url = 'http://remix.echonest.com/Uploader/verify?callback=?&v=audio';
642 | $.getJSON(url, {}, function(data) {
643 | policy = data.policy;
644 | signature = data.signature;
645 | $('#f-policy').val(data.policy);
646 | $('#f-signature').val(data.signature);
647 | $('#f-key').val(data.key);
648 | });
649 | }
650 |
651 | function getProfile(trackID, callback) {
652 | var url = 'http://remix.echonest.com/Uploader/profile?callback=?';
653 | console.log(url+'trid='+trackID);
654 | return $.getJSON(url, {trid: trackID}, callback);
655 | }
656 |
657 | function urldecode(str) {
658 | return decodeURIComponent((str+'').replace(/\+/g, '%20'));
659 | }
660 |
661 |
662 | // Error handler for writing remixes to wav files
663 | function fileErrorHandler(e) {
664 | var msg = '';
665 |
666 | switch (e.code) {
667 | case FileError.QUOTA_EXCEEDED_ERR:
668 | msg = 'QUOTA_EXCEEDED_ERR';
669 | break;
670 | case FileError.NOT_FOUND_ERR:
671 | msg = 'NOT_FOUND_ERR';
672 | break;
673 | case FileError.SECURITY_ERR:
674 | msg = 'SECURITY_ERR';
675 | break;
676 | case FileError.INVALID_MODIFICATION_ERR:
677 | msg = 'INVALID_MODIFICATION_ERR';
678 | break;
679 | case FileError.INVALID_STATE_ERR:
680 | msg = 'INVALID_STATE_ERR';
681 | break;
682 | default:
683 | msg = 'Unknown Error';
684 | break;
685 | };
686 |
687 | console.log('Error: ' + msg);
688 | }
689 |
690 | // Wav code based on Tomás Senart's AudioJEdit - https://github.com/tsenart/audiojedit
691 | var Wav = {};
692 | Wav.createWaveFileData = (function() {
693 | var writeString = function(s, a, offset) {
694 | for (var i = 0; i < s.length; ++i) {
695 | a[offset + i] = s.charCodeAt(i);
696 | }
697 | };
698 |
699 | var writeInt16 = function(n, a, offset) {
700 | n = n | 0;
701 | a[offset + 0] = n & 255;
702 | a[offset + 1] = (n >> 8) & 255;
703 | };
704 |
705 | var writeInt32 = function(n, a, offset) {
706 | n = n | 0
707 | a[offset + 0] = n & 255;
708 | a[offset + 1] = (n >> 8) & 255;
709 | a[offset + 2] = (n >> 16) & 255;
710 | a[offset + 3] = (n >> 24) & 255;
711 | };
712 |
713 | var writeAudioBuffer = function(a, offset, quanta) {
714 | var bufferL, sampleL, bufferR, sampleR;
715 | var currentBuffer;
716 |
717 | for (var q = 0; q < quanta.length; q++) {
718 |
719 | currentBuffer = quanta[q].track.buffer;
720 | bufferL = currentBuffer.getChannelData(0);
721 | bufferR = currentBuffer.getChannelData(1);
722 |
723 | var start = Math.floor(parseFloat(quanta[q].start) * currentBuffer.sampleRate);
724 | var end = Math.floor((parseFloat(quanta[q].start) + parseFloat(quanta[q].duration)) * currentBuffer.sampleRate);
725 |
726 | for (var i = start; i < end; ++i) {
727 | sampleL = bufferL[i] * 32768.0;
728 | sampleR = bufferR[i] * 32768.0;
729 |
730 | // Clip left and right samples to the limitations of 16-bit.
731 | // If we don't do this then we'll get nasty wrap-around distortion.
732 | if (sampleL < -32768) { sampleL = -32768; }
733 | if (sampleL > 32767) { sampleL = 32767; }
734 | if (sampleR < -32768) { sampleR = -32768; }
735 | if (sampleR > 32767) { sampleR = 32767; }
736 |
737 | writeInt16(sampleL, a, offset);
738 | writeInt16(sampleR, a, offset + 2);
739 | offset += 4;
740 | }
741 | }
742 | };
743 |
744 | return function(quanta) {
745 | var remixDuration = 0;
746 | for (var q = 0; q < quanta.length; q++) {
747 | remixDuration = remixDuration + parseFloat(quanta[q].duration);
748 | }
749 | var currentBuffer = quanta[0].track.buffer;
750 | var frameLength = remixDuration * currentBuffer.sampleRate,
751 | numberOfChannels = currentBuffer.numberOfChannels,
752 | sampleRate = currentBuffer.sampleRate,
753 | bitsPerSample = 16,
754 | byteRate = sampleRate * numberOfChannels * bitsPerSample / 8,
755 | blockAlign = numberOfChannels * bitsPerSample / 8,
756 | wavDataByteLength = frameLength * numberOfChannels * 2, // 16-bit audio
757 | headerByteLength = 44,
758 | totalLength = headerByteLength + wavDataByteLength,
759 | waveFileData = new Uint8Array(totalLength),
760 | subChunk1Size = 16, // for linear PCM
761 | subChunk2Size = wavDataByteLength,
762 | chunkSize = 4 + (8 + subChunk1Size) + (8 + subChunk2Size);
763 |
764 | writeString('RIFF', waveFileData, 0);
765 | writeInt32(chunkSize, waveFileData, 4);
766 | writeString('WAVE', waveFileData, 8);
767 | writeString('fmt ', waveFileData, 12);
768 |
769 | writeInt32(subChunk1Size, waveFileData, 16); // SubChunk1Size (4)
770 | writeInt16(1, waveFileData, 20); // AudioFormat (2)
771 | writeInt16(numberOfChannels, waveFileData, 22); // NumChannels (2)
772 | writeInt32(sampleRate, waveFileData, 24); // SampleRate (4)
773 | writeInt32(byteRate, waveFileData, 28); // ByteRate (4)
774 | writeInt16(blockAlign, waveFileData, 32); // BlockAlign (2)
775 | writeInt32(bitsPerSample, waveFileData, 34); // BitsPerSample (4)
776 |
777 | writeString('data', waveFileData, 36);
778 | writeInt32(subChunk2Size, waveFileData, 40); // SubChunk2Size (4)
779 |
780 | // Write actual audio data starting at offset 44.
781 | writeAudioBuffer(waveFileData, 44, quanta);
782 |
783 | return waveFileData;
784 | }
785 | }());
786 |
--------------------------------------------------------------------------------
/switchbeat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwitchBeat
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
1929 |
1930 |
1931 |
1932 |
SwitchBeat { }
1933 |
Mashup two of your favorite songs
1934 |
1971 |
1972 |
1973 |
1974 |
1975 |
Upload
1976 |
1977 |
1978 |
1979 |
1980 |
1981 |
1982 |
1983 |
1996 |
1997 |
1998 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
2017 |
2018 |
2019 | Play
2020 | Stop
2021 |
2022 |
2023 |
2024 |
2025 |
2026 |
2027 |
2028 |
2029 |
2030 |
2031 | Block: 1
2032 |
2033 | Track: 1
2034 |
2035 |
2036 |
2037 | Loud Pitch Timbre Track ratio
2040 |
2041 |
2042 |
2043 |
2044 |
2045 |
2046 |
2047 |
2048 | Brought to you by:
2049 |
2050 | |
2051 | |
2052 | |
SwitchBeat is coded by
Nikhil Kumar inspired by
The Infinite Jukebox , check out more at
Kumarcode.com
2053 |
2054 |
2055 |
2056 | Fork me on GitHub
2057 |
2058 |
--------------------------------------------------------------------------------