I need to split a given .wav file into 1 second wav files for an android application. Is there any library I can use and if not what method should I follow.
Asked
Active
Viewed 197 times
1 Answers
0
here is a bash shell script which splits a wav file into 1 second clips by calling ffmpeg ... I run this on my linux laptop ... I do not know whether ffmpeg is available on android it is available as a library callable from say c or java
#!/bin/bash
# https://stackoverflow.com/questions/50087271/how-to-preprocess-audio-data-for-input-into-a-neural-network/50088265#50088265
# Split a wav file into multiple optionally overlapping .wav files using ffmpeg
# https://stackoverflow.com/questions/51188268/split-a-wav-file-into-multiple-overlapping-wav-files-using-ffmpeg
input_audio=${HOME}/Lee_Smolin_Physics_Envy_and_Economic_Theory-cWn86ESze6M_mono_1st_few_seconds.wav
# input_audio=${HOME}/Lee_Smolin_Physics_Envy_and_Economic_Theory-cWn86ESze6M_mono_1st_few_seconds.mp3
output_dir="./output_v08"
if [[ ! -d "$output_dir" ]]; then
echo "mkdir -p ${output_dir}"
mkdir -p "${output_dir}"
fi
# output_audio_prefix=output_v03/aaa
output_audio_prefix="${output_dir}/aaa"
snip_duration=1.0 # in seconds
# snip_duration=1.5 # in seconds
# https://ffmpeg.org/ffmpeg.html
# https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax
# ffmpeg -i input.mp3 -ss 10 -t 6 -acodec copy output.mp3
# ffmpeg -i $input_audio -ss 0 -t 1 -acodec copy $output_audio_prefix
:<<'good_here' # this is a bulk comment to show an example of what below loop is doing
ffmpeg -i $input_audio -ss 0 -t $snip_duration -acodec copy ${output_audio_prefix}.0.00.wav
ffmpeg -i $input_audio -ss 0.20 -t $snip_duration -acodec copy ${output_audio_prefix}.0.20.wav
ffmpeg -i $input_audio -ss 0.40 -t $snip_duration -acodec copy ${output_audio_prefix}.0.40.wav
ffmpeg -i $input_audio -ss 0.60 -t $snip_duration -acodec copy ${output_audio_prefix}.0.60.wav
ffmpeg -i $input_audio -ss 0.80 -t $snip_duration -acodec copy ${output_audio_prefix}.0.80.wav
ffmpeg -i $input_audio -ss 1.00 -t $snip_duration -acodec copy ${output_audio_prefix}.1.00.wav
good_here
start_point=0 # start from beginning of audio file
# slide_window_over_time=500 # in milliseconds
slide_window_over_time=1000 # in milliseconds
# ffmpeg -i $input_audio -af astats -f null -
echo input_audio $input_audio
if [[ ! -f $input_audio ]]; then
echo "ERROR - input file does not exist -->$input_audio<-- "
exit
fi
# duration_input_audio=$( ffprobe -i $input_audio -show_entries format=duration -v quiet -of csv="p=0" | bc * 1000 )
duration_input_audio=$( ffprobe -i $input_audio -show_entries format=duration -v quiet -of csv="p=0" )
echo duration_input_audio $duration_input_audio
duration_in_milli_float=$( echo "$duration_input_audio * 1000" | bc )
echo duration_in_milli_float $duration_in_milli_float
duration_in_milli_int=${duration_in_milli_float%.*}
echo duration_in_milli_int $duration_in_milli_int
echo start_point $start_point
for((curr_window_start=$start_point;$curr_window_start<=$duration_in_milli_int;)) do
echo curr_window_start $curr_window_start
curr_window_start_seconds=$( echo "$curr_window_start / 1000" | bc -l )
echo curr_window_start_seconds $curr_window_start_seconds
curr_output_file=${output_audio_prefix}.${curr_window_start_seconds}.wav
echo curr_output_file $curr_output_file
# ffmpeg -i $input_audio -ss 0.60 -t $snip_duration -acodec copy ${output_audio_prefix}.0.60.wav
ffmpeg -i $input_audio -ss $curr_window_start_seconds -t $snip_duration -acodec copy ${curr_output_file}
# ...
curr_window_start=$( echo "$curr_window_start + $slide_window_over_time" | bc )
done
# .......... above can also be achieved directly by executing
# echo
# echo above can also be achieved directly by executing
# echo
# ffprobe -f lavfi -i amovie=${input_audio},astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0
above works however you can certainly roll your own code in say java to split a wav file into clips ... it may take a couple days of coding or less once up to speed on digital audio, make that a couple of weeks if starting from a stand still as it involves notions like data endianness and multi byte storage of say 16 bit integers

Scott Stensland
- 26,870
- 12
- 93
- 104