Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bass distortion on mobile #50

Open
ghost opened this issue Jan 19, 2018 · 2 comments
Open

Bass distortion on mobile #50

ghost opened this issue Jan 19, 2018 · 2 comments

Comments

@ghost
Copy link

ghost commented Jan 19, 2018

Hi,

Love the library! Works great and haven't had any trouble getting it up and running. Recordings on desktop devices sound great! Only issue that I've encountered is that voice audio recorded on mobile devices (both Android and iOS) is about a half octave lower than real life. Do you have any idea what might be going on or how to fix the issue?

My app (still under development) is deployed at bespoke-audio.com. Feel free to login and observe the effect. I've been testing with an iPhone X and an LG Aristo (Android) and noticed it on both devices.

@chrisuehlinger
Copy link

chrisuehlinger commented Oct 14, 2020

Hey! I know it's been a couple years, but I just solved a similar problem and want to share my answer for future answer-googlers:

The arguments of new lamejs.Mp3Encoder() are: number of channels, sample rate, bit rate.

If you're using the default arguments in the docs (1 channel, 44100Hz sample rate, 128kbps bitrate) then your app will work fine on computers where the microphone is recording with a sample rate of 44100. However on some platforms (perhaps mobile, but I also ran into this when using a USB mic on Windows in Chrome) the sample rate is 48000Hz. In those cases, the encoder will output ~48 seconds of slowed down audio for every ~44 seconds of normal input audio, with the pitch being slightly lower as well.

You'll need to take the AudioContext you used for recording and check audioContext.sampleRate to find out what sample rate was used for recording. Set that as the sample rate for lamejs.

Note: You can't guess the sample rate from looking at the browser, OS, or anything else. It can change from one AudioContext to another even within the same browser, depending on how the user's microphone and sound drivers are configured for each microphone they have.

@patrickmonteiro
Copy link

patrickmonteiro commented Sep 28, 2023

@chrisuehlinger The best explanation I found on the internet. I tested your solution and it worked perfectly.
Thanks!

const audioCtx = new AudioContext();

const recorder = new Recorder({
  format: 'mp3',
  bitRate: 128,
  sampleRate: audioCtx.sampleRate || 44100,
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants