temp
This commit is contained in:
		
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					dist
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.env*
 | 
				
			||||||
 | 
					!.env*example
 | 
				
			||||||
							
								
								
									
										2
									
								
								.npmrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.npmrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
 | 
				
			||||||
 | 
					//registry.npmjs.org/:_authToken=${NPM_TOKEN}
 | 
				
			||||||
							
								
								
									
										2
									
								
								demos/test-convert/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								demos/test-convert/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					files/*
 | 
				
			||||||
 | 
					!files/test.pcm
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								demos/test-convert/files/test.pcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								demos/test-convert/files/test.pcm
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										12
									
								
								demos/test-convert/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								demos/test-convert/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					import { encodeWav, decodeWav } from '../../src/wav-converter';
 | 
				
			||||||
 | 
					import fs from 'fs';
 | 
				
			||||||
 | 
					const pcm = fs.readFileSync('./files/test.pcm');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const wav = encodeWav(pcm, {
 | 
				
			||||||
 | 
					  sampleRate: 16000,
 | 
				
			||||||
 | 
					  numChannels: 1,
 | 
				
			||||||
 | 
					  byteRate: 16,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					console.log(wav);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync('./files/test.wav', wav);
 | 
				
			||||||
							
								
								
									
										24
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "@kevisual/video",
 | 
				
			||||||
 | 
					  "version": "0.0.1",
 | 
				
			||||||
 | 
					  "description": "",
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "build": "tsup"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "keywords": [],
 | 
				
			||||||
 | 
					  "author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)",
 | 
				
			||||||
 | 
					  "license": "MIT",
 | 
				
			||||||
 | 
					  "packageManager": "pnpm@10.6.2",
 | 
				
			||||||
 | 
					  "type": "module",
 | 
				
			||||||
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@types/node": "^22.14.1",
 | 
				
			||||||
 | 
					    "tsup": "^8.4.0",
 | 
				
			||||||
 | 
					    "typescript": "^5.8.3"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "exports": {
 | 
				
			||||||
 | 
					    ".": "./dist/index.mjs"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "publishConfig": {
 | 
				
			||||||
 | 
					    "access": "public"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1102
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1102
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3
									
								
								src/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					import { encodeWav, decodeWav } from './wav-converter/index.ts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { encodeWav, decodeWav };
 | 
				
			||||||
							
								
								
									
										69
									
								
								src/wav-converter/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/wav-converter/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					type EncodeWavOptions = {
 | 
				
			||||||
 | 
					  numChannels?: number;
 | 
				
			||||||
 | 
					  sampleRate?: number;
 | 
				
			||||||
 | 
					  byteRate?: number;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 编码pcm文件为wav文件
 | 
				
			||||||
 | 
					 * @param rawPCM
 | 
				
			||||||
 | 
					 * @param options
 | 
				
			||||||
 | 
					 * @returns
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function encodeWav(rawPCM: Buffer | string, options?: EncodeWavOptions) {
 | 
				
			||||||
 | 
					  if (typeof rawPCM === 'string') {
 | 
				
			||||||
 | 
					    rawPCM = Buffer.from(rawPCM, 'binary');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!Buffer.isBuffer(rawPCM)) {
 | 
				
			||||||
 | 
					    throw new TypeError('pcm data must be Buffer or string');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const opt = options || {};
 | 
				
			||||||
 | 
					  const sampleRate = opt.sampleRate || 16000;
 | 
				
			||||||
 | 
					  const numChannels = opt.numChannels || 1;
 | 
				
			||||||
 | 
					  const byteRate = opt.byteRate || 16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const buf = rawPCM;
 | 
				
			||||||
 | 
					  const header = Buffer.alloc(44);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  header.write('RIFF', 0);
 | 
				
			||||||
 | 
					  header.writeUInt32LE(buf.length, 4);
 | 
				
			||||||
 | 
					  header.write('WAVE', 8);
 | 
				
			||||||
 | 
					  header.write('fmt ', 12);
 | 
				
			||||||
 | 
					  header.writeUInt8(16, 16);
 | 
				
			||||||
 | 
					  header.writeUInt8(1, 20);
 | 
				
			||||||
 | 
					  header.writeUInt8(numChannels, 22);
 | 
				
			||||||
 | 
					  header.writeUInt32LE(sampleRate, 24);
 | 
				
			||||||
 | 
					  header.writeUInt32LE(byteRate, 28);
 | 
				
			||||||
 | 
					  header.writeUInt8(4, 32);
 | 
				
			||||||
 | 
					  header.writeUInt8(16, 34);
 | 
				
			||||||
 | 
					  header.write('data', 36);
 | 
				
			||||||
 | 
					  header.writeUInt32LE(buf.length + 44 - 8, 40);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return Buffer.concat([header, buf]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 解码wav文件
 | 
				
			||||||
 | 
					 * @param rawWav
 | 
				
			||||||
 | 
					 * @returns
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function decodeWav(rawWav: Buffer | string) {
 | 
				
			||||||
 | 
					  if (typeof rawWav === 'string') {
 | 
				
			||||||
 | 
					    rawWav = Buffer.from(rawWav, 'binary');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!Buffer.isBuffer(rawWav)) {
 | 
				
			||||||
 | 
					    throw new TypeError('pcm data must be Buffer or string');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // remove the header of pcm format
 | 
				
			||||||
 | 
					  rawWav = rawWav.subarray(44);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return rawWav;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const converter = {
 | 
				
			||||||
 | 
					  encodeWav,
 | 
				
			||||||
 | 
					  decodeWav,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										34
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    "module": "NodeNext",
 | 
				
			||||||
 | 
					    "target": "esnext",
 | 
				
			||||||
 | 
					    "noImplicitAny": false,
 | 
				
			||||||
 | 
					    "outDir": "./dist",
 | 
				
			||||||
 | 
					    "sourceMap": false,
 | 
				
			||||||
 | 
					    "allowJs": true,
 | 
				
			||||||
 | 
					    "newLine": "LF",
 | 
				
			||||||
 | 
					    "baseUrl": "./",
 | 
				
			||||||
 | 
					    "typeRoots": [
 | 
				
			||||||
 | 
					      "node_modules/@types",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "declaration": false,
 | 
				
			||||||
 | 
					    "noEmit": true,
 | 
				
			||||||
 | 
					    "allowImportingTsExtensions": true,
 | 
				
			||||||
 | 
					    "moduleResolution": "NodeNext",
 | 
				
			||||||
 | 
					    "experimentalDecorators": true,
 | 
				
			||||||
 | 
					    "emitDecoratorMetadata": true,
 | 
				
			||||||
 | 
					    "esModuleInterop": true,
 | 
				
			||||||
 | 
					    "paths": {
 | 
				
			||||||
 | 
					      "@/*": [
 | 
				
			||||||
 | 
					        "src/*"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "include": [
 | 
				
			||||||
 | 
					    "src/**/*.ts"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "exclude": [
 | 
				
			||||||
 | 
					    "node_modules",
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								tsup.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								tsup.config.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					import { defineConfig } from 'tsup';
 | 
				
			||||||
 | 
					// import glob from 'fast-glob';
 | 
				
			||||||
 | 
					// const services = glob.sync('src/services/*.ts');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const entrys = ['src/index.ts'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default defineConfig({
 | 
				
			||||||
 | 
					  entry: entrys,
 | 
				
			||||||
 | 
					  outExtension: ({ format }) => ({
 | 
				
			||||||
 | 
					    js: format === 'esm' ? '.mjs' : '.js',
 | 
				
			||||||
 | 
					  }),
 | 
				
			||||||
 | 
					  splitting: false,
 | 
				
			||||||
 | 
					  sourcemap: false,
 | 
				
			||||||
 | 
					  clean: true,
 | 
				
			||||||
 | 
					  format: 'esm',
 | 
				
			||||||
 | 
					  external: ['dotenv'],
 | 
				
			||||||
 | 
					  dts: true,
 | 
				
			||||||
 | 
					  outDir: 'dist',
 | 
				
			||||||
 | 
					  tsconfig: 'tsconfig.json',
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Reference in New Issue
	
	Block a user