Skip to content

Instantly share code, notes, and snippets.

@h-mayorquin
Last active March 1, 2025 23:32
Show Gist options
  • Save h-mayorquin/6ed9ad9038e5643977aee189ae63d946 to your computer and use it in GitHub Desktop.
Save h-mayorquin/6ed9ad9038e5643977aee189ae63d946 to your computer and use it in GitHub Desktop.
generate stub audio
from pathlib import Path
from pydub import AudioSegment
import numpy as np
import scipy.io.wavfile as wav
# Create output directory
output_dir = Path("audio_test_files")
output_dir.mkdir(exist_ok=True)
# Define output filenames with realistic names
formats = {
# Mono 16-bit PCM
"wav_16bit_mono": output_dir / "Mono_16bit_PCM.wav",
"flac_16bit_mono": output_dir / "Mono_16bit_FLAC.flac",
"aiff_16bit_mono": output_dir / "Mono_16bit_AIFF.aiff",
"ogg_16bit_mono": output_dir / "Mono_16bit_OGG.ogg",
"mp3_128kbps_mono": output_dir / "Mono_128kbps_MP3.mp3",
"mp3_320kbps_mono": output_dir / "Mono_320kbps_MP3.mp3",
# Stereo 16-bit PCM
"wav_16bit_stereo": output_dir / "Stereo_16bit_PCM.wav",
"flac_16bit_stereo": output_dir / "Stereo_16bit_FLAC.flac",
"aiff_16bit_stereo": output_dir / "Stereo_16bit_AIFF.aiff",
"ogg_16bit_stereo": output_dir / "Stereo_16bit_OGG.ogg",
"mp3_128kbps_stereo": output_dir / "Stereo_128kbps_MP3.mp3",
"mp3_320kbps_stereo": output_dir / "Stereo_320kbps_MP3.mp3",
# High-resolution 24-bit stereo
"wav_24bit_stereo": output_dir / "Stereo_24bit_PCM.wav",
"flac_24bit_stereo": output_dir / "Stereo_24bit_FLAC.flac",
"aiff_24bit_stereo": output_dir / "Stereo_24bit_AIFF.aiff",
# 32-bit float stereo
"wav_32float_stereo": output_dir / "Stereo_32bit_Float_PCM.wav",
# Multi-channel 5.1 and 7.1 surround formats
"wav_16bit_5_1": output_dir / "5.1_Surround_16bit_PCM.wav",
"wav_16bit_7_1": output_dir / "7.1_Surround_16bit_PCM.wav",
"flac_16bit_5_1": output_dir / "5.1_Surround_16bit_FLAC.flac",
"flac_16bit_7_1": output_dir / "7.1_Surround_16bit_FLAC.flac",
"aiff_16bit_5_1": output_dir / "5.1_Surround_16bit_AIFF.aiff",
"aiff_16bit_7_1": output_dir / "7.1_Surround_16bit_AIFF.aiff",
"ogg_16bit_5_1": output_dir / "5.1_Surround_16bit_OGG.ogg",
"ogg_16bit_7_1": output_dir / "7.1_Surround_16bit_OGG.ogg",
}
# Audio parameters
sample_rate = 44100 # Standard CD-quality
duration_seconds = 0.1 # **100 milliseconds**
num_samples = int(sample_rate * duration_seconds)
frequency = 440.0 # Hz (A4 tone)
# Generate a 440 Hz sine wave
t = np.linspace(0, duration_seconds, num_samples, endpoint=False)
sine_wave = 0.5 * np.sin(2 * np.pi * frequency * t) # Normalized amplitude [-0.5, 0.5]
# Convert sine wave to different bit-depths
sine_16bit = (sine_wave * np.iinfo(np.int16).max).astype(np.int16)
sine_24bit = (sine_wave * np.iinfo(np.int32).max).astype(np.int32) # Stored in 32-bit for compatibility
sine_32float = sine_wave.astype(np.float32)
# Mono (single-channel)
sine_16bit_mono = sine_16bit.reshape(-1, 1)
sine_24bit_mono = sine_24bit.reshape(-1, 1)
sine_32float_mono = sine_32float.reshape(-1, 1)
# Stereo (Left & Right channels)
sine_16bit_stereo = np.column_stack([sine_16bit, sine_16bit])
sine_24bit_stereo = np.column_stack([sine_24bit, sine_24bit])
sine_32float_stereo = np.column_stack([sine_32float, sine_32float])
# Multi-channel (5.1 and 7.1) - Sine wave in all channels
sine_5_1 = np.tile(sine_16bit[:, np.newaxis], (1, 6)) # Copy sine wave into 6 channels
sine_7_1 = np.tile(sine_16bit[:, np.newaxis], (1, 8)) # Copy sine wave into 8 channels
# Save Mono WAV files
wav.write(formats["wav_16bit_mono"], sample_rate, sine_16bit_mono)
wav.write(formats["wav_24bit_stereo"], sample_rate, sine_24bit_mono.astype(np.int32))
wav.write(formats["wav_32float_stereo"], sample_rate, sine_32float_mono)
# Save Stereo WAV files
wav.write(formats["wav_16bit_stereo"], sample_rate, sine_16bit_stereo)
wav.write(formats["wav_24bit_stereo"], sample_rate, sine_24bit_stereo.astype(np.int32))
wav.write(formats["wav_32float_stereo"], sample_rate, sine_32float_stereo)
# Save Multi-Channel WAV files
wav.write(formats["wav_16bit_5_1"], sample_rate, sine_5_1)
wav.write(formats["wav_16bit_7_1"], sample_rate, sine_7_1)
# Convert mono WAV to other formats
audio_mono = AudioSegment.from_wav(formats["wav_16bit_mono"])
audio_mono.export(formats["flac_16bit_mono"], format="flac")
audio_mono.export(formats["aiff_16bit_mono"], format="aiff")
audio_mono.export(formats["ogg_16bit_mono"], format="ogg")
audio_mono.export(formats["mp3_128kbps_mono"], format="mp3", bitrate="128k")
audio_mono.export(formats["mp3_320kbps_mono"], format="mp3", bitrate="320k")
# Convert stereo WAV to other formats
audio_stereo = AudioSegment.from_wav(formats["wav_16bit_stereo"])
audio_stereo.export(formats["flac_16bit_stereo"], format="flac")
audio_stereo.export(formats["aiff_16bit_stereo"], format="aiff")
audio_stereo.export(formats["ogg_16bit_stereo"], format="ogg")
audio_stereo.export(formats["mp3_128kbps_stereo"], format="mp3", bitrate="128k")
audio_stereo.export(formats["mp3_320kbps_stereo"], format="mp3", bitrate="320k")
# Convert Multi-Channel WAV to FLAC, AIFF, OGG
for ch_format, data in [
("16bit_5_1", sine_5_1),
("16bit_7_1", sine_7_1),
]:
audio_multi = AudioSegment.from_wav(formats[f"wav_{ch_format}"])
audio_multi.export(formats[f"flac_{ch_format}"], format="flac")
audio_multi.export(formats[f"aiff_{ch_format}"], format="aiff")
audio_multi.export(formats[f"ogg_{ch_format}"], format="ogg")
# Print generated files
for fmt, filename in formats.items():
print(f"Generated: {filename}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment