Spaces:
Sleeping
Sleeping
| 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 |