Add Swift API for speech enhancement GTCRN models (#1989)
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user