15
15
#include <filter.h>
16
16
#include <ksv.h>
17
17
#include <ctype.h> /* tolower() */
18
-
18
+ #include <string.h>
19
+ #include <stdio.h>
19
20
20
21
/*
21
22
* This list is used to map gender option values from R to the appropriate
@@ -487,6 +488,148 @@ void destroy_buffer(uint8_t* p) {
487
488
free (p );
488
489
}
489
490
491
+ // code taken from dobj2AsspDataObj(DOBJ * data)
492
+ // & getDObjTrackData()
493
+ int dobj2AsspDataObj (DOBJ * data ){
494
+
495
+ DDESC * desc = NULL ;
496
+ TSSFF_Generic * genVar = NULL ;
497
+ int i ,
498
+ n ;
499
+ /*
500
+ * count tracks
501
+ */
502
+ for (n = 0 , desc = & (data -> ddl ); desc != NULL ; desc = desc -> next ) {
503
+ n ++ ;
504
+ }
505
+
506
+ /*
507
+ * create result, a list with a matrix for each track
508
+ */
509
+ // PROTECT(ans = allocVector(VECSXP, n));
510
+ /*
511
+ * create list of tracks and formats
512
+ */
513
+ // PROTECT(tracks = allocVector(STRSXP, n));
514
+ // PROTECT(trackFormats = allocVector(STRSXP, n));
515
+ for (i = 0 , desc = & (data -> ddl ); desc != NULL ; desc = desc -> next , i ++ ) {
516
+ // SET_STRING_ELT(tracks, i, mkChar(desc->ident));
517
+ // SET_STRING_ELT(trackFormats, i,
518
+ // mkChar(asspDF2ssffString(desc->format)));
519
+ /*
520
+ * fill tracks with data
521
+ */
522
+ printf ("Printing track %s.\n" , desc -> ident );
523
+
524
+ // from getDObjTrackData:
525
+ void * tempBuffer ,
526
+ * bufPtr ;
527
+ int i ,
528
+ m ,
529
+ n ;
530
+ tempBuffer = malloc ((size_t ) data -> recordSize );
531
+ // SET_VECTOR_ELT(ans, i, getDObjTrackData(data, desc));
532
+
533
+ /*
534
+ * various pointers for variuos data sizes
535
+ */
536
+ uint8_t * u8Ptr ;
537
+ int8_t * i8Ptr ;
538
+ uint16_t * u16Ptr ;
539
+ int16_t * i16Ptr ;
540
+ uint32_t * u32Ptr ;
541
+ int32_t * i32Ptr ;
542
+ float * f32Ptr ;
543
+ double * f64Ptr ;
544
+
545
+ double * Rans ;
546
+ int * Ians ;
547
+ uint8_t * bPtr ;
548
+ bPtr = (uint8_t * ) tempBuffer ;
549
+ i = 0 ; /* initial index in buffer */
550
+
551
+
552
+ for (m = 0 ; m < data -> bufNumRecs ; m ++ ) {
553
+ printf ("\n" );
554
+ bufPtr = (void * )((char * )data -> dataBuffer + m * data -> recordSize );
555
+ memcpy (tempBuffer , bufPtr , (size_t ) data -> recordSize );
556
+ switch (desc -> format ) {
557
+ case DF_UINT8 :
558
+ {
559
+ u8Ptr = & bPtr [desc -> offset ];
560
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
561
+ printf ("%i\n" , (unsigned int ) u8Ptr [n ]);
562
+ }
563
+ }
564
+ break ;
565
+ case DF_INT8 :
566
+ {
567
+ i8Ptr = (int8_t * ) & bPtr [desc -> offset ];
568
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
569
+ printf ("%i\t" , (int ) u8Ptr [n ]);
570
+ }
571
+ }
572
+ break ;
573
+ case DF_UINT16 :
574
+ {
575
+ u16Ptr = (uint16_t * ) & bPtr [desc -> offset ];
576
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
577
+ printf ("%i\t" , (unsigned int ) u16Ptr [n ]);
578
+ }
579
+ }
580
+ break ;
581
+ case DF_INT16 :
582
+ {
583
+ i16Ptr = (int16_t * ) & bPtr [desc -> offset ];
584
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
585
+ printf ("%i\t" , (int ) i16Ptr [n ]);
586
+ }
587
+ }
588
+ break ;
589
+ case DF_UINT32 :
590
+ {
591
+ u32Ptr = (uint32_t * ) & bPtr [desc -> offset ];
592
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
593
+ printf ("%lu\t" , (unsigned long ) u32Ptr [n ]);
594
+ }
595
+ }
596
+ break ;
597
+ case DF_INT32 :
598
+ {
599
+ i32Ptr = (int32_t * ) & bPtr [desc -> offset ];
600
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
601
+ printf ("%li\t" , (long ) i32Ptr [n ]);
602
+ }
603
+ }
604
+ break ;
605
+ case DF_REAL32 :
606
+ {
607
+ f32Ptr = (float * ) & bPtr [desc -> offset ];
608
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
609
+ printf ("%f\t" , (double ) f32Ptr [n ]);
610
+ }
611
+ }
612
+ break ;
613
+ case DF_REAL64 :
614
+ {
615
+ f64Ptr = (double * ) & bPtr [desc -> offset ];
616
+ for (n = 0 ; n < desc -> numFields ; n ++ ) {
617
+ printf ("%f\t" , (double ) f64Ptr [n ]);
618
+ }
619
+ }
620
+ break ;
621
+ default :
622
+ fprintf (stderr , "Hi, I just landed in the default of a switch in dataobj.c."
623
+ "I am sorry, I should not be here and I don't know what to do." );
624
+ break ;
625
+ }
626
+ }
627
+ free (tempBuffer );
628
+ }
629
+
630
+ return 0 ;
631
+ }
632
+
490
633
491
634
/*
492
635
* This function performs an ASSP analysis routine
@@ -495,11 +638,73 @@ void destroy_buffer(uint8_t* p) {
495
638
* default options are available)
496
639
*/
497
640
EMSCRIPTEN_KEEPALIVE
498
- int performAssp (uint8_t * audio_in , int function_id ) {
499
- // this is where the magic SHOULD happen :-)
500
- return 10 ;
501
- }
641
+ int performAssp (const char * audio_path , const char * function_name ) {
642
+
643
+ printf ("%s\n" , "### starting performAssp()" );
644
+ AOPTS OPTS ;
645
+ AOPTS * opt = & OPTS ;
646
+ A_F_LIST * anaFunc = funclist ;
502
647
648
+ DOBJ * inPtr ,
649
+ * outPtr ;
650
+
651
+ /*
652
+ * Second parameter must be ASSP function name
653
+ * check for validity and pick the right function descriptor
654
+ */
655
+ while (anaFunc -> funcNum != AF_NONE ) {
656
+ if (strcmp (function_name , anaFunc -> fName ) == 0 ){
657
+ printf ("Performing: %s\n" , anaFunc -> fName );
658
+ break ;
659
+ }
660
+ anaFunc ++ ;
661
+ }
662
+ if (anaFunc -> funcNum == AF_NONE ){
663
+ fprintf (stderr , "Invalid analysis function in performAssp.c" );
664
+ return 1 ;
665
+ }
666
+
667
+ /*
668
+ * generate the default settings for the analysis function
669
+ */
670
+ if ((anaFunc -> setFunc ) (opt ) == -1 ){
671
+ fprintf (stderr , "%d\t$%s\n" , asspMsgNum , getAsspMsg (asspMsgNum ));
672
+ return 1 ;
673
+ }
674
+
675
+ /*
676
+ * open
677
+ */
678
+ inPtr = asspFOpen (strdup (audio_path ), AFO_READ , (DOBJ * ) NULL );
679
+ if (inPtr == NULL ){
680
+ fprintf (stderr , "%s (%s)" , getAsspMsg (asspMsgNum ), strdup (audio_path ));
681
+ }
682
+
683
+ /*
684
+ * run the function (as pointed to in the descriptor) to generate
685
+ * the output object
686
+ */
687
+ outPtr = (anaFunc -> compProc ) (inPtr , opt , (DOBJ * ) NULL );
688
+ if (outPtr == NULL ) {
689
+ asspFClose (inPtr , AFC_FREE );
690
+ fprintf (stderr , "%s (%s)" , getAsspMsg (asspMsgNum ), strdup (audio_path ));
691
+ }
692
+
693
+ /*
694
+ * input data object no longer needed
695
+ */
696
+ asspFClose (inPtr , AFC_FREE );
697
+
698
+ /*
699
+ * TODO write to file
700
+ */
701
+ int tmp = dobj2AsspDataObj (outPtr );
702
+
703
+ asspFClose (outPtr , AFC_FREE );
704
+
705
+ printf ("%s\n" , "done!" );
706
+ return 0 ;
707
+ }
503
708
504
709
505
710
/*
0 commit comments