ruslanmv's picture
Add application file
f692269
from pydub import AudioSegment
#from pydub.utils import mediainfo
from pydub.utils import make_chunks
import math
#flac_audio = AudioSegment.from_file("sample.flac", "flac")
#flac_audio.export("audio.wav", format="wav")
def split_audio_wav(filename):
myaudio = AudioSegment.from_file(filename , "wav")
channel_count = myaudio.channels #Get channels
sample_width = myaudio.sample_width #Get sample width
duration_in_sec = len(myaudio) / 1000#Length of audio in sec
sample_rate = myaudio.frame_rate
print("sample_width=", sample_width)
print("channel_count=", channel_count)
print("duration_in_sec=", duration_in_sec)
print("frame_rate=", sample_rate)
bit_rate =16 #assumption , you can extract from mediainfo("test.wav") dynamically
wav_file_size = (sample_rate * bit_rate * channel_count * duration_in_sec) / 8
print("wav_file_size = ",wav_file_size)
file_split_size = 40000000 # 40mb OR 40, 000, 000 bytes
total_chunks = wav_file_size // file_split_size
#Get chunk size by following method #There are more than one ofcourse
#for duration_in_sec (X) --> wav_file_size (Y)
#So whats duration in sec (K) --> for file size of 40Mb
# K = X * 40Mb / Y
chunk_length_in_sec = math.ceil((duration_in_sec * 40000000 ) /wav_file_size) #in sec
chunk_length_ms = chunk_length_in_sec * 1000
chunks = make_chunks(myaudio, chunk_length_ms)
number_chunks=len(chunks)
chunks_list=[]
#Export all of the individual chunks as wav files
for i, chunk in enumerate(chunks):
chunk_name = "chunk{0}.wav".format(i)
print("exporting", chunk_name)
chunk.export(chunk_name, format="wav")
chunks_list.append(chunk_name)
return chunks_list