mariesig commited on
Commit
abae3b9
·
1 Parent(s): 466ccf8

update to aic-sdk 2.0

Browse files
Files changed (4) hide show
  1. aic_sdk.py +0 -45
  2. app.py +1 -2
  3. requirements.txt +1 -1
  4. sdk.py +52 -0
aic_sdk.py DELETED
@@ -1,45 +0,0 @@
1
- import numpy as np
2
- from dotenv import load_dotenv
3
- from aic import Model, AICModelType, AICParameter
4
- import librosa
5
- import soundfile as sf
6
-
7
- load_dotenv()
8
-
9
-
10
- class SDKParams:
11
- def __init__(self, enhancement_level: float, sdk_key: str):
12
- self.enhancement_level = enhancement_level
13
- self.sdk_key = sdk_key
14
-
15
-
16
- def process_file_sdk(input_path: str, output_path: str, sdk_params: SDKParams):
17
- # Load audio
18
- audio, sample_rate = librosa.load(input_path, sr=48000, mono=True)
19
- audio = audio.reshape(1, -1) # Convert to planar format
20
- output = np.zeros_like(audio)
21
- load_dotenv()
22
- with Model(
23
- AICModelType.QUAIL_L,
24
- license_key=sdk_params.sdk_key,
25
- sample_rate=48000,
26
- channels=1,
27
- ) as model:
28
- model.set_parameter(AICParameter.ENHANCEMENT_LEVEL, sdk_params.enhancement_level)
29
- # Process in chunks
30
- chunk_size = model.optimal_num_frames()
31
- for i in range(0, audio.shape[1], chunk_size):
32
- chunk = audio[:, i : i + chunk_size]
33
- # Pad last chunk if needed
34
- if chunk.shape[1] < chunk_size:
35
- last_chunk_size = chunk.shape[1]
36
- padded = np.zeros((1, chunk_size), dtype=audio.dtype)
37
- padded[:, : chunk.shape[1]] = chunk
38
- chunk = padded
39
- enhanced_chunk = model.process(chunk)
40
- output[:, i : i + last_chunk_size] = enhanced_chunk[:, :last_chunk_size]
41
- break
42
- enhanced_chunk = model.process(chunk)
43
- output[:, i : i + chunk_size] = enhanced_chunk[:, :chunk_size]
44
- # Save result
45
- sf.write(output_path, output.T, sample_rate)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py CHANGED
@@ -16,8 +16,7 @@ from constants import (
16
  MINUTES_KEEP,
17
  EXAMPLES,
18
  )
19
- from aic_api import ApiParamsV2, process_file_v2
20
- from aic_sdk import SDKParams, process_file_sdk
21
  from audio_tools import spec_image, mix_at_snr
22
  import shutil
23
  import tempfile
 
16
  MINUTES_KEEP,
17
  EXAMPLES,
18
  )
19
+ from sdk import SDKParams, process_file_sdk
 
20
  from audio_tools import spec_image, mix_at_snr
21
  import shutil
22
  import tempfile
requirements.txt CHANGED
@@ -4,6 +4,6 @@ soundfile>=0.12.1
4
  aiohttp>=3.9,<4
5
  librosa>=0.10.1,<0.11
6
  loguru~=0.7
7
- aic-sdk
8
  dotenv
9
  resampy
 
4
  aiohttp>=3.9,<4
5
  librosa>=0.10.1,<0.11
6
  loguru~=0.7
7
+ aic-sdk>=2.0.0
8
  dotenv
9
  resampy
sdk.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from platform import processor
2
+
3
+ import numpy as np
4
+ from dotenv import load_dotenv
5
+ import aic_sdk as aic
6
+ import librosa
7
+ import soundfile as sf
8
+
9
+ load_dotenv()
10
+
11
+
12
+
13
+
14
+
15
+
16
+ class SDKParams:
17
+ def __init__(self, enhancement_level: float, sdk_key: str, model_id: str = "quail-vf-1.1-l-16khz"):
18
+ self.enhancement_level = enhancement_level
19
+ self.sdk_key = sdk_key
20
+ self.model_path= aic.Model.download(model_id, "./models")
21
+
22
+
23
+ def process_file_sdk(input_path: str, output_path: str, sdk_params: SDKParams):
24
+ # Load audio
25
+ audio, sr = librosa.load(input_path, sr=48000, mono=True)
26
+ audio = audio.reshape(1, -1) # Convert to planar format
27
+ output = np.zeros_like(audio)
28
+ load_dotenv()
29
+ model = aic.Model.from_file(sdk_params.model_path)
30
+ optimal_frames = model.get_optimal_num_frames(48000)
31
+ config = aic.ProcessorConfig(sample_rate=sr, num_channels=1, num_frames= optimal_frames,allow_variable_frames=False )
32
+ processor = aic.Processor(model, sdk_params.sdk_key, config)
33
+ proc_ctx = processor.get_processor_context()
34
+ #proc_ctx.set_parameter(aic.ProcessorParameter.EnhancementLevel, sdk_params.enhancement_level)
35
+ #proc_ctx.set_parameter(aic.ProcessorParameter.VoiceGain, 1.5)
36
+ #proc_ctx.set_parameter(aic.ProcessorParameter.Bypass, 0.0)
37
+ chunk_size = optimal_frames
38
+ for i in range(0, audio.shape[1], chunk_size):
39
+ chunk = audio[:, i : i + chunk_size]
40
+ # Pad last chunk if needed
41
+ if chunk.shape[1] < chunk_size:
42
+ last_chunk_size = chunk.shape[1]
43
+ padded = np.zeros((1, chunk_size), dtype=audio.dtype)
44
+ padded[:, : chunk.shape[1]] = chunk
45
+ chunk = padded
46
+ enhanced_chunk = processor.process(chunk)
47
+ output[:, i : i + last_chunk_size] = enhanced_chunk[:, :last_chunk_size]
48
+ break
49
+ enhanced_chunk = processor.process(chunk)
50
+ output[:, i : i + chunk_size] = enhanced_chunk[:, :chunk_size]
51
+ # Save result
52
+ sf.write(output_path, output.T, sr)