🎁Free Shipping on Orders Over $59🎉
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
4 / 10
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
Handmade Kalimba
58% OFF
Fnkus

Handmade Kalimba

$34.00 $80.00
0 sold
Color
Qty 998 in stock

Easy to learn & beginner friendly

Amazing gift for anyone

Improves mindfulness

Wonderful sounds

Take your Kalimba anywhere, and start enjoying the sounds no matter where you are!

Kalimba, also known as a thumb piano, is like a magic music box that can produce amazing sounds. It is a new type of instrument that originated in Africa and super great for children to cultivate musical talent and for adults who simply love music.

Easy to Play!

Without any music basis, you just move your thumb to get the wonderful music that delights your day long.

Package List
  1. 17-key Kalimba
  2. Instruction Sheet
  3. Tuning Hammer
  4. Scale Stickers
  5. Cleaning Cloth

“New thing! Pretty!!! I like Kalimba. I love these. It looks ancient. I decided I wanted one. I LOVE IT. It was cheaper on but I love how it sounds. Playing it is so relaxing.”
⭐️⭐️⭐️⭐️⭐️
Michael P.


  • HIGH QUALITY MATERIALS: Handmade with high-quality mahogany and ore steel bars, nice looking professional seventeen key kalimba instrument.
  • NICE SOUND & CURVED NOTES: All the keys / tines sound very pretty. The keys are engraved with letters and notes, more convenient than other stickers notes thumb piano.
  • EASY TO PLAY & WIDE USE: English manual book, songbook help you tune and play this finger piano easily. Best gift for kids, adults, beginners, professionals, and bands.
  • INTERNATIONAL STANDARD C TUNE & PORTABLE: 17 keys / notes: 1(D), 2(B), 3(G), 4(E), 5(C5), 6(A), 7(F), 8(D), 9(C4), 10(E), 11(G), 12(B), 13(D), 14(F), 15(A), 16(C6), 17(E). Small size pocket piano , portable for performance, recording, family, outdoor, school, party, and relaxation.
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);