Improving Call Quality by Reducing Background Noise for a Global CommTech Provider
One of our clients operating in the global telecommunications industry specializes in delivering voice services to carriers and businesses worldwide. With massive volumes of voice traffic flowing through their network from all kinds of environments, the client team puts great emphasis on high call quality.
We partnered with the client to design and build a real-time, AI-powered background noise reduction system. This required us to blend multimedia processing and machine learning while meeting the demanding performance standards of large-scale telecom systems.
- System architecture design
- Multimedia pipeline development
- AI model integration
- Elixir & BEAM optimization
- Performance optimization
- Elixir
- BEAM VM
- Membrane framework
- Ortex (ONNX)
- Nx (Numerical Elixir)

Challenges & goals
The client wanted to improve call quality across its global network, especially for calls from noisy environments.
This meant adding a real-time AI noise reduction system to existing telecom infrastructure, which brought several challenges:
- Processing live calls through an AI model and re-injecting cleaned audio without noticeable latency
- Running a resource-intensive AI model efficiently on high volumes of voice traffic
- Moving raw audio between the telephony infrastructure and the machine learning environment without creating bottlenecks
- Scaling the system to handle heavy voice traffic while staying stable
Connecting the telephony infrastructure to the AI model
Our work started with one goal: better call quality for users in noisy environments. The first challenge was connecting the client's existing telephony infrastructure to the AI noise reduction model, which was originally written in Python.
We needed a multimedia processing layer that could connect the telephony infrastructure with the AI model while handling real-time audio reliably. We chose the Membrane framework, our Elixir-based multimedia framework for building real-time audio and video processing pipelines. It provides the components and abstractions needed to receive, decode, process, and transmit media streams while integrating with external services and applications. The pipeline performed several key functions:
- Receiving RTP packets from clients or vendors
- Depayloading and decoding G.711 µ-law audio into raw format
- Sending the raw audio to the Python model via a Unix socket for inference
- Re-encoding the processed audio and delivering it to the receiving party
This setup allowed the client to add AI-driven noise reduction to live calls while keeping media processing stable and real-time.

Migrating the AI stack from Python to native Elixir
With the pipeline validated, we focused on optimizing performance and simplifying the architecture. While the initial setup was functional, it turned out the dependency on Python and Unix sockets introduced unnecessary overhead and complexity.
To optimize the solution, we decided to rewrite the entire processing stack in Elixir. We replaced Python-based preprocessing and postprocessing (previously using numpy and scipy) with Nx (Numerical Elixir) tensor operations.
Furthermore, we utilized the Ortex library to run the noise reduction model (exported in .onnx format) directly within the BEAM virtual machine.
This migration delivered several key benefits:
- Reduced latency, ensuring real-time processing even under heavy traffic
- Simplified deployment and maintenance with a unified Elixir stack
- Improved scalability
- Ensured consistent high audio quality
By consolidating AI and multimedia processing into a single runtime, we delivered a robust, production-ready solution that met the client’s performance and reliability requirements while significantly improving the UX.

Results
By transitioning to the pure Elixir stack, we helped the client create a streamlined, monolithic application capable of handling live phone calls with significantly improved audio quality and virtually no background noise.
We also removed the Python-over-socket layer, eliminating a major performance bottleneck and simplifying the deployment architecture. This makes the system easier to maintain, scale, and operate reliably at high volumes.