You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.2 KiB
90 lines
3.2 KiB
#!/usr/bin/env python3 |
|
""" |
|
Audio conversion script to convert audio files to u8 22100 Hz format |
|
""" |
|
|
|
from pydub import AudioSegment |
|
import os |
|
import sys |
|
import argparse |
|
|
|
def convert_audio(input_path, output_path=None): |
|
"""Convert audio file to u8 format at 22100 Hz""" |
|
|
|
# Generate output path if not provided |
|
if output_path is None: |
|
base_name = os.path.splitext(input_path)[0] |
|
output_path = f"{base_name}_converted.wav" |
|
|
|
if not os.path.exists(input_path): |
|
print(f"Error: {input_path} not found!") |
|
return |
|
|
|
try: |
|
# Load the audio file |
|
print(f"Loading {input_path}...") |
|
audio = AudioSegment.from_wav(input_path) |
|
|
|
# Print current format info |
|
print(f"Original format:") |
|
print(f" Sample rate: {audio.frame_rate} Hz") |
|
print(f" Channels: {audio.channels}") |
|
print(f" Sample width: {audio.sample_width} bytes ({audio.sample_width * 8} bits)") |
|
print(f" Duration: {len(audio)} ms") |
|
|
|
# Convert to mono if stereo |
|
if audio.channels > 1: |
|
print("Converting to mono...") |
|
audio = audio.set_channels(1) |
|
|
|
# Convert to 22100 Hz sample rate |
|
print("Converting sample rate to 22100 Hz...") |
|
audio = audio.set_frame_rate(22100) |
|
|
|
# Convert to 8-bit unsigned (u8) |
|
print("Converting to 8-bit unsigned format...") |
|
audio = audio.set_sample_width(1) # 1 byte = 8 bits |
|
|
|
# Export the converted audio |
|
print(f"Saving to {output_path}...") |
|
audio.export(output_path, format="wav") |
|
|
|
# Print new format info |
|
converted_audio = AudioSegment.from_wav(output_path) |
|
print(f"\nConverted format:") |
|
print(f" Sample rate: {converted_audio.frame_rate} Hz") |
|
print(f" Channels: {converted_audio.channels}") |
|
print(f" Sample width: {converted_audio.sample_width} bytes ({converted_audio.sample_width * 8} bits)") |
|
print(f" Duration: {len(converted_audio)} ms") |
|
|
|
print(f"\nConversion complete! Output saved as: {output_path}") |
|
|
|
# Optionally replace the original file |
|
replace = input("\nReplace original mine.wav with converted version? (y/n): ").lower() |
|
if replace == 'y': |
|
import shutil |
|
# Backup original |
|
backup_path = "sound/mine_original.wav" |
|
shutil.copy2(input_path, backup_path) |
|
print(f"Original file backed up as: {backup_path}") |
|
|
|
# Replace original |
|
shutil.copy2(output_path, input_path) |
|
os.remove(output_path) |
|
print(f"Original file replaced with converted version.") |
|
|
|
except Exception as e: |
|
print(f"Error during conversion: {e}") |
|
|
|
def main(): |
|
"""Main function to handle command line arguments""" |
|
parser = argparse.ArgumentParser(description='Convert audio files to u8 22100 Hz format') |
|
parser.add_argument('input_file', help='Input audio file path') |
|
parser.add_argument('-o', '--output', help='Output file path (optional)') |
|
|
|
args = parser.parse_args() |
|
|
|
convert_audio(args.input_file, args.output) |
|
|
|
if __name__ == "__main__": |
|
main()
|
|
|