[{"data":1,"prerenderedAt":1101},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Faudio-augmentation":46,"\u002Fblog\u002Faudio-augmentation-surround":1097},[4],{"title":5,"path":6,"stem":7,"children":8,"page":45},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41],{"title":10,"path":11,"stem":12},"Audio Augmentation Techniques for Deep Learning","\u002Fblog\u002Faudio-augmentation","blog\u002Faudio-augmentation",{"title":14,"path":15,"stem":16},"Speed Up Whisper with CTranslate2","\u002Fblog\u002Fc-translate","blog\u002Fc-translate",{"title":18,"path":19,"stem":20},"Calling C++ and Go from Dart using FFI","\u002Fblog\u002Fdart-ffi-native-bridge","blog\u002Fdart-ffi-native-bridge",{"title":22,"path":23,"stem":24},"Russey Keo High School Memories","\u002Fblog\u002Fmemory","blog\u002Fmemory",{"title":26,"path":27,"stem":28},"My Dev Setup: Same Keys Everywhere","\u002Fblog\u002Fmy-dev-setup","blog\u002Fmy-dev-setup",{"title":30,"path":31,"stem":32},"Data Extraction with LangChain and Ollama Locally","\u002Fblog\u002Fpydantic-llm","blog\u002Fpydantic-llm",{"title":34,"path":35,"stem":36},"7-Segment LED Display with Proteus Simulation","\u002Fblog\u002Fseven-segment","blog\u002Fseven-segment",{"title":38,"path":39,"stem":40},"Understanding JWT Refresh Token Rotation & Revocation","\u002Fblog\u002Funderstand-refresh-token","blog\u002Funderstand-refresh-token",{"title":42,"path":43,"stem":44},"Khmer Speech Recognition","\u002Fblog\u002Fwhisper","blog\u002Fwhisper",false,{"id":47,"title":10,"author":48,"body":52,"date":1085,"description":1086,"extension":1087,"image":1088,"meta":1089,"minRead":381,"navigation":1094,"path":11,"seo":1095,"stem":12,"__hash__":1096},"blog\u002Fblog\u002Faudio-augmentation.md",{"name":49,"avatar":50},"Phanith LIM",{"src":51,"alt":49},"\u002Fmyprofile.jpg",{"type":53,"value":54,"toc":1077},"minimark",[55,59,62,65,70,73,76,136,143,148,156,162,166,172,178,182,185,196,199,462,465,579,588,591,597,607,611,614,694,701,707,711,717,723,727,731,734,816,850,854,857,940,970,974,981,987,991,1025,1028,1045,1049,1052,1073],[56,57,58],"p",{},"When you do not have enough audio to train on, you make more out of what you have. Add some noise, speed a clip up, shift its pitch: the words stay the same, so the label stays the same, but the model sees a new example.",[56,60,61],{},"That is audio augmentation. It is cheaper than collecting more recordings, and it stops a model from memorising the quirks of the few recordings it has.",[56,63,64],{},"Here are the six transformations I keep coming back to.",[66,67,69],"h3",{"id":68},"_1-noise-injection","1. Noise injection",[56,71,72],{},"Real recordings are never clean. Adding random noise to a clip teaches the model to listen past a fan, a street, a bad microphone.",[56,74,75],{},"The noise comes from a distribution, and the two I use are the normal and the uniform distribution:",[77,78,79,92],"table",{},[80,81,82],"thead",{},[83,84,85,89],"tr",{},[86,87,88],"th",{},"Normal Distribution",[86,90,91],{},"Uniform Distribution",[93,94,95,104,112,120,128],"tbody",{},[83,96,97,101],{},[98,99,100],"td",{},"Depicted as a bell curve.",[98,102,103],{},"Depicted as a flat, horizontal line.",[83,105,106,109],{},[98,107,108],{},"Probability is concentrated around the mean.",[98,110,111],{},"Probability is spread evenly across a range.",[83,113,114,117],{},[98,115,116],{},"Values closer to the mean are more likely.",[98,118,119],{},"All values within the range are equally likely.",[83,121,122,125],{},[98,123,124],{},"Represented by a peak at the mean, with tails.",[98,126,127],{},"Represented by a flat line indicating constant probability.",[83,129,130,133],{},[98,131,132],{},"Gaussian noise is generated using the normal distribution.",[98,134,135],{},"Uniform noise is generated using the uniform distribution.",[56,137,138],{},[139,140],"img",{"alt":141,"src":142},"Comparison of Normal and Uniform Distributions","\u002Fblog\u002Faudio-augmentation\u002Fimage1.png",[56,144,145],{},[146,147,141],"em",{},[56,149,150,151,155],{},"Think of a classroom. ",[152,153,154],"strong",{},"Gaussian noise"," is the air conditioner humming in the background: constant, and easy enough to listen past.",[56,157,158],{},[139,159],{"alt":160,"src":161},"Gaussian noise added to the original signal","\u002Fblog\u002Faudio-augmentation\u002Fimage2.png",[56,163,164],{},[146,165,160],{},[56,167,168,171],{},[152,169,170],{},"Uniform noise"," is a sudden clap. It cuts across the teacher's voice, and the student (the model) loses the word.",[56,173,174],{},[139,175],{"alt":176,"src":177},"Uniform noise added to the original signal","\u002Fblog\u002Faudio-augmentation\u002Fimage3.png",[56,179,180],{},[146,181,176],{},[56,183,184],{},"The formula is just an addition:",[186,187,193],"pre",{"className":188,"code":190,"language":191,"meta":192},[189],"language-text","Noisy Signal = Original Signal + (Noise Amplitude * Random Noise)\n","text","",[194,195,190],"code",{"__ignoreMap":192},[56,197,198],{},"To see what any augmentation did, plot the two signals side by side:",[186,200,204],{"className":201,"code":202,"language":203,"meta":192,"style":192},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","def _plot_signal_and_augmented_signal(signal, augmented_signal, sr):\n    fig, ax = plt.subplots(ncols=2, figsize=(15, 4))\n    librosa.display.waveshow(signal, sr=sr, ax=ax[0])\n    ax[0].set(title=\"Original signal\")\n    librosa.display.waveshow(augmented_signal, sr=sr, ax=ax[1])\n    ax[1].set(title=\"Augmentation signal\")\n    plt.show()\n","python",[194,205,206,241,295,344,379,420,448],{"__ignoreMap":192},[207,208,211,215,219,223,227,230,233,235,238],"span",{"class":209,"line":210},"line",1,[207,212,214],{"class":213},"spNyl","def",[207,216,218],{"class":217},"s2Zo4"," _plot_signal_and_augmented_signal",[207,220,222],{"class":221},"sMK4o","(",[207,224,226],{"class":225},"sHdIc","signal",[207,228,229],{"class":221},",",[207,231,232],{"class":225}," augmented_signal",[207,234,229],{"class":221},[207,236,237],{"class":225}," sr",[207,239,240],{"class":221},"):\n",[207,242,244,248,250,253,256,259,262,265,267,270,272,276,278,281,284,287,289,292],{"class":209,"line":243},2,[207,245,247],{"class":246},"sTEyZ","    fig",[207,249,229],{"class":221},[207,251,252],{"class":246}," ax ",[207,254,255],{"class":221},"=",[207,257,258],{"class":246}," plt",[207,260,261],{"class":221},".",[207,263,264],{"class":217},"subplots",[207,266,222],{"class":221},[207,268,269],{"class":225},"ncols",[207,271,255],{"class":221},[207,273,275],{"class":274},"sbssI","2",[207,277,229],{"class":221},[207,279,280],{"class":225}," figsize",[207,282,283],{"class":221},"=(",[207,285,286],{"class":274},"15",[207,288,229],{"class":221},[207,290,291],{"class":274}," 4",[207,293,294],{"class":221},"))\n",[207,296,298,301,303,307,309,312,314,316,318,320,322,325,327,330,332,335,338,341],{"class":209,"line":297},3,[207,299,300],{"class":246},"    librosa",[207,302,261],{"class":221},[207,304,306],{"class":305},"swJcz","display",[207,308,261],{"class":221},[207,310,311],{"class":217},"waveshow",[207,313,222],{"class":221},[207,315,226],{"class":217},[207,317,229],{"class":221},[207,319,237],{"class":225},[207,321,255],{"class":221},[207,323,324],{"class":217},"sr",[207,326,229],{"class":221},[207,328,329],{"class":225}," ax",[207,331,255],{"class":221},[207,333,334],{"class":217},"ax",[207,336,337],{"class":221},"[",[207,339,340],{"class":274},"0",[207,342,343],{"class":221},"])\n",[207,345,347,350,352,354,357,360,362,365,367,370,374,376],{"class":209,"line":346},4,[207,348,349],{"class":246},"    ax",[207,351,337],{"class":221},[207,353,340],{"class":274},[207,355,356],{"class":221},"].",[207,358,359],{"class":217},"set",[207,361,222],{"class":221},[207,363,364],{"class":225},"title",[207,366,255],{"class":221},[207,368,369],{"class":221},"\"",[207,371,373],{"class":372},"sfazB","Original signal",[207,375,369],{"class":221},[207,377,378],{"class":221},")\n",[207,380,382,384,386,388,390,392,394,397,399,401,403,405,407,409,411,413,415,418],{"class":209,"line":381},5,[207,383,300],{"class":246},[207,385,261],{"class":221},[207,387,306],{"class":305},[207,389,261],{"class":221},[207,391,311],{"class":217},[207,393,222],{"class":221},[207,395,396],{"class":217},"augmented_signal",[207,398,229],{"class":221},[207,400,237],{"class":225},[207,402,255],{"class":221},[207,404,324],{"class":217},[207,406,229],{"class":221},[207,408,329],{"class":225},[207,410,255],{"class":221},[207,412,334],{"class":217},[207,414,337],{"class":221},[207,416,417],{"class":274},"1",[207,419,343],{"class":221},[207,421,423,425,427,429,431,433,435,437,439,441,444,446],{"class":209,"line":422},6,[207,424,349],{"class":246},[207,426,337],{"class":221},[207,428,417],{"class":274},[207,430,356],{"class":221},[207,432,359],{"class":217},[207,434,222],{"class":221},[207,436,364],{"class":225},[207,438,255],{"class":221},[207,440,369],{"class":221},[207,442,443],{"class":372},"Augmentation signal",[207,445,369],{"class":221},[207,447,378],{"class":221},[207,449,451,454,456,459],{"class":209,"line":450},7,[207,452,453],{"class":246},"    plt",[207,455,261],{"class":221},[207,457,458],{"class":217},"show",[207,460,461],{"class":221},"()\n",[56,463,464],{},"And the noise itself:",[186,466,468],{"className":201,"code":467,"language":203,"meta":192,"style":192},"def add_white_noise(signal, noise_percentage_factor):\n    noise = np.random.normal(loc=0, scale=signal.std(), size=signal.shape)\n    augmented_signal = signal + noise * noise_percentage_factor\n    return augmented_signal\n",[194,469,470,488,548,570],{"__ignoreMap":192},[207,471,472,474,477,479,481,483,486],{"class":209,"line":210},[207,473,214],{"class":213},[207,475,476],{"class":217}," add_white_noise",[207,478,222],{"class":221},[207,480,226],{"class":225},[207,482,229],{"class":221},[207,484,485],{"class":225}," noise_percentage_factor",[207,487,240],{"class":221},[207,489,490,493,495,498,500,503,505,508,510,513,515,517,519,522,524,526,528,531,534,537,539,541,543,546],{"class":209,"line":243},[207,491,492],{"class":246},"    noise ",[207,494,255],{"class":221},[207,496,497],{"class":246}," np",[207,499,261],{"class":221},[207,501,502],{"class":305},"random",[207,504,261],{"class":221},[207,506,507],{"class":217},"normal",[207,509,222],{"class":221},[207,511,512],{"class":225},"loc",[207,514,255],{"class":221},[207,516,340],{"class":274},[207,518,229],{"class":221},[207,520,521],{"class":225}," scale",[207,523,255],{"class":221},[207,525,226],{"class":217},[207,527,261],{"class":221},[207,529,530],{"class":217},"std",[207,532,533],{"class":221},"(),",[207,535,536],{"class":225}," size",[207,538,255],{"class":221},[207,540,226],{"class":217},[207,542,261],{"class":221},[207,544,545],{"class":305},"shape",[207,547,378],{"class":221},[207,549,550,553,555,558,561,564,567],{"class":209,"line":297},[207,551,552],{"class":246},"    augmented_signal ",[207,554,255],{"class":221},[207,556,557],{"class":246}," signal ",[207,559,560],{"class":221},"+",[207,562,563],{"class":246}," noise ",[207,565,566],{"class":221},"*",[207,568,569],{"class":246}," noise_percentage_factor\n",[207,571,572,576],{"class":209,"line":346},[207,573,575],{"class":574},"s7zQu","    return",[207,577,578],{"class":246}," augmented_signal\n",[56,580,581,583,584,587],{},[194,582,226],{}," is the audio as a NumPy array. ",[194,585,586],{},"noise_percentage_factor"," is how loud the noise should be.",[56,589,590],{},"Two choices in that function are worth explaining.",[56,592,593,596],{},[152,594,595],{},"Why scale the noise by the signal's standard deviation?"," Because the noise has to be loud enough to matter and quiet enough to leave the speech intact. The standard deviation ties it to the volume of this particular clip, so the same code works on a whisper and on a shout.",[56,598,599,606],{},[152,600,601,602,605],{},"Why ",[194,603,604],{},"loc=0","?"," A mean of zero means the noise pushes the waveform up as often as it pushes it down. Any other mean would shift the whole signal in one direction and change its amplitude, which is not what you want.",[66,608,610],{"id":609},"_2-time-stretching","2. Time stretching",[56,612,613],{},"Time stretching changes how fast a clip plays without changing its pitch. People speak at different speeds, and this is how you show the model that.",[186,615,617],{"className":201,"code":616,"language":203,"meta":192,"style":192},"def time_stretch(signal, time_stretch_rate):\n    \"\"\"Time stretching using librosa\"\"\"\n    augmented_signal = librosa.effects.time_stretch(signal, rate=time_stretch_rate)  # Specify rate\n    return augmented_signal\n",[194,618,619,637,649,688],{"__ignoreMap":192},[207,620,621,623,626,628,630,632,635],{"class":209,"line":210},[207,622,214],{"class":213},[207,624,625],{"class":217}," time_stretch",[207,627,222],{"class":221},[207,629,226],{"class":225},[207,631,229],{"class":221},[207,633,634],{"class":225}," time_stretch_rate",[207,636,240],{"class":221},[207,638,639,642,646],{"class":209,"line":243},[207,640,641],{"class":574},"    \"\"\"",[207,643,645],{"class":644},"sHwdD","Time stretching using librosa",[207,647,648],{"class":574},"\"\"\"\n",[207,650,651,653,655,658,660,663,665,668,670,672,674,677,679,682,685],{"class":209,"line":297},[207,652,552],{"class":246},[207,654,255],{"class":221},[207,656,657],{"class":246}," librosa",[207,659,261],{"class":221},[207,661,662],{"class":305},"effects",[207,664,261],{"class":221},[207,666,667],{"class":217},"time_stretch",[207,669,222],{"class":221},[207,671,226],{"class":217},[207,673,229],{"class":221},[207,675,676],{"class":225}," rate",[207,678,255],{"class":221},[207,680,681],{"class":217},"time_stretch_rate",[207,683,684],{"class":221},")",[207,686,687],{"class":644},"  # Specify rate\n",[207,689,690,692],{"class":209,"line":346},[207,691,575],{"class":574},[207,693,578],{"class":246},[56,695,696,697,700],{},"With ",[194,698,699],{},"time_stretch_rate > 1"," the clip gets shorter and faster:",[56,702,703],{},[139,704],{"alt":705,"src":706},"Compressed (faster) signal with time_stretch_rate > 1","\u002Fblog\u002Faudio-augmentation\u002Fimage4.png",[56,708,709],{},[146,710,705],{},[56,712,696,713,716],{},[194,714,715],{},"time_stretch_rate \u003C 1"," it gets longer and slower:",[56,718,719],{},[139,720],{"alt":721,"src":722},"Expanded (slower) signal with time_stretch_rate \u003C 1","\u002Fblog\u002Faudio-augmentation\u002Fimage5.png",[56,724,725],{},[146,726,721],{},[66,728,730],{"id":729},"_3-pitch-scaling","3. Pitch scaling",[56,732,733],{},"Pitch scaling moves the pitch and leaves the speed alone, so a high voice becomes a lower one, or the other way around.",[186,735,737],{"className":201,"code":736,"language":203,"meta":192,"style":192},"def pitch_scale(signal, sr, num_semitones):\n    \"\"\"Pitch scaling using librosa\"\"\"\n    augmented_signal = librosa.effects.pitch_shift(signal, sr=sr, n_steps= num_semitones)\n    return augmented_signal\n",[194,738,739,761,770,810],{"__ignoreMap":192},[207,740,741,743,746,748,750,752,754,756,759],{"class":209,"line":210},[207,742,214],{"class":213},[207,744,745],{"class":217}," pitch_scale",[207,747,222],{"class":221},[207,749,226],{"class":225},[207,751,229],{"class":221},[207,753,237],{"class":225},[207,755,229],{"class":221},[207,757,758],{"class":225}," num_semitones",[207,760,240],{"class":221},[207,762,763,765,768],{"class":209,"line":243},[207,764,641],{"class":574},[207,766,767],{"class":644},"Pitch scaling using librosa",[207,769,648],{"class":574},[207,771,772,774,776,778,780,782,784,787,789,791,793,795,797,799,801,804,806,808],{"class":209,"line":297},[207,773,552],{"class":246},[207,775,255],{"class":221},[207,777,657],{"class":246},[207,779,261],{"class":221},[207,781,662],{"class":305},[207,783,261],{"class":221},[207,785,786],{"class":217},"pitch_shift",[207,788,222],{"class":221},[207,790,226],{"class":217},[207,792,229],{"class":221},[207,794,237],{"class":225},[207,796,255],{"class":221},[207,798,324],{"class":217},[207,800,229],{"class":221},[207,802,803],{"class":225}," n_steps",[207,805,255],{"class":221},[207,807,758],{"class":217},[207,809,378],{"class":221},[207,811,812,814],{"class":209,"line":346},[207,813,575],{"class":574},[207,815,578],{"class":246},[817,818,819,827,834],"ul",{},[820,821,822,826],"li",{},[152,823,824],{},[194,825,226],{},": audio as a NumPy array.",[820,828,829,833],{},[152,830,831],{},[194,832,324],{},": sampling rate, for example 44,100 Hz.",[820,835,836,841,842,845,846,849],{},[152,837,838],{},[194,839,840],{},"num_semitones",": how far to shift: ",[194,843,844],{},"+4"," raises the pitch by four semitones, ",[194,847,848],{},"-3"," lowers it by three.",[66,851,853],{"id":852},"_4-random-gain","4. Random gain",[56,855,856],{},"Gain is volume. Multiplying a clip by a random factor gives the model quiet recordings and loud ones from the same source.",[186,858,860],{"className":201,"code":859,"language":203,"meta":192,"style":192},"def random_gain(signal, min_factor=0.1, max_factor=0.12):\n    gain_rate = random.uniform(min_factor, max_factor)\n    augmented_signal = signal * gain_rate\n    return augmented_signal\n",[194,861,862,895,921,934],{"__ignoreMap":192},[207,863,864,866,869,871,873,875,878,880,883,885,888,890,893],{"class":209,"line":210},[207,865,214],{"class":213},[207,867,868],{"class":217}," random_gain",[207,870,222],{"class":221},[207,872,226],{"class":225},[207,874,229],{"class":221},[207,876,877],{"class":225}," min_factor",[207,879,255],{"class":221},[207,881,882],{"class":274},"0.1",[207,884,229],{"class":221},[207,886,887],{"class":225}," max_factor",[207,889,255],{"class":221},[207,891,892],{"class":274},"0.12",[207,894,240],{"class":221},[207,896,897,900,902,905,907,910,912,915,917,919],{"class":209,"line":243},[207,898,899],{"class":246},"    gain_rate ",[207,901,255],{"class":221},[207,903,904],{"class":246}," random",[207,906,261],{"class":221},[207,908,909],{"class":217},"uniform",[207,911,222],{"class":221},[207,913,914],{"class":217},"min_factor",[207,916,229],{"class":221},[207,918,887],{"class":217},[207,920,378],{"class":221},[207,922,923,925,927,929,931],{"class":209,"line":297},[207,924,552],{"class":246},[207,926,255],{"class":221},[207,928,557],{"class":246},[207,930,566],{"class":221},[207,932,933],{"class":246}," gain_rate\n",[207,935,936,938],{"class":209,"line":346},[207,937,575],{"class":574},[207,939,578],{"class":246},[817,941,942,948,959],{},[820,943,944,826],{},[152,945,946],{},[194,947,226],{},[820,949,950,954,955,958],{},[152,951,952],{},[194,953,914],{},": quietest allowed, for example ",[194,956,957],{},"0.5"," for half volume.",[820,960,961,966,967,261],{},[152,962,963],{},[194,964,965],{},"max_factor",": loudest allowed, for example ",[194,968,969],{},"1.5",[66,971,973],{"id":972},"_5-inverting-polarity","5. Inverting polarity",[56,975,976,977,980],{},"Multiply the signal by ",[194,978,979],{},"-1"," and the waveform flips: peaks become troughs, troughs become peaks. It sounds identical on its own, and that is the point. What changes is how it behaves when mixed with the original.",[56,982,983],{},[139,984],{"alt":985,"src":986},"Inverted polarity: peaks become troughs and vice versa","\u002Fblog\u002Faudio-augmentation\u002Fimage6.png",[56,988,989],{},[146,990,985],{},[186,992,994],{"className":201,"code":993,"language":203,"meta":192,"style":192},"def invert_polarity(signal):\n    return signal * -1,\n",[194,995,996,1009],{"__ignoreMap":192},[207,997,998,1000,1003,1005,1007],{"class":209,"line":210},[207,999,214],{"class":213},[207,1001,1002],{"class":217}," invert_polarity",[207,1004,222],{"class":221},[207,1006,226],{"class":225},[207,1008,240],{"class":221},[207,1010,1011,1013,1015,1017,1020,1022],{"class":209,"line":243},[207,1012,575],{"class":574},[207,1014,557],{"class":246},[207,1016,566],{"class":221},[207,1018,1019],{"class":221}," -",[207,1021,417],{"class":274},[207,1023,1024],{"class":221},",\n",[56,1026,1027],{},"Where polarity inversion earns its keep:",[817,1029,1030,1033,1036,1039,1042],{},[820,1031,1032],{},"Cancelling noise by phase inversion.",[820,1034,1035],{},"Fixing phase problems in stereo or multi-channel audio.",[820,1037,1038],{},"Pulling vocals out for a karaoke or instrumental track.",[820,1040,1041],{},"Building sound effects.",[820,1043,1044],{},"Cutting feedback in live performances.",[66,1046,1048],{"id":1047},"_6-stacking-them","6. Stacking them",[56,1050,1051],{},"The transformations compose. Noise plus a time stretch plus a pitch shift gives you a clip that is further from the original than any single one of them, which is usually what you want from a small dataset. Just keep it plausible: if the result sounds like nothing a real microphone would ever record, the model learns from something it will never meet.",[186,1053,1055],{"className":201,"code":1054,"language":203,"meta":192,"style":192},"print(\"Thank you for reading!\")\n",[194,1056,1057],{"__ignoreMap":192},[207,1058,1059,1062,1064,1066,1069,1071],{"class":209,"line":210},[207,1060,1061],{"class":217},"print",[207,1063,222],{"class":221},[207,1065,369],{"class":221},[207,1067,1068],{"class":372},"Thank you for reading!",[207,1070,369],{"class":221},[207,1072,378],{"class":221},[1074,1075,1076],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":192,"searchDepth":243,"depth":243,"links":1078},[1079,1080,1081,1082,1083,1084],{"id":68,"depth":297,"text":69},{"id":609,"depth":297,"text":610},{"id":729,"depth":297,"text":730},{"id":852,"depth":297,"text":853},{"id":972,"depth":297,"text":973},{"id":1047,"depth":297,"text":1048},"2025-02-20","Six ways to stretch a small audio dataset, with the code I use.","md","\u002Fblog\u002Faudio-augmentation\u002Fthumbnail.png",{"tags":1090},[1091,1092,1093],"Machine Learning","Audio","Python",true,{"title":10,"description":1086},"21TaIrmtFsgDoy_h2nB7ilHQ_AZ289VCG3jIH7hw9Rc",[1098,1099],null,{"title":14,"path":15,"stem":16,"description":1100,"children":-1},"Converting Whisper with CTranslate2 so it runs faster and lighter.",1791981009450]