[{"data":1,"prerenderedAt":3214},["ShallowReactive",2],{"navigation":3,"/blog/software-development/technical-job-opportunities-in-the-music-industry-post":734,"/blog/software-development/technical-job-opportunities-in-the-music-industry-surround":1086,"/blog/software-development/technical-job-opportunities-in-the-music-industry-related":1091},[4,70,207,312,721],{"title":5,"path":6,"stem":7,"children":8,"page":69},"Case Study","/blog/case-study","blog/case-study",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65],{"title":10,"path":11,"stem":12},"Ambistream – Multi-Layer Streaming Platform","/blog/case-study/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea","blog/case-study/ambistream-building-a-multi-layer-streaming-platform-from-a-spark-of-an-idea",{"title":14,"path":15,"stem":16},"Custom Chromecast & AirPlay Casting App","/blog/case-study/chromecast-airplay-casting-app-case-study","blog/case-study/chromecast-airplay-casting-app-case-study",{"title":18,"path":19,"stem":20},"Direct Music Licensing Platform Case Study","/blog/case-study/dlm-music-catalog-case-study","blog/case-study/dlm-music-catalog-case-study",{"title":22,"path":23,"stem":24},"Assembly Instructions App - Galeco Mobile App","/blog/case-study/galeco-mobile-app-case-study","blog/case-study/galeco-mobile-app-case-study",{"title":26,"path":27,"stem":28},"MemoSonic: Building an Audio Memory Game","/blog/case-study/how-we-built-memosonic-accessible-audio-memory-game-flutter","blog/case-study/how-we-built-memosonic-accessible-audio-memory-game-flutter",{"title":30,"path":31,"stem":32},"Loyalty Program App for Shopping Mall","/blog/case-study/loyalty-program-application-case-study","blog/case-study/loyalty-program-application-case-study",{"title":34,"path":35,"stem":36},"Mobile Application for Music Catalogs","/blog/case-study/mobile-app-for-music-catalog","blog/case-study/mobile-app-for-music-catalog",{"title":38,"path":39,"stem":40},"Universal Music Data Parser for 20+ Platforms","/blog/case-study/musicdata-lab-universal-music-data-parser-case-study","blog/case-study/musicdata-lab-universal-music-data-parser-case-study",{"title":42,"path":43,"stem":44},"Panther ML/AI Pricing Recommendation Tool","/blog/case-study/panther-pricing-recommendation-tool-case-study","blog/case-study/panther-pricing-recommendation-tool-case-study",{"title":46,"path":47,"stem":48},"4D Grupa Roofing Wholesalers Platform","/blog/case-study/roofing-wholesalers-website-case-study","blog/case-study/roofing-wholesalers-website-case-study",{"title":50,"path":51,"stem":52},"Talent Alpha HR Frontend Platform","/blog/case-study/talent-alpha-hr-platform-case-study","blog/case-study/talent-alpha-hr-platform-case-study",{"title":54,"path":55,"stem":56},"Ticketing & Events Platform Development","/blog/case-study/ticketing-events-platform-case-study","blog/case-study/ticketing-events-platform-case-study",{"title":58,"path":59,"stem":60},"Turn Fans into Superfans — Roadie.co","/blog/case-study/turn-fans-into-superfans-roadie-co","blog/case-study/turn-fans-into-superfans-roadie-co",{"title":62,"path":63,"stem":64},"Walkative 2.0 Global Booking Engine","/blog/case-study/walkative-2-booking-platform-case-study","blog/case-study/walkative-2-booking-platform-case-study",{"title":66,"path":67,"stem":68},"Why Merch Is the New Royalty Check, and How Tech Is Closing the Gap","/blog/case-study/why-merch-is-the-new-royalty-check","blog/case-study/why-merch-is-the-new-royalty-check",false,{"title":71,"path":72,"stem":73,"children":74,"page":69},"Music Data","/blog/music-data","blog/music-data",[75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203],{"title":76,"path":77,"stem":78},"13 Distributors, 5 File Formats, Zero Standards -The Reality of Music Royalty Data","/blog/music-data/13-distributors-5-file-formats-zero-standards-the-reality-of-music-royalty-data","blog/music-data/13-distributors-5-file-formats-zero-standards-the-reality-of-music-royalty-data",{"title":80,"path":81,"stem":82},"830 Ways to Say Spotify - Normalizing Music Streaming Data","/blog/music-data/830-ways-to-say-spotify-normalizing-music-streaming-data","blog/music-data/830-ways-to-say-spotify-normalizing-music-streaming-data",{"title":84,"path":85,"stem":86},"Why Music Companies Need AI-Powered Analytics (And How We Built One)","/blog/music-data/ai-powered-analytics-dashboard-django-clickhouse-ollama","blog/music-data/ai-powered-analytics-dashboard-django-clickhouse-ollama",{"title":88,"path":89,"stem":90},"AI Rehearsal: Spaced Repetition for Your Musical Ideas","/blog/music-data/ai-rehearsal-spaced-repetition-for-musical-ideas","blog/music-data/ai-rehearsal-spaced-repetition-for-musical-ideas",{"title":92,"path":93,"stem":94},"Audio Project Organization Is a Mess — Here's Why","/blog/music-data/audio-project-organization-mess","blog/music-data/audio-project-organization-mess",{"title":96,"path":97,"stem":98},"Why Audio Search Is Still Broken and How to Fix It with Embeddings","/blog/music-data/audio-search-broken-fix-with-embeddings","blog/music-data/audio-search-broken-fix-with-embeddings",{"title":100,"path":101,"stem":102},"AI Song Structure Analysis: Intro, Verse, Chorus","/blog/music-data/automatic-song-structure-analysis-how-ai-detects-intro-verse-chorus","blog/music-data/automatic-song-structure-analysis-how-ai-detects-intro-verse-chorus",{"title":104,"path":105,"stem":106},"The Broken Feedback Loop in Music Collaboration","/blog/music-data/broken-feedback-loop-music-collaboration","blog/music-data/broken-feedback-loop-music-collaboration",{"title":108,"path":109,"stem":110},"Building a Claude Skill for DDEX Validation: Automate Music Metadata Checks with AI","/blog/music-data/building-a-claude-skill-for-ddex-validation-music-metadata","blog/music-data/building-a-claude-skill-for-ddex-validation-music-metadata",{"title":112,"path":113,"stem":114},"Building a Custom Music Delivery Platform on the Revelator API","/blog/music-data/building-a-custom-music-delivery-platform-on-the-revelator-api","blog/music-data/building-a-custom-music-delivery-platform-on-the-revelator-api",{"title":116,"path":117,"stem":118},"Building a Suno AI Remix App with Nuxt & Firebase","/blog/music-data/building-a-suno-remix-app-with-nuxt-and-firebase","blog/music-data/building-a-suno-remix-app-with-nuxt-and-firebase",{"title":120,"path":121,"stem":122},"C2PA & DDEX: Authenticity Meets Rights in the Age of AI Music","/blog/music-data/c2pa-and-ddex-authenticity-meets-rights-in-the-age-of-ai-music","blog/music-data/c2pa-and-ddex-authenticity-meets-rights-in-the-age-of-ai-music",{"title":124,"path":125,"stem":126},"C2PA in Music: A Claude MCP for Reading Content Provenance","/blog/music-data/c2pa-in-music-mcp","blog/music-data/c2pa-in-music-mcp",{"title":128,"path":129,"stem":130},"Data Modeling in MongoDB Using Design Patterns","/blog/music-data/data-modeling-in-mongodb-with-the-usage-of-design-patterns","blog/music-data/data-modeling-in-mongodb-with-the-usage-of-design-patterns",{"title":132,"path":133,"stem":134},"Office Hours with MusicTech Lab's DDEX Expert","/blog/music-data/ddex-office-hours-musictech","blog/music-data/ddex-office-hours-musictech",{"title":136,"path":137,"stem":138},"DDEX Open Source Projects Review","/blog/music-data/ddex-open-source-projects-review","blog/music-data/ddex-open-source-projects-review",{"title":140,"path":141,"stem":142},"Extracting Data from Ableton .als and .asd Files","/blog/music-data/extracting-data-from-ableton-als-asd-files","blog/music-data/extracting-data-from-ableton-als-asd-files",{"title":144,"path":145,"stem":146},"Maciej Dulski on Sound Connections Podcast","/blog/music-data/from-startups-to-musictech-maciej-dulski-on-sound-connections-podcast","blog/music-data/from-startups-to-musictech-maciej-dulski-on-sound-connections-podcast",{"title":148,"path":149,"stem":150},"How to Transcribe Video to Text Using OpenAI Whisper","/blog/music-data/how-to-transcribe-video-to-text-using-whisper","blog/music-data/how-to-transcribe-video-to-text-using-whisper",{"title":152,"path":153,"stem":154},"Epidemic Sound MCP with Claude for Devs","/blog/music-data/how-to-use-epidemic-sound-mcp-with-claude","blog/music-data/how-to-use-epidemic-sound-mcp-with-claude",{"title":156,"path":157,"stem":158},"Hybrid Database Model in Django for Speed","/blog/music-data/hybrid-database-model-in-django-as-a-performance-booster","blog/music-data/hybrid-database-model-in-django-as-a-performance-booster",{"title":160,"path":161,"stem":162},"Introduction to generating DDEX file using Python","/blog/music-data/introduction-to-generating-ddex-file-using-python","blog/music-data/introduction-to-generating-ddex-file-using-python",{"title":164,"path":165,"stem":166},"Maintaining Music Tech Tools: The SLA Dilemma for Small Teams","/blog/music-data/maintaining-music-tech-tools-the-sla-dilemma-for-small-teams","blog/music-data/maintaining-music-tech-tools-the-sla-dilemma-for-small-teams",{"title":168,"path":169,"stem":170},"Querying Bandcamp Revenue Reports with Natural Language — Meet mtl-bandcamp-mcp","/blog/music-data/mtl-bandcamp-mcp-open-source-revenue-dashboard","blog/music-data/mtl-bandcamp-mcp-open-source-revenue-dashboard",{"title":172,"path":173,"stem":174},"mtl-metadata-mcp: Open Source Audio Metadata Embedding for Claude Code","/blog/music-data/mtl-metadata-mcp-open-source-audio-metadata-embedding","blog/music-data/mtl-metadata-mcp-open-source-audio-metadata-embedding",{"title":176,"path":177,"stem":178},"MusicTech Resources for Builders","/blog/music-data/musictech-resources-curated-insights-for-the-musictech-builders","blog/music-data/musictech-resources-curated-insights-for-the-musictech-builders",{"title":180,"path":181,"stem":182},"Poland's Creative Tech and MusicTech Rise","/blog/music-data/polands-creative-tech-sector-is-on-the-rise-and-musictech-is-part-of-it","blog/music-data/polands-creative-tech-sector-is-on-the-rise-and-musictech-is-part-of-it",{"title":184,"path":185,"stem":186},"Batch ISRC Enrichment That Turns Messy Catalogs Into Clean Data","/blog/music-data/scout-isrc-metadata-enrichment-spotify-musicbrainz","blog/music-data/scout-isrc-metadata-enrichment-spotify-musicbrainz",{"title":188,"path":189,"stem":190},"Music Self-Publishing: The Emuze.me Story","/blog/music-data/self-publishing-in-the-music-industry-a-tale-of-emuze-me","blog/music-data/self-publishing-in-the-music-industry-a-tale-of-emuze-me",{"title":192,"path":193,"stem":194},"Understanding the API First Approach","/blog/music-data/understanding-the-api-first-approach","blog/music-data/understanding-the-api-first-approach",{"title":196,"path":197,"stem":198},"The Voice Memo Graveyard Problem","/blog/music-data/voice-memo-graveyard-problem","blog/music-data/voice-memo-graveyard-problem",{"title":200,"path":201,"stem":202},"Which Database for Music Data? Redshift vs BigQuery vs ClickHouse and When to Use Each","/blog/music-data/which-database-for-music-data-redshift-vs-bigquery-vs-clickhouse","blog/music-data/which-database-for-music-data-redshift-vs-bigquery-vs-clickhouse",{"title":204,"path":205,"stem":206},"Why we decided to use wavesurfer.js","/blog/music-data/why-we-decided-to-use-wavesurfer","blog/music-data/why-we-decided-to-use-wavesurfer",{"title":208,"path":209,"stem":210,"children":211,"page":69},"Newsletter","/blog/newsletter","blog/newsletter",[212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308],{"title":213,"path":214,"stem":215},"Music Industry Tech Openings (April 2024 Update)","/blog/newsletter/music-industry-tech-openings-april-2024-update","blog/newsletter/music-industry-tech-openings-april-2024-update",{"title":217,"path":218,"stem":219},"Music Industry Tech Openings (April 2025 Update)","/blog/newsletter/music-industry-tech-openings-april-2025-update","blog/newsletter/music-industry-tech-openings-april-2025-update",{"title":221,"path":222,"stem":223},"Music Industry Tech Openings (August 2024 Update)","/blog/newsletter/music-industry-tech-openings-august-2024-update","blog/newsletter/music-industry-tech-openings-august-2024-update",{"title":225,"path":226,"stem":227},"Music Industry Tech Openings (December 2024 Update)","/blog/newsletter/music-industry-tech-openings-december-2024-update","blog/newsletter/music-industry-tech-openings-december-2024-update",{"title":229,"path":230,"stem":231},"Music Industry Tech Openings (February 2025 Update)","/blog/newsletter/music-industry-tech-openings-february-2025-update","blog/newsletter/music-industry-tech-openings-february-2025-update",{"title":233,"path":234,"stem":235},"Music Industry Tech Openings (January 2025 Update)","/blog/newsletter/music-industry-tech-openings-january-2025-update","blog/newsletter/music-industry-tech-openings-january-2025-update",{"title":237,"path":238,"stem":239},"Music Industry Tech Openings (July 2024 Update)","/blog/newsletter/music-industry-tech-openings-july-2024-update","blog/newsletter/music-industry-tech-openings-july-2024-update",{"title":241,"path":242,"stem":243},"Music Industry Tech Openings (June 2024 Update)","/blog/newsletter/music-industry-tech-openings-june-2024-update","blog/newsletter/music-industry-tech-openings-june-2024-update",{"title":245,"path":246,"stem":247},"Music Industry Tech Openings (March 2025 Update)","/blog/newsletter/music-industry-tech-openings-march-2025-update","blog/newsletter/music-industry-tech-openings-march-2025-update",{"title":249,"path":250,"stem":251},"Music Industry Tech Openings (May 2024 Update)","/blog/newsletter/music-industry-tech-openings-may-2024-update","blog/newsletter/music-industry-tech-openings-may-2024-update",{"title":253,"path":254,"stem":255},"Music Industry Tech Openings (May 2025 Update)","/blog/newsletter/music-industry-tech-openings-may-2025","blog/newsletter/music-industry-tech-openings-may-2025",{"title":257,"path":258,"stem":259},"Music Industry Tech Openings (November 2024 Update)","/blog/newsletter/music-industry-tech-openings-november-2024-update","blog/newsletter/music-industry-tech-openings-november-2024-update",{"title":261,"path":262,"stem":263},"Music Industry Tech Openings (October 2024 Update)","/blog/newsletter/music-industry-tech-openings-october-2024-update","blog/newsletter/music-industry-tech-openings-october-2024-update",{"title":265,"path":266,"stem":267},"Music Industry Tech Openings (September 2024 Update)","/blog/newsletter/music-industry-tech-openings-september-2024-update","blog/newsletter/music-industry-tech-openings-september-2024-update",{"title":269,"path":270,"stem":271},"MusicTech Insights #1 by Maciej Dulski","/blog/newsletter/musictech-insights-1-curated-by-maciej-dulski","blog/newsletter/musictech-insights-1-curated-by-maciej-dulski",{"title":273,"path":274,"stem":275},"Provenance, Not Detection, Is the Durable Answer","/blog/newsletter/musictech-insights-10-curated-by-jim-anderson","blog/newsletter/musictech-insights-10-curated-by-jim-anderson",{"title":277,"path":278,"stem":279},"What CMOs can teach us about innovation in uncertain times","/blog/newsletter/musictech-insights-10-curated-by-joanna-kurkowska","blog/newsletter/musictech-insights-10-curated-by-joanna-kurkowska",{"title":281,"path":282,"stem":283},"Feeling the MusicTech Momentum","/blog/newsletter/musictech-insights-2-curated-by-maciej-dulski","blog/newsletter/musictech-insights-2-curated-by-maciej-dulski",{"title":285,"path":286,"stem":287},"AI in Music: Hype, Hope, and a Human Touch","/blog/newsletter/musictech-insights-3-curated-by-drew-thurlow","blog/newsletter/musictech-insights-3-curated-by-drew-thurlow",{"title":289,"path":290,"stem":291},"The Music Metadata Conundrum","/blog/newsletter/musictech-insights-4-curated-by-amanda-schupf","blog/newsletter/musictech-insights-4-curated-by-amanda-schupf",{"title":293,"path":294,"stem":295},"7 Rounds in the First 10 Days of November 2025","/blog/newsletter/musictech-insights-5-curated-by-maciej-dulski","blog/newsletter/musictech-insights-5-curated-by-maciej-dulski",{"title":297,"path":298,"stem":299},"The End of an Era: It's All About to Crash","/blog/newsletter/musictech-insights-6-curated-by-sigurdur-arnason","blog/newsletter/musictech-insights-6-curated-by-sigurdur-arnason",{"title":301,"path":302,"stem":303},"Low-Code Magic Won't Solve MusicTech Reality","/blog/newsletter/musictech-insights-7-curated-by-mariusz-smenzyk","blog/newsletter/musictech-insights-7-curated-by-mariusz-smenzyk",{"title":305,"path":306,"stem":307},"The New Economics of Game Music","/blog/newsletter/musictech-insights-8-curated-by-kenny-vaughan","blog/newsletter/musictech-insights-8-curated-by-kenny-vaughan",{"title":309,"path":310,"stem":311},"Music Business Meets Direct-to-Fan","/blog/newsletter/musictech-insights-9-curated-by-yaw-asamani","blog/newsletter/musictech-insights-9-curated-by-yaw-asamani",{"title":313,"path":314,"stem":315,"children":316,"page":69},"Software Development","/blog/software-development","blog/software-development",[317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417,421,425,429,433,437,441,445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717],{"title":318,"path":319,"stem":320},"Benefits of Outsourcing Software Development","/blog/software-development/10-benefits-of-outsourcing-software-development-services","blog/software-development/10-benefits-of-outsourcing-software-development-services",{"title":322,"path":323,"stem":324},"10 Steps to Find the Best MVP Developers","/blog/software-development/10-steps-to-find-the-best-mvp-developers-for-your-startup-idea","blog/software-development/10-steps-to-find-the-best-mvp-developers-for-your-startup-idea",{"title":326,"path":327,"stem":328},"1,200 Looms Later: How Async Video Became My Development Superpower","/blog/software-development/1200-looms-how-async-video-became-our-development-superpower","blog/software-development/1200-looms-how-async-video-became-our-development-superpower",{"title":330,"path":331,"stem":332},"Communication Strategy in Outsourcing Projects","/blog/software-development/5-steps-to-implement-an-effective-communication-strategy-in-outsourcing-software-development-project","blog/software-development/5-steps-to-implement-an-effective-communication-strategy-in-outsourcing-software-development-project",{"title":334,"path":335,"stem":336},"7 Best Practices for Outsourcing Software Development","/blog/software-development/7-best-practices-for-outsourcing-software-development","blog/software-development/7-best-practices-for-outsourcing-software-development",{"title":338,"path":339,"stem":340},"9 Reasons Why Saleor.io Is Best for eCommerce","/blog/software-development/9-reasons-why-the-saleor-io-platform-is-the-best-choice-for-your-ecommerce-website","blog/software-development/9-reasons-why-the-saleor-io-platform-is-the-best-choice-for-your-ecommerce-website",{"title":342,"path":343,"stem":344},"A Look at Bravelab.io’s Clutch 2021 Year In Review","/blog/software-development/a-look-at-bravelab-ios-clutch-2021-year-in-review","blog/software-development/a-look-at-bravelab-ios-clutch-2021-year-in-review",{"title":346,"path":347,"stem":348},"A quick introduction to profit sharing implementation","/blog/software-development/a-quick-introduction-to-profit-sharing-implementation","blog/software-development/a-quick-introduction-to-profit-sharing-implementation",{"title":350,"path":351,"stem":352},"AI Audio Similarity Search: The Future of Sound Library Discovery","/blog/software-development/ai-audio-similarity-search-for-sound-libraries","blog/software-development/ai-audio-similarity-search-for-sound-libraries",{"title":354,"path":355,"stem":356},"Automate Repetitive Tasks for Better Results","/blog/software-development/automate-repetitive-tasks-to-improve-your-business-performance","blog/software-development/automate-repetitive-tasks-to-improve-your-business-performance",{"title":358,"path":359,"stem":360},"Automating Success: The Art of Unified Documentation","/blog/software-development/automating-success-the-art-of-unified-documentation","blog/software-development/automating-success-the-art-of-unified-documentation",{"title":362,"path":363,"stem":364},"Brave 3.0 Website Redesign, Part 2: Solution","/blog/software-development/brave-3-0-how-we-conducted-website-redesign-part-2-solution","blog/software-development/brave-3-0-how-we-conducted-website-redesign-part-2-solution",{"title":366,"path":367,"stem":368},"Brave 3.0, Part 4: Tech Stack and Recap","/blog/software-development/brave-3-0-part-4-technologies-behind-and-final-series-recap","blog/software-development/brave-3-0-part-4-technologies-behind-and-final-series-recap",{"title":370,"path":371,"stem":372},"Brave 3.0 – redesign process part 1. The Challenge","/blog/software-development/brave-3-0-redesign-process-part-1-challenge","blog/software-development/brave-3-0-redesign-process-part-1-challenge",{"title":374,"path":375,"stem":376},"Brave 3.0 – redesign process, part 3. Lesson learned","/blog/software-development/brave-3-0-redesign-process-part-3-lesson-learned","blog/software-development/brave-3-0-redesign-process-part-3-lesson-learned",{"title":378,"path":379,"stem":380},"Bravelab.io: Top Software Developer by Clutch","/blog/software-development/bravelab-io-is-recognized-as-a-top-custom-software-developer-by-clutch","blog/software-development/bravelab-io-is-recognized-as-a-top-custom-software-developer-by-clutch",{"title":382,"path":383,"stem":384},"Bravelab.io: Top Developer in Poland by Clutch","/blog/software-development/bravelab-io-named-top-software-developer-in-poland-by-clutch","blog/software-development/bravelab-io-named-top-software-developer-in-poland-by-clutch",{"title":386,"path":387,"stem":388},"MusicTech Lab Partners with LALAL.AI","/blog/software-development/bravelab-partners-with-the-audio-lalal-ai","blog/software-development/bravelab-partners-with-the-audio-lalal-ai",{"title":390,"path":391,"stem":392},"MusicTech Lab Partners with The Audio Programmer","/blog/software-development/bravelab-partners-with-the-audio-programmer","blog/software-development/bravelab-partners-with-the-audio-programmer",{"title":394,"path":395,"stem":396},"Bravelab's team about productivity","/blog/software-development/bravelabs-team-about-productivity","blog/software-development/bravelabs-team-about-productivity",{"title":398,"path":399,"stem":400},"Braveloper","/blog/software-development/braveloper","blog/software-development/braveloper",{"title":402,"path":403,"stem":404},"Bravely App: Boost Productivity with Django","/blog/software-development/bravely-app-how-to-be-more-productive-with-django-quick","blog/software-development/bravely-app-how-to-be-more-productive-with-django-quick",{"title":406,"path":407,"stem":408},"DIY MIDI Controller for Ableton with Arduino","/blog/software-development/building-a-diy-midi-controller-for-ableton-live-with-arduino","blog/software-development/building-a-diy-midi-controller-for-ableton-live-with-arduino",{"title":410,"path":411,"stem":412},"C2PA in Ableton: Making AI Music Provenance Visible Inside Your DAW","/blog/software-development/c2pa-in-ableton-max-for-live","blog/software-development/c2pa-in-ableton-max-for-live",{"title":414,"path":415,"stem":416},"Change Detection mechanism in Angular","/blog/software-development/change-detection-mechanism-in-angular","blog/software-development/change-detection-mechanism-in-angular",{"title":418,"path":419,"stem":420},"Communication Channels in Remote Work","/blog/software-development/comparison-of-the-communication-channels-in-remote-work","blog/software-development/comparison-of-the-communication-channels-in-remote-work",{"title":422,"path":423,"stem":424},"Connecting Your Max for Live Device to a Cloud API","/blog/software-development/connecting-your-max-for-live-device-to-a-cloud-api","blog/software-development/connecting-your-max-for-live-device-to-a-cloud-api",{"title":426,"path":427,"stem":428},"From Voice Memo to Studio: The Cross-Platform Problem for Creators","/blog/software-development/cross-platform-problem-for-creators","blog/software-development/cross-platform-problem-for-creators",{"title":430,"path":431,"stem":432},"Cultural transformation through the pandemic era","/blog/software-development/cultural-transformation-through-the-pandemic-era","blog/software-development/cultural-transformation-through-the-pandemic-era",{"title":434,"path":435,"stem":436},"D-Commerce Decoded: Cutting Through the Hype","/blog/software-development/d-commerce-decoded-cutting-through-the-hype","blog/software-development/d-commerce-decoded-cutting-through-the-hype",{"title":438,"path":439,"stem":440},"Dev Meeting 002: Intro to DDD","/blog/software-development/dev-meeting-002-introduction-to-domain-driven-design-ddd","blog/software-development/dev-meeting-002-introduction-to-domain-driven-design-ddd",{"title":442,"path":443,"stem":444},"Dev Meeting 003: Web3 Primer","/blog/software-development/dev-meeting-003-web3-primer","blog/software-development/dev-meeting-003-web3-primer",{"title":446,"path":447,"stem":448},"Dev Meeting 004: Introduction to Event Storming","/blog/software-development/dev-meeting-004-introduction-to-event-storming","blog/software-development/dev-meeting-004-introduction-to-event-storming",{"title":450,"path":451,"stem":452},"Dev Meeting 001: Kubernetes is a Framework","/blog/software-development/dev-meeting-kubernetes-is-a-framework","blog/software-development/dev-meeting-kubernetes-is-a-framework",{"title":454,"path":455,"stem":456},"Did You Know? 10 Developer Tips from Real Codebases","/blog/software-development/did-you-know-dev-tips-part-1","blog/software-development/did-you-know-dev-tips-part-1",{"title":458,"path":459,"stem":460},"10 Surprising MusicTech Facts (Part 2)","/blog/software-development/did-you-know-musictech-facts-part-2","blog/software-development/did-you-know-musictech-facts-part-2",{"title":462,"path":463,"stem":464},"Django-cms and GraphQL","/blog/software-development/django-cms-and-graphql","blog/software-development/django-cms-and-graphql",{"title":466,"path":467,"stem":468},"Does Zappa make it super easy?","/blog/software-development/does-zappa-make-it-super-easy","blog/software-development/does-zappa-make-it-super-easy",{"title":470,"path":471,"stem":472},"Establishing cooperation between Netlify and Bravelab","/blog/software-development/establishing-cooperation-between-netlify-and-bravelab","blog/software-development/establishing-cooperation-between-netlify-and-bravelab",{"title":474,"path":475,"stem":476},"Export Ableton Locators to JSON via Max for Live","/blog/software-development/exporting-ableton-live-locators-to-json-with-max-for-live","blog/software-development/exporting-ableton-live-locators-to-json-with-max-for-live",{"title":478,"path":479,"stem":480},"IT Outsourcing: Success and Failure Factors","/blog/software-development/factors-that-contribute-to-the-success-or-failure-of-an-it-outsourcing-project","blog/software-development/factors-that-contribute-to-the-success-or-failure-of-an-it-outsourcing-project",{"title":482,"path":483,"stem":484},"Flutter 2022 Strategy: Analyzing the Roadmap","/blog/software-development/flutter-strategy-for-2022-analyzing-the-new-flutter-roadmap","blog/software-development/flutter-strategy-for-2022-analyzing-the-new-flutter-roadmap",{"title":486,"path":487,"stem":488},"Git Better #1 — Commit Message Convention","/blog/software-development/git-better-1-see-more-with-a-commit-message-convention","blog/software-development/git-better-1-see-more-with-a-commit-message-convention",{"title":490,"path":491,"stem":492},"Hasura in action. How to use it with Django","/blog/software-development/hasura-in-action","blog/software-development/hasura-in-action",{"title":494,"path":495,"stem":496},"Holacracy why and where we are","/blog/software-development/holacracy-why-and-where-we-are","blog/software-development/holacracy-why-and-where-we-are",{"title":498,"path":499,"stem":500},"How does JavaScript work","/blog/software-development/how-does-javascript-work","blog/software-development/how-does-javascript-work",{"title":502,"path":503,"stem":504},"How important is good UX/UI design?","/blog/software-development/how-important-is-good-ux-ui-design","blog/software-development/how-important-is-good-ux-ui-design",{"title":506,"path":507,"stem":508},"How repetitive tasks impact your business","/blog/software-development/how-repetitive-tasks-impact-your-business","blog/software-development/how-repetitive-tasks-impact-your-business",{"title":510,"path":511,"stem":512},"Becoming a Vue.js Dev: Do Paid Trials Work?","/blog/software-development/how-to-become-a-vue-js-developer-and-whether-paid-trials-in-it-work-out","blog/software-development/how-to-become-a-vue-js-developer-and-whether-paid-trials-in-it-work-out",{"title":514,"path":515,"stem":516},"How to Build an MVP in 6 Steps","/blog/software-development/how-to-build-a-minimum-viable-product-mvp-in-6-steps","blog/software-development/how-to-build-a-minimum-viable-product-mvp-in-6-steps",{"title":518,"path":519,"stem":520},"How to conduct workshops for creative industry?","/blog/software-development/how-to-conduct-workshops-for-creative-industry","blog/software-development/how-to-conduct-workshops-for-creative-industry",{"title":522,"path":523,"stem":524},"How to easily create form in Angular","/blog/software-development/how-to-easily-create-form-in-angular","blog/software-development/how-to-easily-create-form-in-angular",{"title":526,"path":527,"stem":528},"How to export orders in Saleor.io to XLSX file","/blog/software-development/how-to-export-orders-in-saleor-io-to-xlsx-file","blog/software-development/how-to-export-orders-in-saleor-io-to-xlsx-file",{"title":530,"path":531,"stem":532},"Handling High Loads on E-Commerce Platforms","/blog/software-development/how-to-handle-high-loads-on-e-commerce-platform-with-ease","blog/software-development/how-to-handle-high-loads-on-e-commerce-platform-with-ease",{"title":534,"path":535,"stem":536},"How to launch Saleor.io shop instance within 40h","/blog/software-development/how-to-launch-saleor-io-shop-instance-within-40h","blog/software-development/how-to-launch-saleor-io-shop-instance-within-40h",{"title":538,"path":539,"stem":540},"First Steps to Build a Business Relationship","/blog/software-development/how-to-make-the-first-step-to-establish-a-business-relationship","blog/software-development/how-to-make-the-first-step-to-establish-a-business-relationship",{"title":542,"path":543,"stem":544},"Multi-Tenant Apps with Django and Saleor.io","/blog/software-development/how-to-manage-tenants-in-the-multitenant-app-based-on-django-tenants-and-saleor-io-platform","blog/software-development/how-to-manage-tenants-in-the-multitenant-app-based-on-django-tenants-and-saleor-io-platform",{"title":546,"path":547,"stem":548},"Notion Backup Tool Built in 3 Days with Python","/blog/software-development/how-we-built-a-notion-backup-tool-in-3-days-with-pythonvue-and-why","blog/software-development/how-we-built-a-notion-backup-tool-in-3-days-with-pythonvue-and-why",{"title":550,"path":551,"stem":552},"Important new features in Python 3.8","/blog/software-development/important-new-features-in-python-3-8","blog/software-development/important-new-features-in-python-3-8",{"title":554,"path":555,"stem":556},"Installing Proxmox on dedicated server from OVH","/blog/software-development/installing-proxmox-on-dedicated-server-from-ovh","blog/software-development/installing-proxmox-on-dedicated-server-from-ovh",{"title":558,"path":559,"stem":560},"Integrating SignNow E-Signatures into Your Django Application","/blog/software-development/integrating-signnow-e-signatures-into-your-django-application","blog/software-development/integrating-signnow-e-signatures-into-your-django-application",{"title":562,"path":563,"stem":564},"Tempus Metronome and GetSongBPM API","/blog/software-development/integrating-tempus-metronome-with-the-getsongbpm-api-what-bpm-really-means-and-how-to-use-it","blog/software-development/integrating-tempus-metronome-with-the-getsongbpm-api-what-bpm-really-means-and-how-to-use-it",{"title":566,"path":567,"stem":568},"Introducing MusicTech Poland","/blog/software-development/introducing-musictech-poland","blog/software-development/introducing-musictech-poland",{"title":570,"path":571,"stem":572},"Vue.js as a Frontend for Saleor.io","/blog/software-development/is-it-possible-to-use-vue-js-as-a-frontend-for-saleor-io-platform","blog/software-development/is-it-possible-to-use-vue-js-as-a-frontend-for-saleor-io-platform",{"title":574,"path":575,"stem":576},"Is your business ready for the cashless era?","/blog/software-development/is-your-business-ready-for-the-cashless-era","blog/software-development/is-your-business-ready-for-the-cashless-era",{"title":578,"path":579,"stem":580},"Is your face ready to buy?","/blog/software-development/is-your-face-ready-to-buy","blog/software-development/is-your-face-ready-to-buy",{"title":582,"path":583,"stem":584},"JS Frameworks: Trends and Opportunities","/blog/software-development/javascript-trending-frameworks-and-market-opportunities","blog/software-development/javascript-trending-frameworks-and-market-opportunities",{"title":586,"path":587,"stem":588},"Kanban Board: Boost Your Team Productivity","/blog/software-development/kanban-board-methodology-hack-your-companys-productivity","blog/software-development/kanban-board-methodology-hack-your-companys-productivity",{"title":590,"path":591,"stem":592},"Verified Human Cert MCP Server: Prove Your Music Is Human-Made, Right from the Terminal","/blog/software-development/mcp-verified-human-cert-open-source","blog/software-development/mcp-verified-human-cert-open-source",{"title":594,"path":595,"stem":596},"Migrating from TravisCI to Github Actions","/blog/software-development/migrating-from-travisci-to-github-actions","blog/software-development/migrating-from-travisci-to-github-actions",{"title":598,"path":599,"stem":600},"MusicTech Lab: Top Software Developer by Clutch","/blog/software-development/musictechlab-is-recognized-as-a-top-custom-software-developer-by-clutch","blog/software-development/musictechlab-is-recognized-as-a-top-custom-software-developer-by-clutch",{"title":602,"path":603,"stem":604},"MusicTech Lab x Verified Human: Building a Trust Layer for Human-Made Music","/blog/software-development/musictechlab_blog_verified_human_partnership","blog/software-development/musictechlab_blog_verified_human_partnership",{"title":606,"path":607,"stem":608},"MusicXML: Standard for Music Notation","/blog/software-development/musicxml-standard-for-music-notation-and-education","blog/software-development/musicxml-standard-for-music-notation-and-education",{"title":610,"path":611,"stem":612},"Only a few books but dozens of ideas","/blog/software-development/only-a-few-books-but-dozens-of-ideas","blog/software-development/only-a-few-books-but-dozens-of-ideas",{"title":614,"path":615,"stem":616},"Overdue Invoices and Issue Tracker Integration","/blog/software-development/overdue-invoices-integration-with-the-issue-tracking-system","blog/software-development/overdue-invoices-integration-with-the-issue-tracking-system",{"title":618,"path":619,"stem":620},"Performing SAML SSO using JWT in Django","/blog/software-development/performing-saml-sso-using-jwt-in-django","blog/software-development/performing-saml-sso-using-jwt-in-django",{"title":622,"path":623,"stem":624},"Progressive Web Apps for Mobile Development","/blog/software-development/progressive-web-apps-a-new-way-of-creating-mobile-application","blog/software-development/progressive-web-apps-a-new-way-of-creating-mobile-application",{"title":626,"path":627,"stem":628},"Recruitment System: Gmail, Jira, and CRM","/blog/software-development/recruitment-system-integrating-gmail-bravely-jira-slack-and-copper-crm","blog/software-development/recruitment-system-integrating-gmail-bravely-jira-slack-and-copper-crm",{"title":630,"path":631,"stem":632},"Scratch Me: Chrome Extension for Leads","/blog/software-development/scratch-me-a-simple-chrome-extension-which-will-increase-your-productivity","blog/software-development/scratch-me-a-simple-chrome-extension-which-will-increase-your-productivity",{"title":634,"path":635,"stem":636},"Scratch Me – integration with the Copper CRM","/blog/software-development/scratch-me-integration-with-the-copper-crm","blog/software-development/scratch-me-integration-with-the-copper-crm",{"title":638,"path":639,"stem":640},"SignNow MCP Server: E-Signatures Straight from Claude Code","/blog/software-development/signnow-mcp-server-e-signatures-from-claude-code","blog/software-development/signnow-mcp-server-e-signatures-from-claude-code",{"title":642,"path":643,"stem":644},"Music Industry Tech Openings (March 2024 Update)","/blog/software-development/technical-job-opportunities-in-the-music-industry","blog/software-development/technical-job-opportunities-in-the-music-industry",{"title":646,"path":647,"stem":648},"Thanks app – a Management 3.0 solution","/blog/software-development/thanks-app-a-management-3-0-solution","blog/software-development/thanks-app-a-management-3-0-solution",{"title":650,"path":651,"stem":652},"Colonial Pipeline Case: 7 Security Reminders","/blog/software-development/the-case-of-colonial-pipeline-and-7-security-reminders","blog/software-development/the-case-of-colonial-pipeline-and-7-security-reminders",{"title":654,"path":655,"stem":656},"The Evolution and Future of E-commerce Platforms","/blog/software-development/the-evolution-and-future-of-e-commerce-platforms","blog/software-development/the-evolution-and-future-of-e-commerce-platforms",{"title":658,"path":659,"stem":660},"The Gender Gap in the Tech Industry","/blog/software-development/the-gender-gap-in-the-tech-industry","blog/software-development/the-gender-gap-in-the-tech-industry",{"title":662,"path":663,"stem":664},"First Attempt to Implement 4DX at Bravelab.io","/blog/software-development/the-very-first-attempt-to-implement-4dx-in-bravelab-io","blog/software-development/the-very-first-attempt-to-implement-4dx-in-bravelab-io",{"title":666,"path":667,"stem":668},"The WTF Scale: IT Project Complexity","/blog/software-development/the-wtf-programming-scale-measuring-it-project-complexity","blog/software-development/the-wtf-programming-scale-measuring-it-project-complexity",{"title":670,"path":671,"stem":672},"Top 10 articles through the eyes of our developers","/blog/software-development/top-10-articles-through-the-eyes-of-our-developers","blog/software-development/top-10-articles-through-the-eyes-of-our-developers",{"title":674,"path":675,"stem":676},"Top 6 apps made with Flutter","/blog/software-development/top-6-apps-made-with-flutter","blog/software-development/top-6-apps-made-with-flutter",{"title":678,"path":679,"stem":680},"Uber 101: How Uber Made It to the Top","/blog/software-development/uber-101-how-this-ride-sharing-behemoth-made-it-to-the-top","blog/software-development/uber-101-how-this-ride-sharing-behemoth-made-it-to-the-top",{"title":682,"path":683,"stem":684},"MusicTech Lab Partners with Music Glue","/blog/software-development/unifying-artists-and-audiences-exploring-music-glue","blog/software-development/unifying-artists-and-audiences-exploring-music-glue",{"title":686,"path":687,"stem":688},"Why AI Will Defeat Traditional HR","/blog/software-development/warning-why-artificial-intelligence-will-defeat-traditional-hr","blog/software-development/warning-why-artificial-intelligence-will-defeat-traditional-hr",{"title":690,"path":691,"stem":692},"What is a Discovery Document?","/blog/software-development/what-is-discovery-document","blog/software-development/what-is-discovery-document",{"title":694,"path":695,"stem":696},"What is Flutter, and Why is it Worth Considering?","/blog/software-development/what-is-flutter-and-why-is-it-worth-considering","blog/software-development/what-is-flutter-and-why-is-it-worth-considering",{"title":698,"path":699,"stem":700},"What is a Watermarked Song?","/blog/software-development/what-is-watermarked-song","blog/software-development/what-is-watermarked-song",{"title":702,"path":703,"stem":704},"Choosing a Frontend Framework for the Web","/blog/software-development/which-framework-should-you-choose-for-the-frontend-web-platform-development","blog/software-development/which-framework-should-you-choose-for-the-frontend-web-platform-development",{"title":706,"path":707,"stem":708},"Why DAWs Are the Wrong Tool for Starting a Song","/blog/software-development/why-daws-wrong-tool-for-starting-song","blog/software-development/why-daws-wrong-tool-for-starting-song",{"title":710,"path":711,"stem":712},"Why the Programming World Loves Python","/blog/software-development/why-the-programming-world-loves-python","blog/software-development/why-the-programming-world-loves-python",{"title":714,"path":715,"stem":716},"Why We Don't Build Chat From Scratch (And Neither Should You)","/blog/software-development/why-we-dont-build-chat-from-scratch","blog/software-development/why-we-dont-build-chat-from-scratch",{"title":718,"path":719,"stem":720},"Why we use Sanity.io","/blog/software-development/why-we-use-sanity-io","blog/software-development/why-we-use-sanity-io",{"title":722,"path":723,"stem":724,"children":725,"page":69},"Sportstech","/blog/sportstech","blog/sportstech",[726,730],{"title":727,"path":728,"stem":729},"BeatBuddy Replay: Video Analysis App Challenges","/blog/sportstech/beatbuddy-replay-video-analysis-app-for-swimmers-flutter","blog/sportstech/beatbuddy-replay-video-analysis-app-for-swimmers-flutter",{"title":731,"path":732,"stem":733},"How to Create a Watch Face App for Garmin Watch","/blog/sportstech/how-to-create-watch-face-app-for-garmin-watch","blog/sportstech/how-to-create-watch-face-app-for-garmin-watch",{"id":735,"title":642,"authors":736,"badge":742,"body":743,"category":1062,"client":742,"date":1063,"description":1064,"extension":1065,"faq":742,"featured":69,"featuredOrder":742,"hidden":1066,"image":1067,"keyTakeaways":1069,"meta":1080,"navigation":1066,"path":643,"seo":1081,"status":742,"stem":644,"tags":1082,"teaser":742,"__hash__":1085},"posts/blog/software-development/technical-job-opportunities-in-the-music-industry.md",[737],{"name":738,"to":739,"avatar":740},"Maciej Dulski","https://www.linkedin.com/in/maciej-dulski/",{"src":741},"/images/cdn-migrated/maciej-dulski-400x400.webp",null,{"type":744,"value":745,"toc":1058},"minimark",[746,750,753,756,759,765,794,799,817,822,863,868,888,893,920,925,942,947,962,967,984,989,1009,1014,1055],[747,748,749],"p",{},"hidden: true",[747,751,752],{},"Our mission expanded beyond just building music tech solutions. We also want to attract talented developers, data engineers, UX/UI designers, and other technical professionals to the music sector.",[747,754,755],{},"While there are job boards catering to non-technical roles, we'll be focusing on promoting technical job opportunities. Our goal is to bring in exceptional talent who can contribute to groundbreaking projects and innovations in music.",[747,757,758],{},"Here are some technical job openings with details (checked on 19.03.2024). Feel free to apply if you meet the requirements:",[747,760,761],{},[762,763,764],"strong",{},"Baton",[766,767,768,778,785,788,791],"ul",{},[769,770,771],"li",{},[772,773,777],"a",{"href":774,"rel":775},"https://www.linkedin.com/company/baton-media-inc/",[776],"nofollow","LinkedIn",[769,779,780],{},[772,781,784],{"href":782,"rel":783},"https://batonmedia.notion.site/Jobs-Baton-18cb36794bc7402f8589212a3b1e9234",[776],"Jobs",[769,786,787],{},"Mobile Engineer",[769,789,790],{},"Senior Backend Engineer",[769,792,793],{},"Fulstack Engineer\n‍",[747,795,796],{},[762,797,798],{},"Beatstars",[766,800,801,807,814],{},[769,802,803],{},[772,804,777],{"href":805,"rel":806},"https://www.linkedin.com/company/beatstars/",[776],[769,808,809],{},[772,810,813],{"href":811,"rel":812},"https://careers.beatstars.com/job?id=4341657006",[776],"Job",[769,815,816],{},"Back-end Engineer (Contractor) (LATAM, Remote)\n‍",[747,818,819],{},[762,820,821],{},"Believe",[766,823,824,830,836,839,842,845,848,851,854,857,860],{},[769,825,826],{},[772,827,777],{"href":828,"rel":829},"https://www.linkedin.com/company/believeglobal/",[776],[769,831,832],{},[772,833,784],{"href":834,"rel":835},"https://careers.believe.com/en/jobs/",[776],[769,837,838],{},"Senior Software Engineer (France, Paris)",[769,840,841],{},"Developpeur Frontend React JS (France, Paris)",[769,843,844],{},"Workplace Engineer (France, Paris)",[769,846,847],{},"Software Engineer PHP (France, Paris)",[769,849,850],{},"Senior Software Developer (France, Paris)",[769,852,853],{},"QA Engineer (France, Paris)",[769,855,856],{},"Scrum Master Junior (France, Paris)",[769,858,859],{},"Software Engineer API REST PHP Cloud (France, Paris)",[769,861,862],{},"Senior Data Engineer (France, Paris)\n‍",[747,864,865],{},[762,866,867],{},"FUGA",[766,869,870,876,882,885],{},[769,871,872],{},[772,873,777],{"href":874,"rel":875},"https://www.linkedin.com/company/fugamusic/",[776],[769,877,878],{},[772,879,784],{"href":880,"rel":881},"https://fuga.com/jobs/",[776],[769,883,884],{},"Full Stack Developer (United Kingdom)",[769,886,887],{},"Ruby Engineer (Netherlands)\n‍",[747,889,890],{},[762,891,892],{},"Muse Group",[766,894,895,901,908,911,914,917],{},[769,896,897],{},[772,898,777],{"href":899,"rel":900},"https://www.linkedin.com/company/muse/",[776],[769,902,903],{},[772,904,907],{"href":905,"rel":906},"https://www.mu.se/careers/",[776],"Careers",[769,909,910],{},"Data Analyst (Cyprus or remote)",[769,912,913],{},"Analytics Engineer (Cyprus or remote)",[769,915,916],{},"C++ developer (Cyprus or remote)",[769,918,919],{},"Senior Frontend Engineer (Cyprus or remote)\n‍",[747,921,922],{},[762,923,924],{},"FM LLC",[766,926,927,933,939],{},[769,928,929],{},[772,930,777],{"href":931,"rel":932},"https://www.linkedin.com/company/fm-co/",[776],[769,934,935],{},[772,936,907],{"href":937,"rel":938},"https://www.fm.co/careers",[776],[769,940,941],{},"Senior Software Engineer, Front End (Remote)\n‍",[747,943,944],{},[762,945,946],{},"Pixelynx",[766,948,949,956,959],{},[769,950,951],{},[772,952,955],{"href":953,"rel":954},"https://apply.workable.com/pixelynx/",[776],"Apply",[769,957,958],{},"Front-end Web Developer (Canada, Toronto or remote)",[769,960,961],{},"Backend and DevOps Engineer (Germany, Berlin)\n‍",[747,963,964],{},[762,965,966],{},"BMAT",[766,968,969,975,981],{},[769,970,971],{},[772,972,777],{"href":973,"rel":974},"https://www.linkedin.com/company/bmat/",[776],[769,976,977],{},[772,978,907],{"href":979,"rel":980},"https://www.bmat.com/careers/",[776],[769,982,983],{},"Software Python Engineer (Spain, Barcelona or Remote)\n‍",[747,985,986],{},[762,987,988],{},"Soundful",[766,990,991,997,1003,1006],{},[769,992,993],{},[772,994,777],{"href":995,"rel":996},"https://www.linkedin.com/company/soundful/",[776],[769,998,999],{},[772,1000,907],{"href":1001,"rel":1002},"https://soundful.com/en-us/careers/",[776],[769,1004,1005],{},"Senior Software Engineer (United States)",[769,1007,1008],{},"Data Scientist (United States)\n‍",[747,1010,1011],{},[762,1012,1013],{},"Luminate",[766,1015,1016,1022,1028,1031,1034,1037,1040,1043,1046,1049,1052],{},[769,1017,1018],{},[772,1019,777],{"href":1020,"rel":1021},"https://www.linkedin.com/company/luminatedata/",[776],[769,1023,1024],{},[772,1025,907],{"href":1026,"rel":1027},"https://luminatedata.com/careers/",[776],[769,1029,1030],{},"Lead Data Scientist (United States, New York)",[769,1032,1033],{},"Machine Learning Engineer (United States, New York)",[769,1035,1036],{},"Machine Learning Engineer (France or Remote)",[769,1038,1039],{},"Senior Data Scientist (United States, New York)",[769,1041,1042],{},"Senior Software Engineer (UI) (United States, Los Angeles)",[769,1044,1045],{},"Software Engineer (United States, Los Angeles or remote)",[769,1047,1048],{},"Senior Technical Product Manager (United States, Los Angeles)",[769,1050,1051],{},"Senior UI/UX Designer (United States, Los Angeles)",[769,1053,1054],{},"Senior UI Designer (United States, Los Angeles)",[747,1056,1057],{},"‍",{"title":1059,"searchDepth":1060,"depth":1060,"links":1061},"",2,[],"software-development","2024-03-19T00:00:00.000Z","When we decided to go all-in on the music industry, we knew from the start, that Bravelab team's support alone wouldn't be enough to drive the industry forward.","md",true,{"src":1068},"/images/blog/musictechlab_blog_technical-job-opportunities-in-the-music-industry.webp",{"enabled":1066,"items":1070},[1071,1074,1077],{"text":1072,"icon":1073},"10+ music industry companies had open technical roles in March 2024 across 6+ countries.","i-lucide-music",{"text":1075,"icon":1076},"Roles span frontend, backend, data science, ML engineering, and UX/UI design.","i-lucide-code",{"text":1078,"icon":1079},"Companies like Believe, Luminate, and Muse Group actively recruit remote technical talent.","i-lucide-globe",{},{"title":642,"description":1064},[1083,1084],"newsletter","musictech","RJTkfe8xW9nYaMM9lpiowvLv_RiujasJOE-taIu-GgM",[1087,1089],{"title":638,"path":639,"stem":640,"description":1088,"children":-1},"We open-sourced an MCP server that brings SignNow e-signatures into Claude Code. Upload documents, send signing invites, track status, and download signed PDFs — all without leaving your terminal.",{"title":646,"path":647,"stem":648,"description":1090,"children":-1},"Developing a custom solution for the communication platform in order to tighten the relationship between team members.",[1092,1999,2481,3091],{"id":1093,"title":606,"authors":1094,"badge":742,"body":1100,"category":1062,"client":742,"date":1978,"description":1979,"extension":1065,"faq":742,"featured":69,"featuredOrder":742,"hidden":69,"image":1980,"keyTakeaways":1982,"meta":1994,"navigation":1066,"path":607,"seo":1995,"status":742,"stem":608,"tags":1996,"teaser":742,"__hash__":1998,"score":1216},"posts/blog/software-development/musicxml-standard-for-music-notation-and-education.md",[1095],{"name":1096,"to":1097,"avatar":1098},"Mariusz Smenżyk","https://www.linkedin.com/in/mariusz-smenzyk/",{"src":1099},"/images/people/mariusz-smenzyk2.webp",{"type":744,"value":1101,"toc":1952},[1102,1107,1110,1113,1117,1120,1177,1180,1313,1317,1322,1325,1329,1332,1336,1339,1343,1346,1350,1354,1357,1371,1375,1378,1382,1385,1389,1392,1406,1410,1414,1417,1620,1624,1627,1742,1746,1749,1753,1843,1847,1850,1876,1880,1883,1897,1901,1904,1907,1911,1948],[1103,1104,1106],"h2",{"id":1105},"what-is-musicxml","What is MusicXML?",[747,1108,1109],{},"MusicXML is an open standard for exchanging digital sheet music. It represents Western musical notation in XML format. Created by Recordare in 2004, it's now maintained by the W3C Music Notation Community Group and has become the universal language for score exchange.",[747,1111,1112],{},"Unlike proprietary Finale or Sibelius files, MusicXML is open and well-documented. Any software vendor can implement support, making cross-application data exchange straightforward.",[1103,1114,1116],{"id":1115},"musicxml-file-structure","MusicXML File Structure",[747,1118,1119],{},"A MusicXML file consists of a hierarchical structure of XML elements describing all aspects of a musical score:",[766,1121,1122,1137,1145,1153,1161,1169],{},[769,1123,1124,1130,1131,1136],{},[762,1125,1126],{},[1127,1128,1129],"code",{},"\u003Cscore-partwise>"," or ",[762,1132,1133],{},[1127,1134,1135],{},"\u003Cscore-timewise>"," - the root element determining how data is organized (by part or by measure)",[769,1138,1139,1144],{},[762,1140,1141],{},[1127,1142,1143],{},"\u003Cpart-list>"," - list of all instrumental parts in the piece",[769,1146,1147,1152],{},[762,1148,1149],{},[1127,1150,1151],{},"\u003Cpart>"," - a single instrumental part",[769,1154,1155,1160],{},[762,1156,1157],{},[1127,1158,1159],{},"\u003Cmeasure>"," - a musical measure containing notes and other elements",[769,1162,1163,1168],{},[762,1164,1165],{},[1127,1166,1167],{},"\u003Cnote>"," - a single note with attributes such as pitch, rhythmic value, and articulation",[769,1170,1171,1176],{},[762,1172,1173],{},[1127,1174,1175],{},"\u003Cattributes>"," - time signature, key signature, clef, and other musical attributes",[747,1178,1179],{},"Example structure of a simple note in MusicXML:",[1181,1182,1186],"pre",{"className":1183,"code":1184,"language":1185,"meta":1059,"style":1059},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cnote>\n  \u003Cpitch>\n    \u003Cstep>C\u003C/step>\n    \u003Coctave>4\u003C/octave>\n  \u003C/pitch>\n  \u003Cduration>1\u003C/duration>\n  \u003Ctype>quarter\u003C/type>\n\u003C/note>\n","xml",[1127,1187,1188,1204,1214,1237,1256,1266,1285,1304],{"__ignoreMap":1059},[1189,1190,1193,1197,1201],"span",{"class":1191,"line":1192},"line",1,[1189,1194,1196],{"class":1195},"sMK4o","\u003C",[1189,1198,1200],{"class":1199},"swJcz","note",[1189,1202,1203],{"class":1195},">\n",[1189,1205,1206,1209,1212],{"class":1191,"line":1060},[1189,1207,1208],{"class":1195},"  \u003C",[1189,1210,1211],{"class":1199},"pitch",[1189,1213,1203],{"class":1195},[1189,1215,1217,1220,1223,1226,1230,1233,1235],{"class":1191,"line":1216},3,[1189,1218,1219],{"class":1195},"    \u003C",[1189,1221,1222],{"class":1199},"step",[1189,1224,1225],{"class":1195},">",[1189,1227,1229],{"class":1228},"sTEyZ","C",[1189,1231,1232],{"class":1195},"\u003C/",[1189,1234,1222],{"class":1199},[1189,1236,1203],{"class":1195},[1189,1238,1240,1242,1245,1247,1250,1252,1254],{"class":1191,"line":1239},4,[1189,1241,1219],{"class":1195},[1189,1243,1244],{"class":1199},"octave",[1189,1246,1225],{"class":1195},[1189,1248,1249],{"class":1228},"4",[1189,1251,1232],{"class":1195},[1189,1253,1244],{"class":1199},[1189,1255,1203],{"class":1195},[1189,1257,1259,1262,1264],{"class":1191,"line":1258},5,[1189,1260,1261],{"class":1195},"  \u003C/",[1189,1263,1211],{"class":1199},[1189,1265,1203],{"class":1195},[1189,1267,1269,1271,1274,1276,1279,1281,1283],{"class":1191,"line":1268},6,[1189,1270,1208],{"class":1195},[1189,1272,1273],{"class":1199},"duration",[1189,1275,1225],{"class":1195},[1189,1277,1278],{"class":1228},"1",[1189,1280,1232],{"class":1195},[1189,1282,1273],{"class":1199},[1189,1284,1203],{"class":1195},[1189,1286,1288,1290,1293,1295,1298,1300,1302],{"class":1191,"line":1287},7,[1189,1289,1208],{"class":1195},[1189,1291,1292],{"class":1199},"type",[1189,1294,1225],{"class":1195},[1189,1296,1297],{"class":1228},"quarter",[1189,1299,1232],{"class":1195},[1189,1301,1292],{"class":1199},[1189,1303,1203],{"class":1195},[1189,1305,1307,1309,1311],{"class":1191,"line":1306},8,[1189,1308,1232],{"class":1195},[1189,1310,1200],{"class":1199},[1189,1312,1203],{"class":1195},[1103,1314,1316],{"id":1315},"applications-in-the-music-industry","Applications in the Music Industry",[1318,1319,1321],"h3",{"id":1320},"score-exchange-between-applications","Score Exchange Between Applications",[747,1323,1324],{},"The primary use of MusicXML is transferring scores between different music notation applications. A musician working in Finale can export their composition to MusicXML and send it to a collaborator using Sibelius or MuseScore. This interoperability is crucial in professional music production, where different teams often use different tools.",[1318,1326,1328],{"id":1327},"archiving-and-digitization","Archiving and Digitization",[747,1330,1331],{},"Music libraries and archives increasingly use MusicXML for digitizing historical scores. This format allows storage of not only the visual representation of notes but also semantic information about the piece's structure, enabling advanced searching and analysis.",[1318,1333,1335],{"id":1334},"automatic-arrangement-and-transposition","Automatic Arrangement and Transposition",[747,1337,1338],{},"Programs using MusicXML can automatically transpose pieces to different keys or generate arrangements for various instrumental ensembles. The semantic structure of the format makes such operations much simpler than with graphic formats.",[1318,1340,1342],{"id":1341},"integration-with-daws-and-synthesizers","Integration with DAWs and Synthesizers",[747,1344,1345],{},"Some digital audio workstations (DAWs) support MusicXML import, allowing conversion of traditional notation to MIDI tracks. This is particularly useful for composers combining traditional notation with electronic production.",[1103,1347,1349],{"id":1348},"musicxml-in-music-education","MusicXML in Music Education",[1318,1351,1353],{"id":1352},"interactive-educational-materials","Interactive Educational Materials",[747,1355,1356],{},"Music educators use MusicXML to create interactive exercises. Students can:",[766,1358,1359,1362,1365,1368],{},[769,1360,1361],{},"Play back scores at different tempos",[769,1363,1364],{},"Listen to selected parts separately",[769,1366,1367],{},"Follow the notation during playback",[769,1369,1370],{},"Modify and experiment with musical material",[1318,1372,1374],{"id":1373},"instrument-learning-applications","Instrument Learning Applications",[747,1376,1377],{},"Many educational applications import MusicXML files to present students with notation synchronized to audio backing. Applications like SmartMusic, Yousician, and Piano Marvel use this format to deliver interactive lessons.",[1318,1379,1381],{"id":1380},"accessibility-for-blind-musicians","Accessibility for Blind Musicians",[747,1383,1384],{},"MusicXML plays an important role in creating accessible musical materials. The format can be converted to music braille notation, enabling blind and visually impaired people to access musical scores. Projects like FreeDots and Music21 offer tools for such conversion.",[1318,1386,1388],{"id":1387},"music-analysis-and-theory","Music Analysis and Theory",[747,1390,1391],{},"Musicology students use MusicXML in combination with programming libraries (e.g., music21 in Python) for:",[766,1393,1394,1397,1400,1403],{},[769,1395,1396],{},"Harmonic analysis of compositions",[769,1398,1399],{},"Studying statistical patterns in compositions",[769,1401,1402],{},"Comparing different versions of the same piece",[769,1404,1405],{},"Visualizing musical structures",[1103,1407,1409],{"id":1408},"programming-with-musicxml","Programming with MusicXML",[1318,1411,1413],{"id":1412},"python-and-the-music21-library","Python and the music21 Library",[747,1415,1416],{},"The most popular tool for working with MusicXML in Python is the music21 library developed by MIT. It enables:",[1181,1418,1422],{"className":1419,"code":1420,"language":1421,"meta":1059,"style":1059},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from music21 import converter, analysis\n\n# Load MusicXML file\nscore = converter.parse('composition.musicxml')\n\n# Key analysis\nkey = score.analyze('key')\nprint(f\"Key: {key}\")\n\n# Transpose up a minor third\ntransposed = score.transpose('m3')\ntransposed.write('musicxml', 'composition_transposed.musicxml')\n","python",[1127,1423,1424,1445,1450,1456,1488,1492,1497,1523,1551,1556,1562,1588],{"__ignoreMap":1059},[1189,1425,1426,1430,1433,1436,1439,1442],{"class":1191,"line":1192},[1189,1427,1429],{"class":1428},"s7zQu","from",[1189,1431,1432],{"class":1228}," music21 ",[1189,1434,1435],{"class":1428},"import",[1189,1437,1438],{"class":1228}," converter",[1189,1440,1441],{"class":1195},",",[1189,1443,1444],{"class":1228}," analysis\n",[1189,1446,1447],{"class":1191,"line":1060},[1189,1448,1449],{"emptyLinePlaceholder":1066},"\n",[1189,1451,1452],{"class":1191,"line":1216},[1189,1453,1455],{"class":1454},"sHwdD","# Load MusicXML file\n",[1189,1457,1458,1461,1464,1466,1469,1473,1476,1479,1483,1485],{"class":1191,"line":1239},[1189,1459,1460],{"class":1228},"score ",[1189,1462,1463],{"class":1195},"=",[1189,1465,1438],{"class":1228},[1189,1467,1468],{"class":1195},".",[1189,1470,1472],{"class":1471},"s2Zo4","parse",[1189,1474,1475],{"class":1195},"(",[1189,1477,1478],{"class":1195},"'",[1189,1480,1482],{"class":1481},"sfazB","composition.musicxml",[1189,1484,1478],{"class":1195},[1189,1486,1487],{"class":1195},")\n",[1189,1489,1490],{"class":1191,"line":1258},[1189,1491,1449],{"emptyLinePlaceholder":1066},[1189,1493,1494],{"class":1191,"line":1268},[1189,1495,1496],{"class":1454},"# Key analysis\n",[1189,1498,1499,1502,1504,1507,1509,1512,1514,1516,1519,1521],{"class":1191,"line":1287},[1189,1500,1501],{"class":1228},"key ",[1189,1503,1463],{"class":1195},[1189,1505,1506],{"class":1228}," score",[1189,1508,1468],{"class":1195},[1189,1510,1511],{"class":1471},"analyze",[1189,1513,1475],{"class":1195},[1189,1515,1478],{"class":1195},[1189,1517,1518],{"class":1481},"key",[1189,1520,1478],{"class":1195},[1189,1522,1487],{"class":1195},[1189,1524,1525,1528,1530,1534,1537,1541,1543,1546,1549],{"class":1191,"line":1306},[1189,1526,1527],{"class":1471},"print",[1189,1529,1475],{"class":1195},[1189,1531,1533],{"class":1532},"spNyl","f",[1189,1535,1536],{"class":1481},"\"Key: ",[1189,1538,1540],{"class":1539},"sbssI","{",[1189,1542,1518],{"class":1471},[1189,1544,1545],{"class":1539},"}",[1189,1547,1548],{"class":1481},"\"",[1189,1550,1487],{"class":1195},[1189,1552,1554],{"class":1191,"line":1553},9,[1189,1555,1449],{"emptyLinePlaceholder":1066},[1189,1557,1559],{"class":1191,"line":1558},10,[1189,1560,1561],{"class":1454},"# Transpose up a minor third\n",[1189,1563,1565,1568,1570,1572,1574,1577,1579,1581,1584,1586],{"class":1191,"line":1564},11,[1189,1566,1567],{"class":1228},"transposed ",[1189,1569,1463],{"class":1195},[1189,1571,1506],{"class":1228},[1189,1573,1468],{"class":1195},[1189,1575,1576],{"class":1471},"transpose",[1189,1578,1475],{"class":1195},[1189,1580,1478],{"class":1195},[1189,1582,1583],{"class":1481},"m3",[1189,1585,1478],{"class":1195},[1189,1587,1487],{"class":1195},[1189,1589,1591,1594,1596,1599,1601,1603,1606,1608,1610,1613,1616,1618],{"class":1191,"line":1590},12,[1189,1592,1593],{"class":1228},"transposed",[1189,1595,1468],{"class":1195},[1189,1597,1598],{"class":1471},"write",[1189,1600,1475],{"class":1195},[1189,1602,1478],{"class":1195},[1189,1604,1605],{"class":1481},"musicxml",[1189,1607,1478],{"class":1195},[1189,1609,1441],{"class":1195},[1189,1611,1612],{"class":1195}," '",[1189,1614,1615],{"class":1481},"composition_transposed.musicxml",[1189,1617,1478],{"class":1195},[1189,1619,1487],{"class":1195},[1318,1621,1623],{"id":1622},"javascript-and-the-opensheetmusicdisplay-library","JavaScript and the opensheetmusicdisplay Library",[747,1625,1626],{},"In the web environment, the opensheetmusicdisplay library is popular for rendering MusicXML files directly in the browser:",[1181,1628,1632],{"className":1629,"code":1630,"language":1631,"meta":1059,"style":1059},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { OpenSheetMusicDisplay } from 'opensheetmusicdisplay';\n\nconst osmd = new OpenSheetMusicDisplay(\"container\");\nosmd.load(\"composition.musicxml\")\n  .then(() => osmd.render());\n","javascript",[1127,1633,1634,1660,1664,1693,1713],{"__ignoreMap":1059},[1189,1635,1636,1638,1641,1644,1647,1650,1652,1655,1657],{"class":1191,"line":1192},[1189,1637,1435],{"class":1428},[1189,1639,1640],{"class":1195}," {",[1189,1642,1643],{"class":1228}," OpenSheetMusicDisplay",[1189,1645,1646],{"class":1195}," }",[1189,1648,1649],{"class":1428}," from",[1189,1651,1612],{"class":1195},[1189,1653,1654],{"class":1481},"opensheetmusicdisplay",[1189,1656,1478],{"class":1195},[1189,1658,1659],{"class":1195},";\n",[1189,1661,1662],{"class":1191,"line":1060},[1189,1663,1449],{"emptyLinePlaceholder":1066},[1189,1665,1666,1669,1672,1674,1677,1679,1681,1683,1686,1688,1691],{"class":1191,"line":1216},[1189,1667,1668],{"class":1532},"const",[1189,1670,1671],{"class":1228}," osmd ",[1189,1673,1463],{"class":1195},[1189,1675,1676],{"class":1195}," new",[1189,1678,1643],{"class":1471},[1189,1680,1475],{"class":1228},[1189,1682,1548],{"class":1195},[1189,1684,1685],{"class":1481},"container",[1189,1687,1548],{"class":1195},[1189,1689,1690],{"class":1228},")",[1189,1692,1659],{"class":1195},[1189,1694,1695,1698,1700,1703,1705,1707,1709,1711],{"class":1191,"line":1239},[1189,1696,1697],{"class":1228},"osmd",[1189,1699,1468],{"class":1195},[1189,1701,1702],{"class":1471},"load",[1189,1704,1475],{"class":1228},[1189,1706,1548],{"class":1195},[1189,1708,1482],{"class":1481},[1189,1710,1548],{"class":1195},[1189,1712,1487],{"class":1228},[1189,1714,1715,1718,1721,1723,1726,1729,1732,1734,1737,1740],{"class":1191,"line":1258},[1189,1716,1717],{"class":1195},"  .",[1189,1719,1720],{"class":1471},"then",[1189,1722,1475],{"class":1228},[1189,1724,1725],{"class":1195},"()",[1189,1727,1728],{"class":1532}," =>",[1189,1730,1731],{"class":1228}," osmd",[1189,1733,1468],{"class":1195},[1189,1735,1736],{"class":1471},"render",[1189,1738,1739],{"class":1228},"())",[1189,1741,1659],{"class":1195},[1318,1743,1745],{"id":1744},"xml-validation-and-parsing","XML Validation and Parsing",[747,1747,1748],{},"As an XML-based format, MusicXML can be processed by standard XML libraries in any programming language. Official XSD schemas allow validation of file correctness.",[1103,1750,1752],{"id":1751},"comparison-with-other-formats","Comparison with Other Formats",[1754,1755,1756,1775],"table",{},[1757,1758,1759],"thead",{},[1760,1761,1762,1766,1769,1772],"tr",{},[1763,1764,1765],"th",{},"Format",[1763,1767,1768],{},"Type",[1763,1770,1771],{},"Openness",[1763,1773,1774],{},"Primary Use",[1776,1777,1778,1793,1805,1818,1831],"tbody",{},[1760,1779,1780,1784,1787,1790],{},[1781,1782,1783],"td",{},"MusicXML",[1781,1785,1786],{},"XML",[1781,1788,1789],{},"Open",[1781,1791,1792],{},"Score exchange",[1760,1794,1795,1798,1800,1802],{},[1781,1796,1797],{},"MEI",[1781,1799,1786],{},[1781,1801,1789],{},[1781,1803,1804],{},"Musicology, archiving",[1760,1806,1807,1810,1813,1815],{},[1781,1808,1809],{},"MIDI",[1781,1811,1812],{},"Binary",[1781,1814,1789],{},[1781,1816,1817],{},"Performance data",[1760,1819,1820,1823,1825,1828],{},[1781,1821,1822],{},"Finale (.musx)",[1781,1824,1812],{},[1781,1826,1827],{},"Closed",[1781,1829,1830],{},"Editing in Finale",[1760,1832,1833,1836,1838,1840],{},[1781,1834,1835],{},"Sibelius (.sib)",[1781,1837,1812],{},[1781,1839,1827],{},[1781,1841,1842],{},"Editing in Sibelius",[1103,1844,1846],{"id":1845},"musicxml-limitations","MusicXML Limitations",[747,1848,1849],{},"Despite its many advantages, MusicXML has some limitations:",[766,1851,1852,1858,1864,1870],{},[769,1853,1854,1857],{},[762,1855,1856],{},"File size"," - XML files are significantly larger than binary formats",[769,1859,1860,1863],{},[762,1861,1862],{},"Complexity"," - the full specification is extensive and complicated",[769,1865,1866,1869],{},[762,1867,1868],{},"Formatting loss"," - specific visual elements may be lost when converting between programs",[769,1871,1872,1875],{},[762,1873,1874],{},"No sound standardization"," - the format describes notation, not sound (unlike MIDI)",[1103,1877,1879],{"id":1878},"the-future-of-musicxml","The Future of MusicXML",[747,1881,1882],{},"The W3C Music Notation Community Group continues to develop the standard. Version 4.0 introduces, among other things:",[766,1884,1885,1888,1891,1894],{},[769,1886,1887],{},"Better support for contemporary and experimental notation",[769,1889,1890],{},"Extended capabilities for describing dynamics and articulation",[769,1892,1893],{},"Improvements in representing non-metric music",[769,1895,1896],{},"Integration with the SMuFL (Standard Music Font Layout) format",[1103,1898,1900],{"id":1899},"summary","Summary",[747,1902,1903],{},"MusicXML forms the foundation of interoperability in digital music notation. For musicians, educators, and developers, it is an invaluable tool enabling the exchange, analysis, and processing of musical scores. As music education digitization grows and music applications develop, the importance of this standard will only increase.",[747,1905,1906],{},"For technical teams working on music projects, knowledge of MusicXML is a key competency for building solutions compatible with the broad ecosystem of music tools.",[1103,1908,1910],{"id":1909},"useful-resources","Useful Resources",[766,1912,1913,1920,1927,1934,1941],{},[769,1914,1915],{},[772,1916,1919],{"href":1917,"rel":1918},"https://www.musicxml.com/",[776],"Official MusicXML Website",[769,1921,1922],{},[772,1923,1926],{"href":1924,"rel":1925},"https://www.w3.org/community/music-notation/",[776],"W3C Music Notation Community Group",[769,1928,1929],{},[772,1930,1933],{"href":1931,"rel":1932},"https://web.mit.edu/music21/",[776],"music21 Documentation",[769,1935,1936],{},[772,1937,1940],{"href":1938,"rel":1939},"https://opensheetmusicdisplay.org/",[776],"OpenSheetMusicDisplay",[769,1942,1943],{},[772,1944,1947],{"href":1945,"rel":1946},"https://www.w3.org/2021/06/musicxml40/",[776],"MusicXML 4.0 Specification",[1949,1950,1951],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1059,"searchDepth":1060,"depth":1060,"links":1953},[1954,1955,1956,1962,1968,1973,1974,1975,1976,1977],{"id":1105,"depth":1060,"text":1106},{"id":1115,"depth":1060,"text":1116},{"id":1315,"depth":1060,"text":1316,"children":1957},[1958,1959,1960,1961],{"id":1320,"depth":1216,"text":1321},{"id":1327,"depth":1216,"text":1328},{"id":1334,"depth":1216,"text":1335},{"id":1341,"depth":1216,"text":1342},{"id":1348,"depth":1060,"text":1349,"children":1963},[1964,1965,1966,1967],{"id":1352,"depth":1216,"text":1353},{"id":1373,"depth":1216,"text":1374},{"id":1380,"depth":1216,"text":1381},{"id":1387,"depth":1216,"text":1388},{"id":1408,"depth":1060,"text":1409,"children":1969},[1970,1971,1972],{"id":1412,"depth":1216,"text":1413},{"id":1622,"depth":1216,"text":1623},{"id":1744,"depth":1216,"text":1745},{"id":1751,"depth":1060,"text":1752},{"id":1845,"depth":1060,"text":1846},{"id":1878,"depth":1060,"text":1879},{"id":1899,"depth":1060,"text":1900},{"id":1909,"depth":1060,"text":1910},"2026-01-15T00:00:00.000Z","What is MusicXML, how does it work, and what are its applications in music and education? A guide to the open standard for sheet music exchange.",{"src":1981},"/images/blog/musictechlab_blog_musicxml-standard.webp",{"enabled":1066,"items":1983},[1984,1986,1988,1991],{"text":1985,"icon":1073},"MusicXML is the universal open standard for exchanging digital sheet music across applications.",{"text":1987,"icon":1076},"Python's music21 library enables key analysis, transposition, and statistical study of MusicXML files.",{"text":1989,"icon":1990},"MusicXML can be converted to music braille, making scores accessible to blind musicians.","i-lucide-users",{"text":1992,"icon":1993},"Version 4.0 adds better support for contemporary notation and SMuFL font integration.","i-lucide-layers",{},{"title":606,"description":1979},[1084,1997],"music-data","RMUBgJBMMiRalXu39PcOF_a2vQZmUD88k-VCZ_gaBUQ",{"id":2000,"title":458,"authors":2001,"badge":2004,"body":2007,"category":1062,"client":742,"date":2460,"description":2461,"extension":1065,"faq":742,"featured":69,"featuredOrder":742,"hidden":69,"image":2462,"keyTakeaways":2464,"meta":2477,"navigation":1066,"path":459,"seo":2478,"status":742,"stem":460,"tags":2479,"teaser":742,"__hash__":2480,"score":1216},"posts/blog/software-development/did-you-know-musictech-facts-part-2.md",[2002],{"name":1096,"to":1097,"avatar":2003},{"src":1099},{"label":2005,"color":2006},"Series","#7C3AED",{"type":744,"value":2008,"toc":2447},[2009,2012,2015,2019,2025,2028,2031,2037,2039,2043,2048,2051,2057,2059,2063,2068,2094,2097,2099,2103,2108,2111,2137,2140,2142,2146,2151,2154,2157,2159,2163,2168,2174,2188,2191,2193,2197,2202,2205,2211,2213,2217,2222,2225,2239,2242,2244,2248,2253,2256,2261,2275,2277,2281,2286,2303,2306,2413,2415,2419,2422,2431,2433,2444],[747,2010,2011],{},"Welcome to \"Did You Know?\" - MusicTech Edition! A series where we share fascinating facts, surprising innovations, and lesser-known aspects of music technology. From industry standards to accessibility breakthroughs, these are the things that make music technology truly remarkable.",[2013,2014],"hr",{},[1103,2016,2018],{"id":2017},"_1-musicxml-makes-sheet-music-accessible-to-blind-musicians","1. MusicXML Makes Sheet Music Accessible to Blind Musicians",[747,2020,2021,2024],{},[762,2022,2023],{},"Did you know?"," MusicXML, the universal standard for digital sheet music, can be converted to music braille notation, enabling blind and visually impaired musicians to read musical scores independently.",[747,2026,2027],{},"Projects like FreeDots and the music21 Python library provide tools for this conversion. A sighted arranger can create a score in Finale or Sibelius, export it to MusicXML, and a blind musician can convert it to braille notation within minutes.",[747,2029,2030],{},"This wasn't possible before digital standards - blind musicians had to rely on specialized transcribers who would manually convert printed scores to braille, a process that could take weeks for a single symphony.",[747,2032,2033,2036],{},[762,2034,2035],{},"Impact:"," Over 2 million blind and visually impaired people worldwide can now access the same musical scores as sighted musicians, opening doors to music education and professional performance that were previously closed.",[2013,2038],{},[1103,2040,2042],{"id":2041},"_2-midi-is-over-40-years-old-and-still-industry-standard","2. MIDI Is Over 40 Years Old and Still Industry Standard",[747,2044,2045,2047],{},[762,2046,2023],{}," The MIDI (Musical Instrument Digital Interface) specification was released in 1983 and remains virtually unchanged as the backbone of music production.",[747,2049,2050],{},"Created through unprecedented cooperation between competing companies (Roland, Sequential Circuits, Oberheim, and others), MIDI was designed to let synthesizers from different manufacturers communicate. Four decades later, it still connects instruments, controllers, and software worldwide.",[747,2052,2053,2056],{},[762,2054,2055],{},"Fun fact:"," MIDI files are incredibly small - Beethoven's entire 9th Symphony as MIDI is about 100KB. The same recording as audio would be 700MB.",[2013,2058],{},[1103,2060,2062],{"id":2061},"_3-spotify-analyzes-every-songs-danceability","3. Spotify Analyzes Every Song's \"Danceability\"",[747,2064,2065,2067],{},[762,2066,2023],{}," Spotify calculates audio features for every single track in its library, including:",[766,2069,2070,2076,2082,2088],{},[769,2071,2072,2075],{},[762,2073,2074],{},"Danceability"," (0.0 to 1.0) - How suitable for dancing based on tempo, rhythm stability, and beat strength",[769,2077,2078,2081],{},[762,2079,2080],{},"Valence"," (0.0 to 1.0) - Musical positiveness (high valence = happy, cheerful)",[769,2083,2084,2087],{},[762,2085,2086],{},"Energy"," (0.0 to 1.0) - Perceptual intensity and activity",[769,2089,2090,2093],{},[762,2091,2092],{},"Speechiness"," (0.0 to 1.0) - Presence of spoken words",[747,2095,2096],{},"These features are publicly available through Spotify's Web API, enabling developers to create playlists based on mood, energy levels, or even heart rate from fitness trackers.",[2013,2098],{},[1103,2100,2102],{"id":2101},"_4-the-music-industry-has-its-own-language-for-data-exchange","4. The Music Industry Has Its Own \"Language\" for Data Exchange",[747,2104,2105,2107],{},[762,2106,2023],{}," DDEX (Digital Data Exchange) is a consortium that creates standards for how music companies communicate. When you release a song on Spotify, Apple Music, or any major platform, DDEX XML files carry the metadata.",[747,2109,2110],{},"There are different DDEX standards for different purposes:",[766,2112,2113,2119,2125,2131],{},[769,2114,2115,2118],{},[762,2116,2117],{},"ERN"," (Electronic Release Notification) - For releasing new music",[769,2120,2121,2124],{},[762,2122,2123],{},"DSR"," (Digital Sales Reporting) - For royalty statements",[769,2126,2127,2130],{},[762,2128,2129],{},"RIN"," (Recording Information Notification) - For studio session data",[769,2132,2133,2136],{},[762,2134,2135],{},"MLC"," (Musical Works Licensing) - For publishing rights",[747,2138,2139],{},"Without DDEX, every platform would speak a different \"language,\" making global music distribution a nightmare.",[2013,2141],{},[1103,2143,2145],{"id":2144},"_5-your-favorite-songs-key-was-probably-detected-by-ai","5. Your Favorite Song's Key Was Probably Detected by AI",[747,2147,2148,2150],{},[762,2149,2023],{}," Services like Beatport, rekordbox, and Mixed In Key use machine learning algorithms to detect the musical key of songs with over 95% accuracy.",[747,2152,2153],{},"This technology analyzes the audio's frequency spectrum, identifies the dominant notes, and matches them against key profiles. DJs use this to create harmonically compatible playlists - mixing songs in related keys creates smoother transitions.",[747,2155,2156],{},"The algorithms have become so accurate that they often outperform trained musicians in blind tests, especially for songs with ambiguous tonality.",[2013,2158],{},[1103,2160,2162],{"id":2161},"_6-isrc-codes-have-tracked-every-recording-since-1986","6. ISRC Codes Have Tracked Every Recording Since 1986",[747,2164,2165,2167],{},[762,2166,2023],{}," Every commercially released recording has a unique 12-character identifier called an ISRC (International Standard Recording Code).",[747,2169,2170,2171],{},"Structure: ",[1127,2172,2173],{},"CC-XXX-YY-NNNNN",[766,2175,2176,2179,2182,2185],{},[769,2177,2178],{},"CC = Country code",[769,2180,2181],{},"XXX = Registrant code",[769,2183,2184],{},"YY = Year of reference",[769,2186,2187],{},"NNNNN = Designation code",[747,2189,2190],{},"Over 100 million ISRCs have been assigned. When you stream a song, the ISRC is how streaming platforms identify exactly which recording to pay royalties for - even if there are 50 different versions of \"Happy Birthday.\"",[2013,2192],{},[1103,2194,2196],{"id":2195},"_7-musescore-has-more-users-than-finale-and-sibelius-combined","7. MuseScore Has More Users Than Finale and Sibelius Combined",[747,2198,2199,2201],{},[762,2200,2023],{}," MuseScore, the free and open-source notation software, has over 10 million users worldwide - more than the commercial giants Finale and Sibelius combined.",[747,2203,2204],{},"The software is entirely community-driven, with contributions from musicians and developers globally. Its companion site, musescore.com, hosts millions of user-created scores that can be viewed, played back, and downloaded.",[747,2206,2207,2210],{},[762,2208,2209],{},"Why it matters:"," Professional music notation software costs $300-600. MuseScore democratizes music education by giving everyone access to publication-quality engraving tools for free.",[2013,2212],{},[1103,2214,2216],{"id":2215},"_8-the-loudness-wars-are-officially-over-thanks-to-standards","8. The Loudness Wars Are Officially Over (Thanks to Standards)",[747,2218,2219,2221],{},[762,2220,2023],{}," Streaming platforms now normalize audio loudness, effectively ending the \"loudness wars\" where albums were mastered as loud as possible to stand out on radio.",[747,2223,2224],{},"All major platforms use LUFS (Loudness Units Full Scale) normalization:",[766,2226,2227,2230,2233,2236],{},[769,2228,2229],{},"Spotify: -14 LUFS",[769,2231,2232],{},"Apple Music: -16 LUFS",[769,2234,2235],{},"YouTube: -14 LUFS",[769,2237,2238],{},"Amazon Music: -14 LUFS",[747,2240,2241],{},"If you master a track at -8 LUFS (extremely loud), the platform will turn it down. If you master at -18 LUFS (very dynamic), it gets turned up. The result? Dynamic, well-mastered music no longer loses to \"loud\" masters.",[2013,2243],{},[1103,2245,2247],{"id":2246},"_9-ai-can-now-separate-any-song-into-individual-stems","9. AI Can Now Separate Any Song Into Individual Stems",[747,2249,2250,2252],{},[762,2251,2023],{}," Tools like LALAL.AI, Demucs, and Spleeter can separate a mixed song into individual stems (vocals, drums, bass, other) with remarkable quality.",[747,2254,2255],{},"This technology uses deep neural networks trained on thousands of songs where the original stems were available. The AI learned to recognize which frequencies belong to which instruments and can now \"unmix\" songs it has never heard before.",[747,2257,2258],{},[762,2259,2260],{},"Use cases:",[766,2262,2263,2266,2269,2272],{},[769,2264,2265],{},"DJs creating acapellas for remixes",[769,2267,2268],{},"Musicians learning parts from recordings",[769,2270,2271],{},"Remastering old recordings where original tapes are lost",[769,2273,2274],{},"Karaoke without the cheesy MIDI backing tracks",[2013,2276],{},[1103,2278,2280],{"id":2279},"_10-web-audio-api-turns-every-browser-into-a-synthesizer","10. Web Audio API Turns Every Browser Into a Synthesizer",[747,2282,2283,2285],{},[762,2284,2023],{}," Modern web browsers include a complete audio synthesis engine accessible through JavaScript. The Web Audio API can:",[766,2287,2288,2291,2294,2297,2300],{},[769,2289,2290],{},"Generate waveforms (sine, square, sawtooth, triangle)",[769,2292,2293],{},"Apply filters, compression, and effects",[769,2295,2296],{},"Analyze audio in real-time (FFT, waveform visualization)",[769,2298,2299],{},"Create spatial 3D audio",[769,2301,2302],{},"Process microphone input",[747,2304,2305],{},"No plugins needed. Tools like Tone.js wrap this API to create full-featured DAWs that run entirely in the browser. You can build instruments, effects, and even complete music production tools using just JavaScript.",[1181,2307,2309],{"className":1629,"code":2308,"language":1631,"meta":1059,"style":1059},"// Create a simple synthesizer in 5 lines\nconst ctx = new AudioContext();\nconst osc = ctx.createOscillator();\nosc.frequency.value = 440; // A4\nosc.connect(ctx.destination);\nosc.start();\n",[1127,2310,2311,2316,2334,2355,2381,2400],{"__ignoreMap":1059},[1189,2312,2313],{"class":1191,"line":1192},[1189,2314,2315],{"class":1454},"// Create a simple synthesizer in 5 lines\n",[1189,2317,2318,2320,2323,2325,2327,2330,2332],{"class":1191,"line":1060},[1189,2319,1668],{"class":1532},[1189,2321,2322],{"class":1228}," ctx ",[1189,2324,1463],{"class":1195},[1189,2326,1676],{"class":1195},[1189,2328,2329],{"class":1471}," AudioContext",[1189,2331,1725],{"class":1228},[1189,2333,1659],{"class":1195},[1189,2335,2336,2338,2341,2343,2346,2348,2351,2353],{"class":1191,"line":1216},[1189,2337,1668],{"class":1532},[1189,2339,2340],{"class":1228}," osc ",[1189,2342,1463],{"class":1195},[1189,2344,2345],{"class":1228}," ctx",[1189,2347,1468],{"class":1195},[1189,2349,2350],{"class":1471},"createOscillator",[1189,2352,1725],{"class":1228},[1189,2354,1659],{"class":1195},[1189,2356,2357,2360,2362,2365,2367,2370,2372,2375,2378],{"class":1191,"line":1239},[1189,2358,2359],{"class":1228},"osc",[1189,2361,1468],{"class":1195},[1189,2363,2364],{"class":1228},"frequency",[1189,2366,1468],{"class":1195},[1189,2368,2369],{"class":1228},"value ",[1189,2371,1463],{"class":1195},[1189,2373,2374],{"class":1539}," 440",[1189,2376,2377],{"class":1195},";",[1189,2379,2380],{"class":1454}," // A4\n",[1189,2382,2383,2385,2387,2390,2393,2395,2398],{"class":1191,"line":1258},[1189,2384,2359],{"class":1228},[1189,2386,1468],{"class":1195},[1189,2388,2389],{"class":1471},"connect",[1189,2391,2392],{"class":1228},"(ctx",[1189,2394,1468],{"class":1195},[1189,2396,2397],{"class":1228},"destination)",[1189,2399,1659],{"class":1195},[1189,2401,2402,2404,2406,2409,2411],{"class":1191,"line":1268},[1189,2403,2359],{"class":1228},[1189,2405,1468],{"class":1195},[1189,2407,2408],{"class":1471},"start",[1189,2410,1725],{"class":1228},[1189,2412,1659],{"class":1195},[2013,2414],{},[1103,2416,2418],{"id":2417},"whats-next","What's Next?",[747,2420,2421],{},"This is Part 2 of an ongoing series exploring the fascinating world of music technology. Each installment will bring new facts, innovations, and insights from the intersection of music and technology.",[747,2423,2424,2425,2430],{},"Know a surprising MusicTech fact? ",[772,2426,2429],{"href":2427,"rel":2428},"https://musictechlab.io/contact",[776],"Let us know"," - we might feature it in a future edition.",[2013,2432],{},[747,2434,2435],{},[2436,2437,2438,2439,2443],"em",{},"MusicTech Lab builds software for the music industry. From DDEX integrations to audio analysis tools, we've seen the technology behind the music. ",[772,2440,2442],{"href":2427,"rel":2441},[776],"Contact us"," if you're building something in the MusicTech space.",[1949,2445,2446],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1059,"searchDepth":1060,"depth":1060,"links":2448},[2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459],{"id":2017,"depth":1060,"text":2018},{"id":2041,"depth":1060,"text":2042},{"id":2061,"depth":1060,"text":2062},{"id":2101,"depth":1060,"text":2102},{"id":2144,"depth":1060,"text":2145},{"id":2161,"depth":1060,"text":2162},{"id":2195,"depth":1060,"text":2196},{"id":2215,"depth":1060,"text":2216},{"id":2246,"depth":1060,"text":2247},{"id":2279,"depth":1060,"text":2280},{"id":2417,"depth":1060,"text":2418},"2026-01-10T00:00:00.000Z","Fascinating facts about music technology, standards, and innovations that shape how we create, share, and experience music. Part 2 of the series.",{"src":2463},"/images/blog/musictechlab_blog_did-you-know-musictech-facts.webp",{"enabled":1066,"items":2465},[2466,2468,2471,2474],{"text":2467,"icon":1073},"MIDI is over 40 years old (1983) and still the industry standard for music production.",{"text":2469,"icon":2470},"MusicXML enables blind musicians to convert sheet music to braille notation.","i-lucide-headphones",{"text":2472,"icon":2473},"Spotify calculates danceability, valence, energy, and speechiness for every track.","i-lucide-bar-chart-3",{"text":2475,"icon":2476},"DDEX standards power metadata exchange across all major music platforms.","i-lucide-database",{},{"title":458,"description":2461},[1084],"ySC6nBuRvpIs0kSIlnIND38qVB516oggAL89-F9t3_I",{"id":2482,"title":562,"authors":2483,"badge":2486,"body":2489,"category":1062,"client":742,"date":3073,"description":3074,"extension":1065,"faq":742,"featured":69,"featuredOrder":742,"hidden":69,"image":3075,"keyTakeaways":3077,"meta":3086,"navigation":1066,"path":563,"seo":3087,"status":742,"stem":564,"tags":3088,"teaser":742,"__hash__":3090,"score":1216},"posts/blog/software-development/integrating-tempus-metronome-with-the-getsongbpm-api-what-bpm-really-means-and-how-to-use-it.md",[2484],{"name":1096,"to":1097,"avatar":2485},{"src":1099},{"label":2487,"color":2488},"Featured","#E91E63",{"type":744,"value":2490,"toc":3059},[2491,2498,2500,2504,2522,2557,2561,2585,2589,2595,2597,2601,2626,2635,2637,2641,2664,2666,2670,2687,2690,2710,2712,2716,2720,3019,3021,3025,3029,3031,3035,3056],[747,2492,2493,2494,2497],{},"Understanding tempo is one of the fundamentals of music performance, practice, and DJing. In Tempus Metronome, we integrate directly with the ",[762,2495,2496],{},"GetSongBPM API",", allowing users to look up a song, check its tempo, and instantly set the metronome to match. This article explains what BPM actually is, why it matters, where tempo data comes from, and how to integrate GetSongBPM into Flutter — all in one place.",[2013,2499],{},[1103,2501,2503],{"id":2502},"what-is-bpm","What Is BPM?",[747,2505,2506,2509,2510,2513,2514,2517,2518,2521],{},[762,2507,2508],{},"BPM (Beats Per Minute)"," describes the tempo of a piece of music — how many beats occur in one minute. A slow ballad might be ",[762,2511,2512],{},"60 BPM",", a pop track ",[762,2515,2516],{},"120 BPM",", and fast electronic music can reach ",[762,2519,2520],{},"150–180 BPM"," or more.",[2523,2524,2531,2537,2542,2547,2552],"div",{"className":2525},[2526,2527,2528,2529,2530],"grid","grid-cols-2","md:grid-cols-5","gap-4","my-8",[2532,2533],"spotlight-card",{"description":2534,"icon":2535,"title":2536},"Keep a steady beat during practice and performance.","i-lucide-timer","Consistent Timing",[2532,2538],{"description":2539,"icon":2540,"title":2541},"Match tempos between tracks for seamless transitions.","i-lucide-disc-3","DJ Matching",[2532,2543],{"description":2544,"icon":2545,"title":2546},"Design workouts and running playlists by energy level.","i-lucide-dumbbell","Workout Playlists",[2532,2548],{"description":2549,"icon":2550,"title":2551},"Practice specific rhythmic patterns at precise tempos.","i-lucide-music-4","Rhythmic Practice",[2532,2553],{"description":2554,"icon":2555,"title":2556},"Analyze energy and intensity in any track.","i-lucide-activity","Song Analysis",[1318,2558,2560],{"id":2559},"what-bpm-can-tell-you","What BPM Can Tell You",[2523,2562,2565,2570,2575,2580],{"className":2563},[2526,2527,2564,2529,2530],"md:grid-cols-4",[2532,2566],{"description":2567,"icon":2568,"title":2569},"Higher BPM generally means higher energy.","i-lucide-zap","Energy Level",[2532,2571],{"description":2572,"icon":2573,"title":2574},"Most genres cluster around specific BPM ranges.","i-lucide-tag","Genre Tendencies",[2532,2576],{"description":2577,"icon":2578,"title":2579},"Faster tempos demand more from the performer.","i-lucide-gauge","Difficulty",[2532,2581],{"description":2582,"icon":2583,"title":2584},"Plan warm-ups, drills, and cool-downs by tempo.","i-lucide-list-checks","Training Structure",[1318,2586,2588],{"id":2587},"what-to-watch-out-for","What to Watch Out For",[2590,2591,2592],"warning",{},[747,2593,2594],{},"BPM data is not always reliable. Watch out for tempo changes within a track, live recordings with natural drift, different remixes at different speeds, double-time / half-time feel that confuses detection, and incorrect crowd-sourced data.",[2013,2596],{},[1103,2598,2600],{"id":2599},"where-can-you-search-for-bpm-data","Where Can You Search for BPM Data?",[2523,2602,2607,2612,2616,2621],{"className":2603},[2526,2604,2605,2606,2529,2530],"grid-cols-1","md:grid-cols-2","lg:grid-cols-4",[2532,2608],{"description":2609,"icon":2610,"title":2611},"Dedicated BPM database with a simple REST API. Used by Tempus Metronome.","i-lucide-search","GetSongBPM",[2532,2613],{"description":2614,"icon":1073,"title":2615},"Rich audio analysis including tempo, key, and danceability via Spotify's API.","Spotify Audio Features",[2532,2617],{"description":2618,"icon":2619,"title":2620},"Audio recognition services that identify songs and return metadata including BPM.","i-lucide-mic","AudD / ACRCloud",[2532,2622],{"description":2623,"icon":2624,"title":2625},"Tap along to the beat and calculate BPM manually — the most reliable fallback.","i-lucide-hand","Manual Tap-Tempo",[2627,2628,2629],"tip",{},[747,2630,2631,2632,2634],{},"Tempus Metronome uses ",[762,2633,2611],{}," for its simplicity and speed. One API call returns the tempo — no OAuth, no complex setup.",[2013,2636],{},[1103,2638,2640],{"id":2639},"getting-started-with-the-getsongbpm-api","Getting Started with the GetSongBPM API",[2523,2642,2644,2649,2654,2659],{"className":2643},[2526,2604,2605,2529,2530],[2532,2645],{"description":2646,"icon":2647,"title":2648},"Sign up at getsongbpm.com/api to get your API key. Free tier available.","i-lucide-key","Register",[2532,2650],{"description":2651,"icon":2652,"title":2653},"The API terms require a backlink to GetSongBPM in your app or website.","i-lucide-link","Backlink Required",[2532,2655],{"description":2656,"icon":2657,"title":2658},"3,000 requests per hour — more than enough for a metronome app.","i-lucide-clock","Rate Limit",[2532,2660],{"description":2661,"icon":2662,"title":2663},"Store your key in environment variables, never hardcode it in source code.","i-lucide-shield-check","API Key Security",[2013,2665],{},[1103,2667,2669],{"id":2668},"environment-configuration","Environment Configuration",[1181,2671,2675],{"className":2672,"code":2673,"language":2674,"meta":1059,"style":1059},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GETSONGBPM_API_KEY=your_api_key_here\n","bash",[1127,2676,2677],{"__ignoreMap":1059},[1189,2678,2679,2682,2684],{"class":1191,"line":1192},[1189,2680,2681],{"class":1228},"GETSONGBPM_API_KEY",[1189,2683,1463],{"class":1195},[1189,2685,2686],{"class":1481},"your_api_key_here\n",[747,2688,2689],{},"For Flutter Web, pass the key at build time:",[1181,2691,2693],{"className":2672,"code":2692,"language":2674,"meta":1059,"style":1059},"flutter build web --dart-define=GETSONGBPM_API_KEY=your_api_key_here\n",[1127,2694,2695],{"__ignoreMap":1059},[1189,2696,2697,2701,2704,2707],{"class":1191,"line":1192},[1189,2698,2700],{"class":2699},"sBMFI","flutter",[1189,2702,2703],{"class":1481}," build",[1189,2705,2706],{"class":1481}," web",[1189,2708,2709],{"class":1481}," --dart-define=GETSONGBPM_API_KEY=your_api_key_here\n",[2013,2711],{},[1103,2713,2715],{"id":2714},"flutter-integration-example","Flutter Integration Example",[1318,2717,2719],{"id":2718},"api-service","API Service",[1181,2721,2725],{"className":2722,"code":2723,"language":2724,"meta":1059,"style":1059},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class GetSongBpmApi {\n  final String baseUrl = \"https://api.getsongbpm.com\";\n  final String apiKey = dotenv.env['GETSONGBPM_API_KEY']!;\n\n  Future\u003CList\u003Cdynamic>> searchSongs(String query) async {\n    final url = Uri.parse(\n      \"$baseUrl/search/?api_key=$apiKey&type=multi&lookup=$query\"\n    );\n    final response = await http.get(url);\n    if (response.statusCode == 200) {\n      final jsonResponse = jsonDecode(response.body);\n      return jsonResponse['search'] ?? [];\n    } else {\n      throw Exception(\"Failed to load data\");\n    }\n  }\n}\n","dart",[1127,2726,2727,2738,2756,2784,2788,2822,2842,2873,2880,2905,2927,2950,2972,2983,3001,3007,3013],{"__ignoreMap":1059},[1189,2728,2729,2732,2735],{"class":1191,"line":1192},[1189,2730,2731],{"class":1195},"class",[1189,2733,2734],{"class":2699}," GetSongBpmApi",[1189,2736,2737],{"class":1228}," {\n",[1189,2739,2740,2743,2746,2749,2751,2754],{"class":1191,"line":1060},[1189,2741,2742],{"class":1532},"  final",[1189,2744,2745],{"class":2699}," String",[1189,2747,2748],{"class":1228}," baseUrl ",[1189,2750,1463],{"class":1195},[1189,2752,2753],{"class":1481}," \"https://api.getsongbpm.com\"",[1189,2755,1659],{"class":1195},[1189,2757,2758,2760,2762,2765,2767,2770,2772,2775,2778,2781],{"class":1191,"line":1216},[1189,2759,2742],{"class":1532},[1189,2761,2745],{"class":2699},[1189,2763,2764],{"class":1228}," apiKey ",[1189,2766,1463],{"class":1195},[1189,2768,2769],{"class":1228}," dotenv",[1189,2771,1468],{"class":1195},[1189,2773,2774],{"class":1228},"env[",[1189,2776,2777],{"class":1481},"'GETSONGBPM_API_KEY'",[1189,2779,2780],{"class":1228},"]",[1189,2782,2783],{"class":1195},"!;\n",[1189,2785,2786],{"class":1191,"line":1239},[1189,2787,1449],{"emptyLinePlaceholder":1066},[1189,2789,2790,2793,2795,2798,2800,2803,2806,2809,2811,2814,2817,2820],{"class":1191,"line":1258},[1189,2791,2792],{"class":2699},"  Future",[1189,2794,1196],{"class":1228},[1189,2796,2797],{"class":2699},"List",[1189,2799,1196],{"class":1228},[1189,2801,2802],{"class":2699},"dynamic",[1189,2804,2805],{"class":1228},">> ",[1189,2807,2808],{"class":1471},"searchSongs",[1189,2810,1475],{"class":1228},[1189,2812,2813],{"class":2699},"String",[1189,2815,2816],{"class":1228}," query) ",[1189,2818,2819],{"class":1428},"async",[1189,2821,2737],{"class":1228},[1189,2823,2824,2827,2830,2832,2835,2837,2839],{"class":1191,"line":1268},[1189,2825,2826],{"class":1532},"    final",[1189,2828,2829],{"class":1228}," url ",[1189,2831,1463],{"class":1195},[1189,2833,2834],{"class":2699}," Uri",[1189,2836,1468],{"class":1195},[1189,2838,1472],{"class":1471},[1189,2840,2841],{"class":1228},"(\n",[1189,2843,2844,2847,2850,2854,2857,2859,2862,2865,2867,2870],{"class":1191,"line":1287},[1189,2845,2846],{"class":1481},"      \"",[1189,2848,2849],{"class":1228},"$",[1189,2851,2853],{"class":2852},"sHdIc","baseUrl",[1189,2855,2856],{"class":1481},"/search/?api_key=",[1189,2858,2849],{"class":1228},[1189,2860,2861],{"class":2852},"apiKey",[1189,2863,2864],{"class":1481},"&type=multi&lookup=",[1189,2866,2849],{"class":1228},[1189,2868,2869],{"class":2852},"query",[1189,2871,2872],{"class":1481},"\"\n",[1189,2874,2875,2878],{"class":1191,"line":1306},[1189,2876,2877],{"class":1228},"    )",[1189,2879,1659],{"class":1195},[1189,2881,2882,2884,2887,2889,2892,2895,2897,2900,2903],{"class":1191,"line":1553},[1189,2883,2826],{"class":1532},[1189,2885,2886],{"class":1228}," response ",[1189,2888,1463],{"class":1195},[1189,2890,2891],{"class":1428}," await",[1189,2893,2894],{"class":1228}," http",[1189,2896,1468],{"class":1195},[1189,2898,2899],{"class":1471},"get",[1189,2901,2902],{"class":1228},"(url)",[1189,2904,1659],{"class":1195},[1189,2906,2907,2910,2913,2915,2918,2921,2924],{"class":1191,"line":1558},[1189,2908,2909],{"class":1428},"    if",[1189,2911,2912],{"class":1228}," (response",[1189,2914,1468],{"class":1195},[1189,2916,2917],{"class":1228},"statusCode ",[1189,2919,2920],{"class":1195},"==",[1189,2922,2923],{"class":1539}," 200",[1189,2925,2926],{"class":1228},") {\n",[1189,2928,2929,2932,2935,2937,2940,2943,2945,2948],{"class":1191,"line":1564},[1189,2930,2931],{"class":1532},"      final",[1189,2933,2934],{"class":1228}," jsonResponse ",[1189,2936,1463],{"class":1195},[1189,2938,2939],{"class":1471}," jsonDecode",[1189,2941,2942],{"class":1228},"(response",[1189,2944,1468],{"class":1195},[1189,2946,2947],{"class":1228},"body)",[1189,2949,1659],{"class":1195},[1189,2951,2952,2955,2958,2961,2964,2967,2970],{"class":1191,"line":1590},[1189,2953,2954],{"class":1428},"      return",[1189,2956,2957],{"class":1228}," jsonResponse[",[1189,2959,2960],{"class":1481},"'search'",[1189,2962,2963],{"class":1228},"] ",[1189,2965,2966],{"class":1195},"??",[1189,2968,2969],{"class":1228}," []",[1189,2971,1659],{"class":1195},[1189,2973,2975,2978,2981],{"class":1191,"line":2974},13,[1189,2976,2977],{"class":1228},"    } ",[1189,2979,2980],{"class":1428},"else",[1189,2982,2737],{"class":1228},[1189,2984,2986,2989,2992,2994,2997,2999],{"class":1191,"line":2985},14,[1189,2987,2988],{"class":1428},"      throw",[1189,2990,2991],{"class":2699}," Exception",[1189,2993,1475],{"class":1228},[1189,2995,2996],{"class":1481},"\"Failed to load data\"",[1189,2998,1690],{"class":1228},[1189,3000,1659],{"class":1195},[1189,3002,3004],{"class":1191,"line":3003},15,[1189,3005,3006],{"class":1228},"    }\n",[1189,3008,3010],{"class":1191,"line":3009},16,[1189,3011,3012],{"class":1228},"  }\n",[1189,3014,3016],{"class":1191,"line":3015},17,[1189,3017,3018],{"class":1228},"}\n",[2013,3020],{},[1103,3022,3024],{"id":3023},"testing","Testing",[3026,3027],"project-timeline",{":items":3028},"[{\"title\":\"1. Open the App\",\"description\":\"Launch Tempus Metronome on your device.\",\"icon\":\"i-lucide-smartphone\"},{\"title\":\"2. Tap Search\",\"description\":\"Open the song search interface.\",\"icon\":\"i-lucide-search\"},{\"title\":\"3. Enter a Song\",\"description\":\"Type a song name or artist to query the GetSongBPM API.\",\"icon\":\"i-lucide-text-cursor-input\"},{\"title\":\"4. BPM Applied\",\"description\":\"The metronome tempo is set automatically to match the song.\",\"icon\":\"i-lucide-check-circle\"}]",[2013,3030],{},[1103,3032,3034],{"id":3033},"links","Links",[2523,3036,3041,3049,3053],{"className":3037},[3038,3039,3040,2530],"flex","flex-wrap","gap-3",[3042,3043],"u-button",{"color":3044,"label":3045,"target":3046,"to":3047,"variant":3048},"primary","Tempus on App Store","_blank","https://apps.apple.com/pl/app/mtl-tempus/id6755827507","subtle",[3042,3050],{"color":3051,"label":2496,"target":3046,"to":3052,"variant":3048},"neutral","https://getsongbpm.com/api",[3042,3054],{"color":3051,"label":2611,"target":3046,"to":3055,"variant":3048},"https://getsongbpm.com",[1949,3057,3058],{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1059,"searchDepth":1060,"depth":1060,"links":3060},[3061,3065,3066,3067,3068,3071,3072],{"id":2502,"depth":1060,"text":2503,"children":3062},[3063,3064],{"id":2559,"depth":1216,"text":2560},{"id":2587,"depth":1216,"text":2588},{"id":2599,"depth":1060,"text":2600},{"id":2639,"depth":1060,"text":2640},{"id":2668,"depth":1060,"text":2669},{"id":2714,"depth":1060,"text":2715,"children":3069},[3070],{"id":2718,"depth":1216,"text":2719},{"id":3023,"depth":1060,"text":3024},{"id":3033,"depth":1060,"text":3034},"2025-11-27T00:00:00.000Z","What BPM really means and how we integrated the GetSongBPM API into Tempus Metronome using Flutter to let users look up song tempos instantly.",{"src":3076},"/images/blog/musictechlab_blog_mtl-tempus-getsongbpm.webp",{"enabled":1066,"items":3078},[3079,3081,3084],{"text":3080,"icon":2568},"GetSongBPM API returns tempo data in one call with no OAuth, allowing 3,000 requests per hour.",{"text":3082,"icon":3083},"BPM data can be unreliable for live recordings, tempo changes, and double-time patterns.","i-lucide-alert-triangle",{"text":3085,"icon":1073},"Tempus Metronome auto-sets the beat from a song search, bridging BPM lookup and practice.",{},{"title":562,"description":3074},[1084,3089],"development","xoXi9ImXyjWCvQBXMfk3Dwn12IlZedXhrGItym5aJBQ",{"id":3092,"title":566,"authors":3093,"badge":3096,"body":3097,"category":1062,"client":742,"date":3198,"description":3199,"extension":1065,"faq":742,"featured":69,"featuredOrder":742,"hidden":69,"image":3200,"keyTakeaways":3202,"meta":3210,"navigation":1066,"path":567,"seo":3211,"status":742,"stem":568,"tags":3212,"teaser":742,"__hash__":3213,"score":1216},"posts/blog/software-development/introducing-musictech-poland.md",[3094],{"name":738,"to":739,"avatar":3095},{"src":741},{"label":2487,"color":2488},{"type":744,"value":3098,"toc":3191},[3099,3102,3106,3109,3116,3121,3125,3134,3138,3141,3145,3148,3152,3168,3173,3177],[747,3100,3101],{},"MusicTech Poland has officially launched — a community initiative that unites startups, music professionals, artists, and anyone working at the intersection of music and technology. The goal is to build a space where tech innovators and the music industry can connect, learn, and grow together.",[1103,3103,3105],{"id":3104},"vision","Vision",[747,3107,3108],{},"The focus is on boosting Poland's music sector with tech advancements and fostering collaboration between creators and the industry. Through online and in-person events, MusicTech Poland encourages shared learning and fresh ideas.",[747,3110,3111],{},[3112,3113],"img",{"alt":3114,"src":3115},"MusicTech Poland Meetup","/images/cdn-migrated/musictech-poland-meetup-3.webp",[747,3117,3118],{},[2436,3119,3120],{},"Photo: MusicTech Poland",[1103,3122,3124],{"id":3123},"expanding-polands-global-role","Expanding Poland's Global Role",[747,3126,3127,3128,3133],{},"MusicTech Poland aims to raise Poland's profile in the global music and tech scene — participating in international events and collaborating with organisations like ",[772,3129,3132],{"href":3130,"rel":3131},"https://musictech.eu/",[776],"Music Tech Europe",", which links similar initiatives across the continent.",[1103,3135,3137],{"id":3136},"key-areas","Key Areas",[747,3139,3140],{},"The initiative covers data, AI, music distribution, live events, VR, and ticketing — making the industry more dynamic and profitable for everyone involved. Programs like accelerators and tech labs will support new projects and ideas in Poland.",[1103,3142,3144],{"id":3143},"activities","Activities",[747,3146,3147],{},"Planned activities include meetups, industry reports, job listings, and international projects. The MusicTech Poland WhatsApp group offers a space for ongoing discussions and networking.",[1103,3149,3151],{"id":3150},"the-founders","The Founders",[747,3153,3154,3155,3158,3159,3162,3163,1468],{},"MusicTech Poland was co-founded by ",[772,3156,1096],{"href":1097,"rel":3157},[776]," and ",[772,3160,738],{"href":739,"rel":3161},[776]," from MusicTech Lab, along with ",[772,3164,3167],{"href":3165,"rel":3166},"https://www.linkedin.com/in/aga-samitowska/",[776],"Aga Samitowska",[747,3169,3170],{},[3112,3171],{"alt":3114,"src":3172},"/images/cdn-migrated/musitech-poland-meetup-1.webp",[747,3174,3175],{},[2436,3176,3120],{},[2523,3178,3180,3184,3187],{"className":3179},[3038,3039,3040,2530],[3042,3181],{"color":3044,"label":3182,"target":3046,"to":3183,"variant":3048},"Website","https://www.musictechpoland.com/",[3042,3185],{"color":3051,"label":777,"target":3046,"to":3186,"variant":3048},"https://www.linkedin.com/company/musictech-poland/",[3042,3188],{"color":3051,"label":3189,"target":3046,"to":3190,"variant":3048},"Instagram","https://www.instagram.com/musictechpoland/",{"title":1059,"searchDepth":1060,"depth":1060,"links":3192},[3193,3194,3195,3196,3197],{"id":3104,"depth":1060,"text":3105},{"id":3123,"depth":1060,"text":3124},{"id":3136,"depth":1060,"text":3137},{"id":3143,"depth":1060,"text":3144},{"id":3150,"depth":1060,"text":3151},"2024-10-15T00:00:00.000Z","MusicTech Poland launches to connect startups, artists, and tech enthusiasts. Building a community where music and technology innovation can thrive together.",{"src":3201},"/images/blog/musictechlab_blog_introducing-musictech-poland.webp",{"enabled":1066,"items":3203},[3204,3206,3208],{"text":3205,"icon":1073},"MusicTech Poland connects startups, artists, and tech professionals at the music-technology intersection.",{"text":3207,"icon":1990},"Activities include meetups, industry reports, job listings, and international collaborations.",{"text":3209,"icon":1079},"The initiative covers AI, music distribution, live events, VR, and ticketing innovation in Poland.",{},{"title":566,"description":3199},[1084],"c-K-Qg9AJ_FMSRxL_PRQVwhWLg8eDH378xcAFSaPvkk",1780305267468]