Home > Software engineering >  Librosa adds noise to wav data
Librosa adds noise to wav data

Time:02-02

I was programming a little something reading a file and playing it back. I need it to use librosa, it it's impossible i might be able to fix it. the simpleaudio bit is easier to replace. This is my code:

from pathlib import Path
import librosa
import simpleaudio as sa

def play_audio(audio, sampling_rate):
    print("PLAYING AUDIO")
    wave_obj = sa.WaveObject(audio, sample_rate=sampling_rate)
    play_obj = wave_obj.play()
    play_obj.wait_done()

in_fpath = Path("trump.wav")
original_wav, sampling_rate = librosa.load(in_fpath)
play_audio(original_wav, int(sampling_rate))

And it loads the data and plays it back, but it's just that if I play trump.wav file in Windows on the music player, it sounds like it should. When I do it in Python this way, however, it becomes EXTREMELY noisy. You can still hear what he is saying, but barely. Where is the problem? Librosa or SimpleAudio?

CodePudding user response:

I have a suspicion. librosa.load returns an array with float data but simpleaudio needs integer data. Please try to change the dtype of audio:

import numpy as np
# [...]
audio *= 32767 / np.max(np.abs(audio)) # re-scaling
audio = audio.astype(np.int16) # change data type
wave_obj = sa.WaveObject(audio, sample_rate=sampling_rate)
# [...]

Also see the documentation of simpleaudio: https://simpleaudio.readthedocs.io/en/latest/tutorial.html#using-numpy

CodePudding user response:

I figured out the problem, i just needed to change the WaveObject or librosa.load (don't remember which) with a byte_rate (something with byte_) to 4 instead of the default of 2.

  •  Tags:  
  • Related