Help

Difference between revisions of "SoX"

Line 26: Line 26:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Generate a noise profile in sox: ===
+
=== Generate a noise profile in sox ===
<syntaxhighlight lang="bash">sox noise-audio.wav -n noiseprof noise.prof</syntaxhighlight>
+
<syntaxhighlight lang="bash"># From one noise sample audio file
 +
sox noise-audio.wav -n noiseprof noise.prof</syntaxhighlight>
 +
 
 +
<syntaxhighlight lang="bash"># Contact noise samples into single noise sample
 +
ffmpeg -f concat -safe 0 -i <(for f in ./noise/*.wav; do echo "file '$PWD/$f'"; done) -c copy ./noise/noise-audio.wav
 +
 
 +
# From sample, creates noise profile
 +
sox ./noise/noise-audio.wav -n noiseprof ./noise/noise.prof ;
 +
</syntaxhighlight>
  
 
=== Clean the noise from the audio ===
 
=== Clean the noise from the audio ===

Revision as of 14:17, 15 January 2024

Dependencies

  • SoX - Sound eXchange, the Swiss Army knife of audio manipulation
  • FFmpeg - ffmpeg video converter
    • -ss: the time offset from beginning. (h:m:s.ms).
    • -t duration: record or transcode duration seconds of audio/video.

Denoise

Extract noise samples

Given a file with silence in its first 0.3sec. :

# sox in.ext out.ext trim {start: s.ms} {duration: s.ms}
sox audio.wav noise-audio.wav trim 0 0.300     
# or :
ffmpeg -i audio.wav -vn -ss 00:00:00 -t 00:00:00.300 noise-audio.wav

For a folder with .wav audios with noisy silence in first 150ms and last 200ms :

# Create noise samples
mkdir -p ./noise;
for file in ./wav/*.wav;
do key=$(basename "$file" .wav);
  ffmpeg -i "$file" -vn -ss 00:00:00 -t 00:00:00.150 ./noise/noise-"$key"-head.wav ;
  ffmpeg -vn -sseof -0.200 -t 0.200 -i "$file" ./noise/noise-"$key"-tail.wav
  # sox "$file" ./noise/noise-"$key"-head.wav trim 0 0.200     
  # sox "$file"  ./noise/noise-"$key"-tail.wav reverse trim 0 0.200 reverse
done;

Generate a noise profile in sox

# From one noise sample audio file
sox noise-audio.wav -n noiseprof noise.prof
# Contact noise samples into single noise sample
ffmpeg -f concat -safe 0 -i <(for f in ./noise/*.wav; do echo "file '$PWD/$f'"; done) -c copy ./noise/noise-audio.wav

# From sample, creates noise profile
sox ./noise/noise-audio.wav -n noiseprof ./noise/noise.prof ;

Clean the noise from the audio

Single file :

sox audio.wav audio-clean.wav noisered noise.prof 0.21

Batch of files:

mkdir -p ./clean;
for file in ./*.wav;do key=$(basename "$file" .wav); sox "$file" ./clean/"$key".wav noisered ./noise.prof 0.21; done;

According to source :

Change 0.21 to adjust the level of sensitivity in the sampling rates (I found 0.2-0.3 often provides best result).

Sources

Fades

To fade-in on 0.3s and out in 0.4s, you can use a simple ./fadeWav.sh bash script, such as:

sox input.wav output.wav fade "0:0.3" `soxi -d input.wav` "0:0.3"

Or as a script:

#! /bin/bash
WAV_IN=$1
WAV_OUT=$2
FADE_IN_L="0:0.3"
FADE_OUT_L="0:0.4"

LENGTH=`soxi -d $WAV_IN`

sox $WAV_IN $WAV_OUT fade $FADE_IN_L $LENGTH $FADE_OUT_L

soxi -d returns the length of the wav file. See sox documentation for more on soxi.

You can run this bash script as follows:

./fadeWav.sh input.wav faded.wav

Sources

See also

Lingua Libre technical helps
Template {{Speakers category}} • {{Recommended lists}} • {{To iso 639-2}} • {{To iso 639-3}} • {{Userbox-records}} • {{Bot steps}}
Audio files How to create a frequency list?Convert files formatsDenoise files with SoXRename and mass rename
Bots Help:BotsLinguaLibre:BotHelp:Log in to Lingua Libre with PywikibotLingua Libre Bot (gh) • OlafbotPamputtBotDragons Bot (gh)
MediaWiki MediaWiki: Help:Documentation opérationelle MediawikiHelp:Database structureHelp:CSSHelp:RenameHelp:OAuthLinguaLibre:User rights (rate limit) • Module:Lingua Libre record & {{Lingua Libre record}}JS scripts: MediaWiki:Common.jsLastAudios.jsSoundLibrary.jsItemsSugar.jsLexemeQueriesGenerator.js (pad) • Sparql2data.js (pad) • LanguagesGallery.js (pad) • Gadgets: Gadget-LinguaImporter.jsGadget-Demo.jsGadget-RecentNonAudio.jsLiLiZip.js
Queries Help:APIsHelp:SPARQLSPARQL (intermediate) (stub) • SPARQL for lexemes (stub) • SPARQL for maintenanceLingualibre:Wikidata (stub) • Help:SPARQL (HAL)
Reuses Help:Download datasetsHelp:Embed audio in HTML
Unstable & tests Help:SPARQL/test
Categories Category:Technical reports