MCPcopy
hub / github.com/ChineseSubFinder/ChineseSubFinder / GetVADInfoFromAudio

Function GetVADInfoFromAudio

pkg/vad/vad_helper.go:15–90  ·  view source on GitHub ↗

GetVADInfoFromAudio 分析音频文件,得到 VAD 分析信息,看样子是不支持并发的,只能单线程使用 无需使用插值的函数

(audioInfo AudioInfo, insert bool)

Source from the content-addressed store, hash-verified

13// GetVADInfoFromAudio 分析音频文件,得到 VAD 分析信息,看样子是不支持并发的,只能单线程使用
14// 无需使用插值的函数
15func GetVADInfoFromAudio(audioInfo AudioInfo, insert bool) ([]VADInfo, error) {
16
17 var (
18 frameIndex = 0
19 frameSize = audioInfo.SampleRate / 1000 * FrameDuration
20 frameBuffer = make([]byte, audioInfo.SampleRate/1000*FrameDuration*audioInfo.BitDepth/8)
21 frameActive = false
22 vadInfos = make([]VADInfo, 0)
23 )
24
25 audioFile, err := os.Open(audioInfo.FileFullPath)
26 if err != nil {
27 return nil, err
28 }
29 defer audioFile.Close()
30
31 reader := bufio.NewReader(audioFile)
32
33 vadInst := webRTCVAD.Create()
34 defer webRTCVAD.Free(vadInst)
35
36 err = webRTCVAD.Init(vadInst)
37 if err != nil {
38 return nil, err
39 }
40
41 if err != nil {
42 return nil, err
43 }
44 err = webRTCVAD.SetMode(vadInst, Mode)
45 if err != nil {
46 return nil, err
47 }
48
49 if ok := webRTCVAD.ValidRateAndFrameLength(audioInfo.SampleRate, frameSize); !ok {
50 return nil, errors.New(fmt.Sprintf("invalid rate or frame length, %v", audioInfo.FileFullPath))
51 }
52 var offset int
53
54 report := func() {
55 t := time.Duration(offset) * time.Second / time.Duration(audioInfo.SampleRate) / 2
56 //log.Printf("Frame: %v, offset: %v, Active: %v, t = %v", frameIndex, offset, frameActive, t)
57 vadInfos = append(vadInfos, *NewVADInfo(
58 frameIndex,
59 offset,
60 frameActive,
61 t,
62 ))
63 }
64
65 for {
66 _, err = io.ReadFull(reader, frameBuffer)
67 if err == io.EOF || err == io.ErrUnexpectedEOF {
68 break
69 }
70 tmpFrameActive, err := webRTCVAD.Process(vadInst, audioInfo.SampleRate, frameBuffer, frameSize)
71 if err != nil {
72 return nil, err

Callers 6

ProcessByAudioFileMethod · 0.92
statistics_subs_scoreFunction · 0.92
TestGetVADInfoFunction · 0.85

Calls 4

NewVADInfoFunction · 0.85
InitMethod · 0.80
ProcessMethod · 0.65
CloseMethod · 0.45

Tested by 2

TestGetVADInfoFunction · 0.68