Add Swift API for speech enhancement GTCRN models (#1989)

This commit is contained in:
Fangjun Kuang
2025-03-11 18:03:13 +08:00
committed by GitHub
parent 802119db17
commit c12d1d88c0
5 changed files with 192 additions and 0 deletions

View File

@@ -1323,3 +1323,101 @@ class SherpaOnnxOfflineSpeakerDiarizationWrapper {
return ans
}
}
func sherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig(model: String = "")
-> SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig
{
return SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig(model: toCPointer(model))
}
func sherpaOnnxOfflineSpeechDenoiserModelConfig(
gtcrn: SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig =
sherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig(),
numThreads: Int = 1,
provider: String = "cpu",
debug: Int = 0
) -> SherpaOnnxOfflineSpeechDenoiserModelConfig {
return SherpaOnnxOfflineSpeechDenoiserModelConfig(
gtcrn: gtcrn,
num_threads: Int32(numThreads),
debug: Int32(debug),
provider: toCPointer(provider)
)
}
func sherpaOnnxOfflineSpeechDenoiserConfig(
model: SherpaOnnxOfflineSpeechDenoiserModelConfig =
sherpaOnnxOfflineSpeechDenoiserModelConfig()
) -> SherpaOnnxOfflineSpeechDenoiserConfig {
return SherpaOnnxOfflineSpeechDenoiserConfig(
model: model)
}
class SherpaOnnxDenoisedAudioWrapper {
/// A pointer to the underlying counterpart in C
let audio: UnsafePointer<SherpaOnnxDenoisedAudio>!
init(audio: UnsafePointer<SherpaOnnxDenoisedAudio>!) {
self.audio = audio
}
deinit {
if let audio {
SherpaOnnxDestroyDenoisedAudio(audio)
}
}
var n: Int32 {
return audio.pointee.n
}
var sampleRate: Int32 {
return audio.pointee.sample_rate
}
var samples: [Float] {
if let p = audio.pointee.samples {
var samples: [Float] = []
for index in 0..<n {
samples.append(p[Int(index)])
}
return samples
} else {
let samples: [Float] = []
return samples
}
}
func save(filename: String) -> Int32 {
return SherpaOnnxWriteWave(audio.pointee.samples, n, sampleRate, toCPointer(filename))
}
}
class SherpaOnnxOfflineSpeechDenoiserWrapper {
/// A pointer to the underlying counterpart in C
let impl: OpaquePointer!
/// Constructor taking a model config
init(
config: UnsafePointer<SherpaOnnxOfflineSpeechDenoiserConfig>!
) {
impl = SherpaOnnxCreateOfflineSpeechDenoiser(config)
}
deinit {
if let impl {
SherpaOnnxDestroyOfflineSpeechDenoiser(impl)
}
}
func run(samples: [Float], sampleRate: Int) -> SherpaOnnxDenoisedAudioWrapper {
let audio: UnsafePointer<SherpaOnnxDenoisedAudio>? = SherpaOnnxOfflineSpeechDenoiserRun(
impl, samples, Int32(samples.count), Int32(sampleRate))
return SherpaOnnxDenoisedAudioWrapper(audio: audio)
}
var sampleRate: Int {
return Int(SherpaOnnxOfflineSpeechDenoiserGetSampleRate(impl))
}
}