How to convert wav to flac from python?

I just started using Python and am using PyAudio and Wave modules to record sound from a microphone and convert it to a .wav file.

What I'm trying to do now convert this .wav to .flac . I saw several ways to do this, all of which involve installing the converter and putting it in my environmental PATH and calling it through os.system .

Are there other ways to convert .wav to .flac via Python? The solution I'm looking for should work on both Windows and Linux.

+7
python converter audio flac wav
source share
3 answers

You may be looking for Python Audio Tools.

It seems like PAT can do whatever you need.

+3
source share

I have not tested this solution, but you can use pydub

  from pydub import AudioSegment song = AudioSegment.from_wav("test.wav") song.export("testme.flac",format = "flac") 

Conversion is supported by numerous file formats (see the list of supported ffmpeg file formats here https://ffmpeg.org/general.html#Audio-Codecs

+3
source share

Here is a sample code that uses the Python Python Audio Tools library to convert a .wav file to a .flac file:

 import audiotools filepath_wav = 'music.wav' filepath_flac = filepath_wav.replace(".wav", ".flac") audiotools.open(filepath_wav).convert(filepath_flac, audiotools.FlacAudio, compression_quality) 

To install Python Audio Tools: http://audiotools.sourceforge.net/install.html

enter image description here

https://wiki.python.org/moin/Audio/ ( mirror ) tries to list all the useful Python libraries for working with sound in conjunction with Python.


Longer Python script for multi-threaded conversion of wav files to FLAC files, from http://magento4newbies.blogspot.com/2014/11/converting-wav-files-to-flac-with.html

 from Queue import Queue import logging import os from threading import Thread import audiotools from audiotools.wav import InvalidWave """ Wave 2 Flac converter script using audiotools From http://magento4newbies.blogspot.com/2014/11/converting-wav-files-to-flac-with.html """ class W2F: logger = '' def __init__(self): global logger # create logger logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # create a file handler handler = logging.FileHandler('converter.log') handler.setLevel(logging.INFO) # create a logging format formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # add the handlers to the logger logger.addHandler(handler) def convert(self): global logger file_queue = Queue() num_converter_threads = 5 # collect files to be converted for root, dirs, files in os.walk("/Volumes/music"): for file in files: if file.endswith(".wav"): file_wav = os.path.join(root, file) file_flac = file_wav.replace(".wav", ".flac") if (os.path.exists(file_flac)): logger.debug(''.join(["File ",file_flac, " already exists."])) else: file_queue.put(file_wav) logger.info("Start converting: %s files", str(file_queue.qsize())) # Set up some threads to convert files for i in range(num_converter_threads): worker = Thread(target=self.process, args=(file_queue,)) worker.setDaemon(True) worker.start() file_queue.join() def process(self, q): """This is the worker thread function. It processes files in the queue one after another. These daemon threads go into an infinite loop, and only exit when the main thread ends. """ while True: global logger compression_quality = '0' #min compression file_wav = q.get() file_flac = file_wav.replace(".wav", ".flac") try: audiotools.open(file_wav).convert(file_flac,audiotools.FlacAudio, compression_quality) logger.info(''.join(["Converted ", file_wav, " to: ", file_flac])) q.task_done() except InvalidWave: logger.error(''.join(["Failed to open file ", file_wav, " to: ", file_flac," failed."]), exc_info=True) except Exception, e: logger.error('ExFailed to open file', exc_info=True) 
+2
source share

All Articles