feat: detect and slice audio attacks atomically and qualify sample editor workflows
This commit is contained in:
parent
edeeb8e8bb
commit
9e380d4dd0
20 changed files with 257 additions and 22 deletions
|
|
@ -7,6 +7,8 @@
|
|||
#include "xtc/xtc_plugin.h"
|
||||
#include "xtc/xtc_editing.h"
|
||||
#include "xtc/xtc_audio.h"
|
||||
#include "xtc/xtc_sample.h"
|
||||
#include <dirent.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
@ -268,8 +270,33 @@ static void composition_failures(void)
|
|||
}
|
||||
xtc_project_destroy(p);assert(rmdir(root)==0);
|
||||
}
|
||||
static void sample_failures(void)
|
||||
{
|
||||
xtc_sample *source=NULL;xtc_project *p=NULL;char path[4096],root[]="/tmp/xtc-sample-fail-XXXXXX",dest[256];uint64_t t,id;int op,failure;
|
||||
assert(getcwd(path,sizeof(path)));assert(strlen(path)+40<sizeof(path));strcat(path,"/examples/projects/original-pluck.wav");assert(mkdtemp(root));
|
||||
snprintf(dest,sizeof(dest),"%s/copy.wav",root);
|
||||
assert(xtc_sample_load(path,&source)==XTC_OK && xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"Audio",&t)==XTC_OK && xtc_project_import_audio(p,t,path,0,&id)==XTC_OK);
|
||||
for(op=0;op<12;++op){int succeeded=0;
|
||||
for(failure=0;failure<128;++failure){xtc_sample *output=NULL;xtc_project *copy=NULL;xtc_result r;size_t made=999,cuts[]={2400,4800};
|
||||
assert(xtc_project_clone(p,©)==XTC_OK);fail_after=failure;
|
||||
if(op<9)r=xtc_sample_process(source,100,1000,(xtc_sample_operation)op,op==XTC_SAMPLE_GAIN ? 2 : .5,&output);
|
||||
else if(op==9)r=xtc_sample_load(path,&output);
|
||||
else if(op==10)r=xtc_sample_write(source,100,1000,dest);
|
||||
else r=xtc_project_slice_source_frames(copy,id,48000,cuts,2,&made);
|
||||
fail_after=-1;
|
||||
if(r==XTC_OK)succeeded=1;
|
||||
else {assert(r==XTC_ERR_OUT_OF_MEMORY||r==XTC_ERR_IO);assert(output==NULL && made==999 && access(dest,F_OK)!=0);
|
||||
{size_t tracks,clips;uint64_t probe;assert(xtc_project_get_counts(copy,&tracks,&clips)==XTC_OK && clips==1);assert(xtc_project_duplicate_clip(copy,id,t,10000,&probe)==XTC_OK && probe==1);}}
|
||||
if(op==10&&succeeded)assert(unlink(dest)==0);
|
||||
{DIR *d=opendir(root);struct dirent *entry;assert(d);while((entry=readdir(d)))assert(!strcmp(entry->d_name,".")||!strcmp(entry->d_name,".."));assert(closedir(d)==0);}
|
||||
xtc_sample_destroy(output);xtc_project_destroy(copy);if(succeeded)break;
|
||||
}assert(succeeded);
|
||||
}
|
||||
xtc_sample_destroy(source);xtc_project_destroy(p);assert(rmdir(root)==0);
|
||||
}
|
||||
int main(void)
|
||||
{
|
||||
sample_failures();
|
||||
composition_failures();
|
||||
modern_edit_failures();
|
||||
builtin_failures();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue