A comprehensive technical analysis of migrating InfoAudio’s 58-application radio automation platform from on-premises Windows deployment to a cloud-native SaaS architecture.
InfoAudio is a professional radio automation suite with deep Windows and audio hardware dependencies. A full lift-and-shift to cloud is not viable — the recommended strategy is a Hybrid Cloud model where back-office, scheduling, reporting, and integration services move to the cloud while real-time playout and recording remain on edge nodes at the station.
Understanding the existing technology stack, dependencies, and constraints that shape the migration strategy.
| Layer | Technology | Cloud Impact |
|---|---|---|
| Runtime | .NET Framework 4.5.2 (majority), 4.7.2 (InfoCue, Integrador) | Blocker No Linux support |
| UI | WPF + DevExpress 18.2, WinForms (legacy) | Blocker Desktop-only |
| Audio Engine | BASS.NET 2.4.x (ASIO + WASAPI) | Blocker Hardware-bound |
| Database | SQL Server + Entity Framework 5 (EDMX/ObjectContext) | Moderate Azure SQL compatible |
| Services | Windows Services via Topshelf 4.2 | Moderate Containerizable |
| IPC | Named Pipes, TCP Sockets, Eneter Framework | Blocker Local-only (Pipes) |
| Web Services | WCF (35+ contracts, BasicHttpBinding) | Moderate Convert to REST |
| Reports | Stimulsoft Reports 2016.1 | Ready Server-side capable |
| Auth | Custom token-based (LoginBusiness) | Moderate Needs OAuth2/OIDC |
| Licensing | Hardware fingerprint + server validation | Moderate Needs SaaS licensing |
| Cloud SDK | Azure.Storage.Blobs 12.x (Integrador) | Ready Foundation exists |
The following apps directly access audio I/O devices and cannot run in cloud containers:
| Application | Hardware API | Latency Requirement | Cloud Viable? |
|---|---|---|---|
| Player Desktop | BASS_Init, ASIO, WASAPI, 44.1 kHz | < 20ms (broadcast) | No |
| Gravador | BassAsio, BassWasapi, Encoders | < 20ms (recording) | No |
| VoiceTracker | BASS_GetDeviceInfos, BASS_RecordGetDeviceInfos | < 50ms (monitoring) | No |
| EditorMixagem | BASS_StreamCreateFile (decode only) | Non-real-time | Partial |
| SoundDevices | BASS_GetDeviceInfos enumeration | N/A | No |
| ICRip | CD drive COM interop | N/A | No |
| Mechanism | App Pairs | Cloud Impact | Replacement |
|---|---|---|---|
| Named Pipes | Player ↔ Gravador, Player ↔ MusicMaster, Player ↔ ProcessaTKM | Blocks distribution | gRPC, Azure Service Bus, SignalR |
| TCP Sockets | BreakMonitor, Satellite, InfoRelay, Shadow, MultiStation | Needs DNS | Cloud Load Balancer + Service Mesh |
| Eneter Framework | EditorMixagem ↔ Player | Network-capable | WebSockets / SignalR |
| WCF | All desktop apps ↔ WCFHost (35+ contracts) | HTTP-based | ASP.NET Core REST API |
EmpresaId foreign keys on 40+ entity tables including
Evento, ProgramacaoBloco, ListaEvento, Usuario, TabelaGeral, Tema, and all log tables.
This row-level tenant isolation is a solid foundation for SaaS multi-tenancy.
Each of the 58 applications classified by cloud migration viability into three deployment zones.
Applications with no hardware dependency, batch/scheduled processing, or pure data management. These can move entirely to Azure/AWS as containers, functions, or web apps.
| Application | Current Type | Cloud Target | Effort |
|---|---|---|---|
| ExportaLog Service | Windows Service | Azure Function (Timer Trigger) | Low |
| InfoXML Service | Windows Service | Azure Function (Blob Trigger) | Low |
| Transcription Service | Windows Service + Whisper | Azure Container Instance + Azure AI Speech | Medium |
| Integrador Service | Windows Service | Azure App Service (Container) | Low |
| MidiaIngest Service | Windows Service | Azure Function + Blob Storage | Medium |
| Backup | Console + Task Scheduler | Azure Function + Azure Backup | Low |
| Atualizador | Console | Azure CDN + REST endpoint | Medium |
| DataBase.SQL (Migrations) | Console | Azure DevOps Pipeline + EF Migrations | Medium |
| ReportEdit / Reports | WinForms + Stimulsoft | Web Report Service + Blob templates | Medium |
| Ecad | WPF | Web App (Blazor/React) | Medium |
| Clima | WPF | Azure Function + WeatherAPI | Low |
| RemoteVoiceTracker Service | Windows Service | Azure App Service (already cloud-connected) | Low |
| WCF Host (35 contracts) | IIS/WCF | ASP.NET Core REST API | High |
| CreateTool | WinForms | Azure DevOps + CLI seed script | Low |
| Licenca/Validador | WinForms | SaaS Subscription API (Stripe/custom) | Medium |
| AutoCatalog (3 apps) | Service + Console + Config | Azure Function + AI tagging | Medium |
| ExportaCatalogo | Console | Azure Function | Low |
| MusicMaster.CLI | Console | Azure Function (HTTP Trigger) | Low |
Applications with split responsibilities: business logic moves to cloud, a lightweight station agent handles local operations and syncs with cloud APIs.
| Application | Cloud Component | Edge Agent Component | Effort |
|---|---|---|---|
| MusicMaster Plugin + Service | Sync engine, webhooks, catalog API | Local MusicMaster connector, Named Pipe to Player | Medium |
| ProgAuto Plugin + Service | Schedule management API, import processing | File system watcher, local XML/TXT import | Medium |
| Services.Manager | Cloud dashboard (web UI) | Station agent with service health reporting | Medium |
| ShadowConfig Service | Cloud config sync, failover orchestration | Local network monitor, config file writer | Low |
| Integrador.WPF | Cloud integration dashboard | None (purely cloud UI) | Medium |
| ExportaLog Plugin + WPF | Cloud log analytics dashboard | Log collector agent | Low |
| MidiaIngest.WPF | Cloud media management portal | Local file uploader agent | Medium |
| Transcription.Plugin | Cloud transcription UI + status | Audio file uploader | Low |
| InfoXML.Plugin | Cloud import status dashboard | Local file watcher | Low |
| Satelite | Cloud dispatch orchestration | Local TCP server/client at station | Medium |
| InfoRelay + InfoRemote | Cloud relay hub (SignalR) | Local agent for remote commands | Medium |
| BreakMonitor | Cloud monitoring dashboard | Local Player event listener | Low |
| Backup.Config | Cloud backup schedule manager | Local Task Scheduler agent | Low |
| CentralNegocios | Cloud business management portal | Local audio catalog sync | Medium |
Applications with hard hardware dependencies, real-time latency requirements, or OS-level coupling that cannot be abstracted. These remain at the station but gain cloud management and telemetry.
| Application | Blocker | Cloud Enhancement |
|---|---|---|
| Player Desktop | BASS.NET ASIO/WASAPI, <20ms latency, Named Pipes, Mutex | Cloud telemetry, remote config, schedule sync |
| Gravador | BASS.NET ASIO/WASAPI recording, real-time encoding | Cloud upload of recordings, remote monitoring |
| VoiceTracker | BASS.NET device access, real-time waveform | Cloud schedule pull, completed track upload |
| EditorMixagem | BASS.NET audio decode, WinForms hybrid, Eneter IPC | Cloud audio cache, saved edits sync |
| SoundDevices | BASS.NET device enumeration, spawned by Player | Device inventory reporting to cloud |
| ProtecaoMAudio | Audio monitoring hardware | Alert forwarding to cloud |
| ProcessaTKM | Named Pipe to Player, Mutex singleton | Cloud tracking of processed files |
| ICRip | CD drive COM interop | Upload ripped audio to cloud catalog |
| Configurador.Mesa | Audio mixing hardware config | Config backup to cloud |
| Splash | Desktop UI bootstrap | N/A |
| AcessoriosWPF | Player UI module (tightly coupled) | N/A (evolves with Player) |
| IA9Tools | Legacy DB migration tool | N/A (one-time use) |
| ExtratorTKM | Local file processing, Mutex | Cloud catalog sync |
| Instalador | IIS/SQL Server local setup | Cloud-guided installer (download + config) |
| MusicMaster.AgregadorPorCodigo | Local DB tool | N/A |
| Busy | Local status utility | N/A |
The proposed Hybrid Cloud architecture with three deployment tiers connected by a central API gateway and event bus.
A four-phase approach that delivers incremental value while managing risk. Each phase is independently deployable.
Cloud readiness score and migration path for every application category.
| Service | Cloud Readiness | Target | Phase | Key Changes |
|---|---|---|---|---|
| ExportaLog | Azure Function (Timer) | Phase 1 | Extract job logic, Azure Storage for state | |
| InfoXML | Azure Function (Blob) | Phase 1 | File trigger from Blob, no local watcher | |
| Integrador | App Service Container | Phase 1 | Already uses Azure.Storage.Blobs SDK | |
| RemoteVoiceTracker | App Service | Phase 1 | Already cloud-connected with REST APIs | |
| Transcription | Container + Azure AI Speech | Phase 2 | Replace local Whisper with Azure AI, upload audio to Blob | |
| MidiaIngest | Function + Station Agent module | Phase 2 | Local file watcher in agent, processing in cloud | |
| MusicMaster | Station Agent module | Phase 2 | HTTP listeners stay local, sync via Service Bus | |
| ProgAuto | Station Agent module | Phase 2 | File watcher local, import logic in cloud API | |
| ShadowConfig | Station Agent module | Phase 2 | Cloud config push replaces network polling | |
| AutoCatalog | Azure Function + AI tagging | Phase 2 | Audio analysis via Azure AI, metadata to cloud DB |
| Application | Current UI | SaaS Replacement | Phase |
|---|---|---|---|
| Schedule/Programming | WPF (AcessoriosWPF) | Web Portal — Schedule Module | Phase 3 |
| Music Catalog | WPF (AcessoriosWPF) | Web Portal — Catalog Module | Phase 3 |
| User Management | WPF (AcessoriosWPF) | Azure AD B2C + Web Portal | Phase 3 |
| Reports (13 types) | WPF + Stimulsoft | Web Report Service + PDF export | Phase 3 |
| ECAD Management | WPF + DevExpress | Web Portal — Compliance Module | Phase 3 |
| Services Manager | WPF + MVVM Light | Cloud Dashboard (real-time) | Phase 3 |
| Backup Config | WinForms | Cloud Backup Manager | Phase 3 |
| InfoViewer | WPF | Web Portal module | Phase 3 |
| Application | Cloud Enhancement | Implementation |
|---|---|---|
| Player Desktop | Pull schedule from cloud API, push as-run log, receive remote commands via SignalR | Add HttpClient to pull schedule; keep Named Pipes for local IPC |
| Gravador | Upload recordings to Blob Storage automatically after session ends | Background upload thread in Station Agent |
| VoiceTracker | Download schedule blocks from cloud, upload completed voice tracks | Already partially implemented (RemoteVoiceTracker) |
| EditorMixagem | Download audio from Blob (replace WCF), save edits to cloud API | Replace WCF client with REST client |
Critical risks identified during the code analysis and their recommended mitigations.
| Risk | Severity | Probability | Mitigation |
|---|---|---|---|
| .NET Framework 4.5.2 incompatibility Cloud services target .NET 8+; desktop stays on .NET Framework |
High | Certain | New cloud services in .NET 8. Shared business logic via .NET Standard 2.0 bridge library. Desktop apps remain on .NET Framework until WPF sunset. |
| 154 T-SQL migrations with SQL Server-specific syntax sp_rename, sp_executesql, IDENTITY, sys.database_files |
Medium | Low | Azure SQL Database supports T-SQL natively. No migration rewrite needed. Use Azure SQL for cloud DB. |
| Audio latency over network Cloud round-trip 50–200ms vs broadcast requirement <20ms |
High | Certain | Audio playout stays on-premises. Cloud manages metadata only. Local SQL cache ensures schedule availability during outages. |
| Named Pipes cannot cross machine boundaries | Medium | Certain | Keep Named Pipes for local Player ↔ Gravador. Cloud communication via HTTPS/Service Bus. Station Agent bridges the two worlds. |
| Internet dependency for on-air operation | High | Medium | Station Agent maintains local SQL cache and audio cache. Player operates fully offline with cached schedule. Sync resumes when connectivity returns. |
| Hardcoded API keys and custom encryption Spotify ClientID/Secret, WeatherAPI key in source code |
Medium | Certain | Phase 1 priority: move all secrets to Azure Key Vault. Implement managed identities for Azure service-to-service auth. |
| WCF service migration scope 35+ contracts, BasicHttpBinding, 2GB max message size |
Medium | Medium | Incremental migration: convert 5 high-traffic contracts per phase. Run WCF and REST in parallel during transition. Use API versioning. |
| Stimulsoft licensing cost for server-side | Low | Medium | Evaluate Stimulsoft Server license vs open-source alternatives (QuestPDF, RDLC). Phase 3 decision point. |
Indicative cloud infrastructure costs per station per month (Azure pricing, US East region).
| Resource | Azure Service | Tier | Est. Monthly Cost |
|---|---|---|---|
| Database | Azure SQL Database | Standard S1 (20 DTU) | $30 |
| Audio Storage | Blob Storage (Hot) | 100 GB per station | $2 |
| API Gateway | App Service | B1 (shared across stations) | $14 / N stations |
| Functions | Azure Functions | Consumption plan | $1–5 |
| Service Bus | Azure Service Bus | Basic tier | $0.05 |
| SignalR | Azure SignalR Service | Free tier (20 connections) | $0 |
| Key Vault | Azure Key Vault | Standard | $0.03 |
| Monitoring | Application Insights | 5 GB/month | $0 |
| Auth | Azure AD B2C | 50K auth/month free | $0 |
| Estimated Total per Station | $35–50/mo | ||
A visual summary of the four-phase migration across 18 months.
| Phase | Timeline | Key Milestones | Apps Migrated |
|---|---|---|---|
| Phase 1 Cloud Foundation |
Months 1–3 | Azure SQL provisioned, API Gateway live, Key Vault configured, ExportaLog + InfoXML + Integrador as Azure Functions, Blob Storage for audio catalog, CI/CD pipeline | 6 apps |
| Phase 2 Station Agent |
Months 4–7 | Station Agent v1.0, bidirectional sync, MusicMaster + ProgAuto modules, Transcription via Azure AI, MidiaIngest + AutoCatalog in cloud, Health monitoring dashboard | 12 apps |
| Phase 3 Web Portal |
Months 8–12 | SaaS web portal (Schedule, Catalog, Users, Reports, ECAD, Config), Azure AD B2C auth, SaaS licensing, all 35 WCF → REST, self-service station onboarding | 16 apps |
| Phase 4 Edge Optimization |
Months 13–18 | Thin Player (cloud-driven schedule), offline resilience, live telemetry via SignalR, disaster recovery, mobile companion, AI features | 8 apps |