18AD83292BFB22DE009BDE3B /* AiSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AD83272BFB22DE009BDE3B /* AiSender.h */; };
18AD832A2BFB22DE009BDE3B /* AiSender.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AD83282BFB22DE009BDE3B /* AiSender.m */; };
18EF7AF72C7603E800AC5223 /* TlwRecordManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AE82C7603E800AC5223 /* TlwRecordManager.m */; };
- 18EF7AF82C7603E800AC5223 /* ADPCMConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AE92C7603E800AC5223 /* ADPCMConverter.m */; };
18EF7AF92C7603E800AC5223 /* adpcm.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEA2C7603E800AC5223 /* adpcm.h */; };
18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEB2C7603E800AC5223 /* TlwMouseSdk.m */; };
18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEC2C7603E800AC5223 /* TlwTools.m */; };
18EF7AFC2C7603E800AC5223 /* TlwConnectManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AED2C7603E800AC5223 /* TlwConnectManager.m */; };
18EF7AFD2C7603E800AC5223 /* TlwAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */; };
- 18EF7AFE2C7603E800AC5223 /* ADPCMConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEF2C7603E800AC5223 /* ADPCMConverter.h */; };
18EF7B002C7603E800AC5223 /* TlwRecordManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF12C7603E800AC5223 /* TlwRecordManager.h */; };
18EF7B012C7603E800AC5223 /* adpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF22C7603E800AC5223 /* adpcm.c */; };
18EF7B022C7603E800AC5223 /* TlwTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF32C7603E800AC5223 /* TlwTools.h */; };
18AD83272BFB22DE009BDE3B /* AiSender.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiSender.h; sourceTree = "<group>"; };
18AD83282BFB22DE009BDE3B /* AiSender.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiSender.m; sourceTree = "<group>"; };
18EF7AE82C7603E800AC5223 /* TlwRecordManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwRecordManager.m; sourceTree = "<group>"; };
- 18EF7AE92C7603E800AC5223 /* ADPCMConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADPCMConverter.m; sourceTree = "<group>"; };
18EF7AEA2C7603E800AC5223 /* adpcm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = adpcm.h; sourceTree = "<group>"; };
18EF7AEB2C7603E800AC5223 /* TlwMouseSdk.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwMouseSdk.m; sourceTree = "<group>"; };
18EF7AEC2C7603E800AC5223 /* TlwTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwTools.m; sourceTree = "<group>"; };
18EF7AED2C7603E800AC5223 /* TlwConnectManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwConnectManager.m; sourceTree = "<group>"; };
18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwAudioManager.h; sourceTree = "<group>"; };
- 18EF7AEF2C7603E800AC5223 /* ADPCMConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADPCMConverter.h; sourceTree = "<group>"; };
18EF7AF12C7603E800AC5223 /* TlwRecordManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwRecordManager.h; sourceTree = "<group>"; };
18EF7AF22C7603E800AC5223 /* adpcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adpcm.c; sourceTree = "<group>"; };
18EF7AF32C7603E800AC5223 /* TlwTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwTools.h; sourceTree = "<group>"; };
18EF7AED2C7603E800AC5223 /* TlwConnectManager.m */,
18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */,
18EF7AF52C7603E800AC5223 /* TlwAudioManager.m */,
- 18EF7AEF2C7603E800AC5223 /* ADPCMConverter.h */,
- 18EF7AE92C7603E800AC5223 /* ADPCMConverter.m */,
18EF7AEA2C7603E800AC5223 /* adpcm.h */,
18EF7AF22C7603E800AC5223 /* adpcm.c */,
);
180E7B582BD7BD83008558E8 /* AiRecordManager.h in Headers */,
180E7CE12BD8FC4E008558E8 /* avdevice.h in Headers */,
180E7CE92BD8FC4E008558E8 /* defs.h in Headers */,
- 18EF7AFE2C7603E800AC5223 /* ADPCMConverter.h in Headers */,
180E7C942BD8FC4E008558E8 /* stereo3d.h in Headers */,
180E7CDE2BD8FC4E008558E8 /* film_grain_params.h in Headers */,
180E7C8C2BD8FC4E008558E8 /* error.h in Headers */,
180E7BE32BD7BD84008558E8 /* AiFrameManager.m in Sources */,
180E7BE72BD7BD84008558E8 /* AiAudioManager.m in Sources */,
189C15872C05726600676A80 /* AiConnectManager.m in Sources */,
- 18EF7AF82C7603E800AC5223 /* ADPCMConverter.m in Sources */,
18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */,
18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */,
180E7BDF2BD7BD84008558E8 /* AiMouseConfig.m in Sources */,
+++ /dev/null
-//
-// AiAdpcm2pcm.h
-// AiMouseSdk
-//
-// Created by incar on 2024/8/20.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface ADPCMConverter : NSObject
-
-- (NSData *)convertADPCMToPCM:(NSData *)adpcmData;
-
-@end
-
-NS_ASSUME_NONNULL_END
+++ /dev/null
-
-#import "ADPCMConverter.h"
-#import <Foundation/Foundation.h>
-
-
-
-@implementation ADPCMConverter
-
-static const signed char idxtbl[] = { -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8};
-static const unsigned short steptbl[] = {
- 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
- 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
- 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
- 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
- 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
- 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
- 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
- 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
-};
-
-#define NUM_OF_ORIG_SAMPLE 2
-
-- (NSData *)convertADPCMToPCM:(NSData *)adpcmData {
- NSMutableData *pcmData = [NSMutableData data];
- const signed short *source = (const signed short *)[adpcmData bytes];
- signed short *destination = (signed short *)[pcmData mutableBytes];
- int len = (int)[adpcmData length] / sizeof(signed short);
-
- int i;
- // 假设 source 中的前两个元素分别是 predict 和 predict_idx
- int predict = source[0];
- int predict_idx = source[1] & 0xff;
- const unsigned char *pcode = (const unsigned char *)(source + NUM_OF_ORIG_SAMPLE);
- unsigned char code;
- code = *pcode++;
-
- for (i = 0; i < len; i++) {
- if (1) {
- int step = steptbl[predict_idx];
-
- int diffq = step >> 3;
-
- if (code & 4) {
- diffq = diffq + step;
- }
- step = step >> 1;
- if (code & 2) {
- diffq = diffq + step;
- }
- step = step >> 1;
- if (code & 1) {
- diffq = diffq + step;
- }
-
- if (code & 8) {
- predict = predict - diffq;
- } else {
- predict = predict + diffq;
- }
-
- if (predict > 32767) {
- predict = 32767;
- } else if (predict < -32768) {
- predict = -32768;
- }
-
- predict_idx = predict_idx + idxtbl[code & 15];
-
- if (predict_idx < 0) {
- predict_idx = 0;
- } else if (predict_idx > 88) {
- predict_idx = 88;
- }
-
- if (i & 1) {
- code = *pcode++;
- } else {
- code = code >> 4;
- }
- }
-
- if (0 && i < NUM_OF_ORIG_SAMPLE) {
- destination[i] = source[i];
- } else {
- destination[i] = predict;
- }
- }
- return pcmData;
-}
-
-@end
#import "TlwAudioManager.h"
#import <AVFoundation/AVFoundation.h>
-#import "ADPCMConverter.h"
#import "adpcm.h"
@interface TlwAudioManager ()
}
- (void)receiveData:(NSData *)data{
-// [self.audioDecoder decodeSBCData:data];
-
NSData *pcmData = [self convertADPCMDataToPCMData:data];
if(self.decodeCallBack)self.decodeCallBack(pcmData);
}
signed short *pd = (signed short *)malloc(adpcmLength * 4);
- adpcm_to_pcm(ps, pd, adpcmLength / sizeof(signed short)*2);
+ adpcm_to_pcm(ps, pd, 248);
- NSData *pcmData = [NSData dataWithBytes:pd length:adpcmLength * 4];
+ NSData *pcmData = [NSData dataWithBytes:pd length:496];
free(ps);
free(pd);
[self presentViewControllerAsModalWindow:vc];
}
- (void)tlwAction{
- [TlwHidManager shared];
- return;
+// [TlwHidManager shared];
+// return;
TlwVC *vc = [[TlwVC alloc] initWithNibName:nil bundle:nil];
[self presentViewControllerAsModalWindow:vc];