@@ -529,20 +529,112 @@ def ratecv(cp, size, nchannels, inrate, outrate, state, weightA=1, weightB=0):
529
529
d -= inrate
530
530
531
531
532
+ def _to_lin (table , cp , size ):
533
+ result = create_string_buffer (len (cp ) * size )
534
+
535
+ for i , sample in enumerate (cp ):
536
+ _put_sample (result , size , i , table [sample ])
537
+
538
+ return result .raw
539
+
540
+ # Source: https://github.com/python/cpython/blob/3.12/Modules/audioop.c#L91
541
+ _ulaw2lin_table = [
542
+ - 32124 , - 31100 , - 30076 , - 29052 , - 28028 , - 27004 , - 25980 ,
543
+ - 24956 , - 23932 , - 22908 , - 21884 , - 20860 , - 19836 , - 18812 ,
544
+ - 17788 , - 16764 , - 15996 , - 15484 , - 14972 , - 14460 , - 13948 ,
545
+ - 13436 , - 12924 , - 12412 , - 11900 , - 11388 , - 10876 , - 10364 ,
546
+ - 9852 , - 9340 , - 8828 , - 8316 , - 7932 , - 7676 , - 7420 ,
547
+ - 7164 , - 6908 , - 6652 , - 6396 , - 6140 , - 5884 , - 5628 ,
548
+ - 5372 , - 5116 , - 4860 , - 4604 , - 4348 , - 4092 , - 3900 ,
549
+ - 3772 , - 3644 , - 3516 , - 3388 , - 3260 , - 3132 , - 3004 ,
550
+ - 2876 , - 2748 , - 2620 , - 2492 , - 2364 , - 2236 , - 2108 ,
551
+ - 1980 , - 1884 , - 1820 , - 1756 , - 1692 , - 1628 , - 1564 ,
552
+ - 1500 , - 1436 , - 1372 , - 1308 , - 1244 , - 1180 , - 1116 ,
553
+ - 1052 , - 988 , - 924 , - 876 , - 844 , - 812 , - 780 ,
554
+ - 748 , - 716 , - 684 , - 652 , - 620 , - 588 , - 556 ,
555
+ - 524 , - 492 , - 460 , - 428 , - 396 , - 372 , - 356 ,
556
+ - 340 , - 324 , - 308 , - 292 , - 276 , - 260 , - 244 ,
557
+ - 228 , - 212 , - 196 , - 180 , - 164 , - 148 , - 132 ,
558
+ - 120 , - 112 , - 104 , - 96 , - 88 , - 80 , - 72 ,
559
+ - 64 , - 56 , - 48 , - 40 , - 32 , - 24 , - 16 ,
560
+ - 8 , 0 , 32124 , 31100 , 30076 , 29052 , 28028 ,
561
+ 27004 , 25980 , 24956 , 23932 , 22908 , 21884 , 20860 ,
562
+ 19836 , 18812 , 17788 , 16764 , 15996 , 15484 , 14972 ,
563
+ 14460 , 13948 , 13436 , 12924 , 12412 , 11900 , 11388 ,
564
+ 10876 , 10364 , 9852 , 9340 , 8828 , 8316 , 7932 ,
565
+ 7676 , 7420 , 7164 , 6908 , 6652 , 6396 , 6140 ,
566
+ 5884 , 5628 , 5372 , 5116 , 4860 , 4604 , 4348 ,
567
+ 4092 , 3900 , 3772 , 3644 , 3516 , 3388 , 3260 ,
568
+ 3132 , 3004 , 2876 , 2748 , 2620 , 2492 , 2364 ,
569
+ 2236 , 2108 , 1980 , 1884 , 1820 , 1756 , 1692 ,
570
+ 1628 , 1564 , 1500 , 1436 , 1372 , 1308 , 1244 ,
571
+ 1180 , 1116 , 1052 , 988 , 924 , 876 , 844 ,
572
+ 812 , 780 , 748 , 716 , 684 , 652 , 620 ,
573
+ 588 , 556 , 524 , 492 , 460 , 428 , 396 ,
574
+ 372 , 356 , 340 , 324 , 308 , 292 , 276 ,
575
+ 260 , 244 , 228 , 212 , 196 , 180 , 164 ,
576
+ 148 , 132 , 120 , 112 , 104 , 96 , 88 ,
577
+ 80 , 72 , 64 , 56 , 48 , 40 , 32 ,
578
+ 24 , 16 , 8 , 0
579
+ ]
580
+
581
+
532
582
def lin2ulaw (cp , size ):
533
583
raise NotImplementedError ()
534
584
535
585
536
586
def ulaw2lin (cp , size ):
537
- raise NotImplementedError ()
587
+ return _to_lin (_ulaw2lin_table , cp , size )
588
+
589
+
590
+ # Source: https://github.com/python/cpython/blob/3.12/Modules/audioop.c#L198
591
+ _alaw2lin_table = [
592
+ - 5504 , - 5248 , - 6016 , - 5760 , - 4480 , - 4224 , - 4992 ,
593
+ - 4736 , - 7552 , - 7296 , - 8064 , - 7808 , - 6528 , - 6272 ,
594
+ - 7040 , - 6784 , - 2752 , - 2624 , - 3008 , - 2880 , - 2240 ,
595
+ - 2112 , - 2496 , - 2368 , - 3776 , - 3648 , - 4032 , - 3904 ,
596
+ - 3264 , - 3136 , - 3520 , - 3392 , - 22016 , - 20992 , - 24064 ,
597
+ - 23040 , - 17920 , - 16896 , - 19968 , - 18944 , - 30208 , - 29184 ,
598
+ - 32256 , - 31232 , - 26112 , - 25088 , - 28160 , - 27136 , - 11008 ,
599
+ - 10496 , - 12032 , - 11520 , - 8960 , - 8448 , - 9984 , - 9472 ,
600
+ - 15104 , - 14592 , - 16128 , - 15616 , - 13056 , - 12544 , - 14080 ,
601
+ - 13568 , - 344 , - 328 , - 376 , - 360 , - 280 , - 264 ,
602
+ - 312 , - 296 , - 472 , - 456 , - 504 , - 488 , - 408 ,
603
+ - 392 , - 440 , - 424 , - 88 , - 72 , - 120 , - 104 ,
604
+ - 24 , - 8 , - 56 , - 40 , - 216 , - 200 , - 248 ,
605
+ - 232 , - 152 , - 136 , - 184 , - 168 , - 1376 , - 1312 ,
606
+ - 1504 , - 1440 , - 1120 , - 1056 , - 1248 , - 1184 , - 1888 ,
607
+ - 1824 , - 2016 , - 1952 , - 1632 , - 1568 , - 1760 , - 1696 ,
608
+ - 688 , - 656 , - 752 , - 720 , - 560 , - 528 , - 624 ,
609
+ - 592 , - 944 , - 912 , - 1008 , - 976 , - 816 , - 784 ,
610
+ - 880 , - 848 , 5504 , 5248 , 6016 , 5760 , 4480 ,
611
+ 4224 , 4992 , 4736 , 7552 , 7296 , 8064 , 7808 ,
612
+ 6528 , 6272 , 7040 , 6784 , 2752 , 2624 , 3008 ,
613
+ 2880 , 2240 , 2112 , 2496 , 2368 , 3776 , 3648 ,
614
+ 4032 , 3904 , 3264 , 3136 , 3520 , 3392 , 22016 ,
615
+ 20992 , 24064 , 23040 , 17920 , 16896 , 19968 , 18944 ,
616
+ 30208 , 29184 , 32256 , 31232 , 26112 , 25088 , 28160 ,
617
+ 27136 , 11008 , 10496 , 12032 , 11520 , 8960 , 8448 ,
618
+ 9984 , 9472 , 15104 , 14592 , 16128 , 15616 , 13056 ,
619
+ 12544 , 14080 , 13568 , 344 , 328 , 376 , 360 ,
620
+ 280 , 264 , 312 , 296 , 472 , 456 , 504 ,
621
+ 488 , 408 , 392 , 440 , 424 , 88 , 72 ,
622
+ 120 , 104 , 24 , 8 , 56 , 40 , 216 ,
623
+ 200 , 248 , 232 , 152 , 136 , 184 , 168 ,
624
+ 1376 , 1312 , 1504 , 1440 , 1120 , 1056 , 1248 ,
625
+ 1184 , 1888 , 1824 , 2016 , 1952 , 1632 , 1568 ,
626
+ 1760 , 1696 , 688 , 656 , 752 , 720 , 560 ,
627
+ 528 , 624 , 592 , 944 , 912 , 1008 , 976 ,
628
+ 816 , 784 , 880 , 848
629
+ ]
538
630
539
631
540
632
def lin2alaw (cp , size ):
541
633
raise NotImplementedError ()
542
634
543
635
544
636
def alaw2lin (cp , size ):
545
- raise NotImplementedError ( )
637
+ return _to_lin ( _alaw2lin_table , cp , size )
546
638
547
639
548
640
def lin2adpcm (cp , size , state ):
0 commit comments